在ArchLinux上我們可以很容易的來安裝MySQL。我們可以通過下面的命令來安裝:
pacman -Sv mysql
只是這樣的一個簡單命令,我們就可以在我們的系統安裝上最新的MySQL資料庫了。當然我們還要做一些下面的工作,才可以使得我們的MySQL伺服器可以啟動起來。
首先我們要添加mysql使用者與組,我們可以通過下面的命令來做到:
groupadd mysql (添加mysql組)
useradd -g mysql mysql(添加mysql使用者)
然後我們可以用下面的命令來安裝MySQL資料庫預定義的一些資料表:
mysql_install_db --user=mysql
這時如果我們來啟動MySQL伺服器會有一些提示資訊,我們還要做下面的一些事情:
mkdir /var/lib/mysql
touch /var/lib/mysql/myhost.err
經過這樣的操作以後,我們就可以啟動MySQL伺服器了:
mysqld_safe &
MySQL伺服器啟動指令碼
mysqld_safe--MySQL伺服器啟動指令碼
mysqld_safe是在Unix或是NetWare系統推薦使用來啟動MySQL伺服器的方法。mysqld_safe添加了許多安全的特徵,例如,當發生錯誤時重新啟動伺服器,並且可以將運行時的資訊寫入錯誤記錄檔檔案。
在這裡我們要注意的是,為了與舊版本的MySQL保持向後相容,MySQL的二進位發行版本同時也包含safe_mysqld作為指向mysqld_safe的連結。然而我們並不應依賴於這個啟動程式,因為這在將來的版本中會被移除。
在預設的情況下,如果在存在一個可執行檔mysqld-max,mysqld_safe
1 在Linux系統上,MySQL-Max RPM依賴於mysqld_safe的行為。RPM安裝一個名為mysqld-max的可執行程式,這會使得mysqld_safe從此以後自動調用這個可執行程式。
2 如果你安裝了一個包含名為mysqld-max伺服器的二進位發行版本,然後在以後的某一個時期我們更新到了一個沒有Max版本的MySQL, mysqld_safe仍然會試著運行舊的mysqld-max的伺服器。如果我們執行了這樣的更新,我們應手式移除舊的mysqld-max伺服器,並 且保證mysqld_safe運行新的的mysqld伺服器。
要覆蓋預設的行為並且顯示的指明我們要啟動並執行伺服器,我們可以為我們的mysqld_safe指定一個-mysqld或是-mysqld-version選項。
mysqld_safe的大多數選項與mysqld的相同。
mysqld命令列選項
在命令列為mysqld_safe指定的所有選項都傳遞給mysqld。如果我們要使用任何一個為mysqld_safe指定的並且mysqld不支援的,不要在命令列指定他們。相反的,我們可以在一個可選的檔案[mysqld_safe]組中列出。
mysqld_safe從選項檔案中的[mysqld],[server],[mysqld_safe]部分讀出各個選項。為了向後相容,他還會讀出[safe_mysqld]部分,雖然我們要在MySQL5.0的安裝中將這一部分重新命名為[mysqld_safe].
mysqld_safe支援下列的選項:
--help
顯示協助資訊並退出。
--autoclose
在NetWare系統上,mysqld_safe提供一個螢幕顯示.當我們禦載(關閉)mysqld_safe NLM,在預設的情況下這個螢幕並不會消失.相反,他們提示使用者進行輸入:
**
如果我們希望NetWare自動關閉這個螢幕,我們可以為mysqld_safe提供--autoclose選項
--basedir=path
指定MySQL的安裝目錄
--core-file-size=size
mysqld可以建立的core檔案的大小。這個選項的值將會傳遞給ulimit -c.
--datadir=path
資料目錄的路徑。
--defaults-extra-file=path
在常規選項檔案之外要讀取的額外的選項檔案名稱。如果要指定,這個選項必須是第一個。
--defaults-file=path
替換常規選項檔案要讀取的選項檔案。如果要指定,這個選項必須是第一個。
--ledir=path
包含mysqld程式的目錄路徑。使用這個選項來顯示指明伺服器的位置。
--log-error=path
將錯誤記錄檔寫入指定的檔案。
--mysqld=prog_name
我們要啟動的伺服器程式的名字。如果我們使用MySQL的二進位發行版本,但是使用卻是二進位版本以外的資料目錄,那麼這個選項是必須的。
--mysqld-version=suffix
這 個選項與--mysqld程式相似,但是我們只是為伺服器程式指定了首碼。基礎名會被假定為mysqld。例如,如果我們使用-mysqld- version=max,mysqld_safe將會啟動ledir目錄中的mysqld-max程式。如果--mysqld-version的參數為 空,mysqld_safe會使用ledir目錄中的mysqld程式。
--nice=priority
使用nice程式來為伺服器的運行層級指定一個數值。
--no-defaults
並不讀入任何選項檔案。如果要指定,這個選項必須是第一個。
--open-files-limit=count
mysqld可以開啟的檔案數量。這個選項值將會傳遞給ulimit -n。在這裡我們要注意的是如果要使用這個選項正常工作,我們需要以root身份來啟動mysqld_safe。
--pid-file=path
進程式ID檔案的路徑。
--port=port_num
當監聽TCP/IP串連時要使用的連接埠號碼.這個連接埠號碼必須是1024或是更高,除非MySQL是以root系統使用者啟動並執行.
--skip-character-set-client-handshake
忽略用戶端發送的字元設定資訊,而使用預設的伺服器字元設定.
--socket=path
為本地串連所用的Unix通訊端檔案.
--timezone=zone
將TZ時區環境變數設定為指定的值.查看我們的作業系統檔案可以得到合法時區的詳細格式.
--user={user_name | user_id}
以使用者名稱user_name或是數字使用者ID user_id的使用者來運行mysqld伺服器.
當運行mysqld_safe時,必須首先指定--defaults-file或是--defaults-extra-option選項,否則選項將不會被使用.例如,下面的命令就不會使用指定的選項檔案:
mysqld_safe --port=port_num --defaults-file=file_name
相反,我們應使用下面的命令:
mysqld_safe --defaults-file=file_name --port=port_num
mysqld_safe這樣進行編寫就可以保證正常的啟動由源碼包或是二進位發行版本�滄暗腗ySQL中的伺服器,甚至是這些二進位發行版本將其安裝在不同的位置也可以正常的啟動。mysqld_safe要求下列條件中的一個為真:
1 在相對於mysqld_safe的目錄的相對目錄中可以找到伺服器和資料庫。對於二進位發行版本,mysqld_safe在他的工作目錄下尋找bin和 data目錄。對於源碼包安裝的MySQL,他會尋找libexec和var目錄。如果我們從我們的MySQL安裝目錄執行mysqld_safe,這些 條件必須滿足。
2 如果伺服器和資料並沒有在MySQL的工作目錄的相對目錄中找到,mysqld_safe就會試著以絕對路徑來進行尋找。典型的路徑是 /usr/local/libexec和/usr/local/var。實際的路徑將會決定於二進位發行版本在構建時所配置的值。如果MySQL安裝在配 置時指定的路徑內,這些必須正確。
因為mysqld_safe會試著在相對於他的工作目錄的目錄中尋找伺服器與資料庫,所以我們可以將MySQL安裝在任何地方,只要我們在MySQL的安裝目錄中執行mysqld_safe即可:
shell> cd mysql_installation_directory
shell> bin/mysqld_safe &
如果mysqld_safe失敗,即使是在MySQL的安裝目錄中進行調用,我們也可以指定--ledir和--datadir選項來表明伺服器與資料庫在我們的系統中所在的目錄。
在 通常情況下我們不應修改mysqld_safe指令碼,我們可以使用命令或是在my.cnf選項檔案中的[mysqld_safe]部分進行修改。只有在極 少的情況下也許必須修改mysqld_safe指令碼來使得他正常啟動。然而,如果我們這樣做,如果我們在將來進行升級,我們所修改的版本就會被覆蓋掉,所 以我們要備份一個我們的修改版本,從而我們可以進行重裝。
MySQL伺服器的關閉過程
MySQL伺服器的關閉過程可以總結為以下幾點:
1 初始化關閉過程
2 如果必須伺服器建立一個關閉進程
3 伺服器停止接受新的串連
4 伺服器結束當前的活動
5 儲存引擎結束或是關閉
6 伺服器結束
更為詳細的描述如下:
1 初始化關閉過程
可 以用幾種方法來初始伺服器關閉。例如,一個有著SHUTDOWN許可權的使用者可以執行mysqladmin shutdown命令。mysqladmin可以在MySQL支援的任何平台上運行。其他與作業系統相關的實始化方法也是可以的:在Unix系統上,當服 務器接收到一個SIGTERM訊號時伺服器就會結束。在Windows系統上以服務啟動並執行伺服器可以在工作管理員中結束。
2 如果必須伺服器會建立一個結束進程
依 據如何初始化結束,伺服器也許會建立一個進程來處理結束過程。如果結束是由用戶端請求,就會建立一個結束進程。如果結束是由接收到SIGTERM訊號引起 的,訊號進程將會處理結束過程,或者他會建立一個單獨的進程來處理。如果伺服器試著建立一個結束進程但是卻建立失敗時,他會顯示如下的錯誤資訊:
Error: Can't create thread to kill server
3 伺服器停止接受新的串連
為了避免在結束過程中新的活動,伺服器停止新收新的串連。這樣做的方法是結束平時監聽的網路連接:TCP/IP連接埠,Unix通訊端檔案,Windows命令管道,Windows上的共用主存.
4 伺服器結束當前的活動
為每一個與用戶端相關的進程,到用戶端的每一個串連斷開並且每一個進程被標識為死亡.當進程發現他們被進行了這樣的標識時就會死掉.空串連的進程會很快死掉.當前進行中查詢的進程會檢查他們的狀態並且過後死掉.
對於有一個開放事務的進程,事務會滾回.在這裡我們要注意的是如果一個進程在更新一個非事務表,例如多行更新或是插入的操作,將會使得表部分更新,因為這樣的操作會在完成之前結束.
如果這個伺服器是一個主複製伺服器,與當前串連的從伺服器的進程也會被當作其他的用戶端進程對待.也就是說,每一個進程都會被標識為死亡,當下一次檢查狀態時退出.
如果這個伺服器是一個從複製伺服器,I/O與SQL進程,如果是活動,將會在用戶端進程被標識為死亡之前被停止.SQL進程會允許結束當前的語句然後退出.如果SQL進程此時進行中交易處理,事務將會滾回.
5 儲存引擎結束或是關閉
在這一步,資料表緩衝將會被重新整理,而所有開啟的表都會被關閉.
每一個儲存引擎都會為他所管理的資料表進行必要的操作.例如,MyISAM會重新整理一個表的索引.
6 伺服器結束.事務會滾回.在這裡我們要注意的是如果一個進程在更新一個非事務表,例如多行更新或是插入的操作,將會使得表部分更新,因為這樣的操作會在完成之前結束.
如果這個伺服器是一個主複製伺服器,與當前串連的從伺服器的進程也會被當作其他的用戶端進程對待.也就是說,每一個進程都會被標識為死亡,當下一次檢查狀態時退出.
如果這個伺服器是一個從複製伺服器,I/O與SQL進程,如果是活動,將會在用戶端進程被標識為死亡之前被停止.SQL進程會允許結束當前的語句然後退出.如果SQL進程此時進行中交易處理,事務將會滾回.
5 儲存引擎結束或是關閉
在這一步,資料表緩衝將會被重新整理,而所有開啟的表都會被關閉.
每一個儲存引擎都會為他所管理的資料表進行必要的操作.例如,MyISAM會重新整理一個表的索引.
6 伺服器結束.
(