《Mysql應(yīng)用MySQL服務(wù)器的啟動(dòng)和關(guān)閉》要點(diǎn):
本文介紹了Mysql應(yīng)用MySQL服務(wù)器的啟動(dòng)和關(guān)閉,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
????本章的說(shuō)明只用于UNIX?系統(tǒng).如果正在運(yùn)行Windows?系統(tǒng),可以跳過(guò)本章,因?yàn)楦戒汚“獲得和安裝軟件”一節(jié)中包含了所有需要的啟動(dòng)和關(guān)閉命令.?
????調(diào)用本章給出的命令?
????為了簡(jiǎn)潔,在大多數(shù)情況中,諸如mysqla?d?m?i?n、mysqldump?等程序在本章中沒(méi)有給出任何-?h、-?u或-?p選項(xiàng).筆者假定您將會(huì)用連接服務(wù)器所需的任何選項(xiàng)調(diào)用這些程序.?
用無(wú)特權(quán)的用戶(hù)賬號(hào)運(yùn)行MySQL服務(wù)器?
????在討論如何啟動(dòng)服務(wù)器之前,考慮一下在服務(wù)器啟動(dòng)時(shí)應(yīng)該運(yùn)行哪個(gè)賬號(hào).服務(wù)器可以手工和自動(dòng)啟動(dòng).如果手工啟動(dòng),則服務(wù)器以UNIX?用戶(hù)身份運(yùn)行(您恰好作為該用戶(hù)進(jìn)行了注冊(cè)).即,如果筆者以paul?進(jìn)行注冊(cè)并啟動(dòng)服務(wù)器,則它將以paul?身份運(yùn)行.如果用s?u命令將用戶(hù)切換到root?然后啟動(dòng)服務(wù)器,則服務(wù)器以root?身份運(yùn)行.?
????但是,大多數(shù)時(shí)候可能都不會(huì)采用手工啟動(dòng)服務(wù)器.您很可能將安排服務(wù)器在系統(tǒng)引導(dǎo)時(shí)作為標(biāo)準(zhǔn)啟動(dòng)過(guò)程的一部分自動(dòng)地運(yùn)行.在UNIX中,該啟動(dòng)過(guò)程由系統(tǒng)以UNIX?的r?o?o?t用戶(hù)的身份執(zhí)行,該過(guò)程中啟動(dòng)的任何進(jìn)程都用root?的權(quán)限運(yùn)行.?
????應(yīng)該緊記MySQL服務(wù)器啟動(dòng)過(guò)程的兩個(gè)目標(biāo):?
????要服務(wù)器以某些非root?的用戶(hù)身份啟動(dòng).通常,除非進(jìn)程真的需要root?訪問(wèn)權(quán)而mysql辦不到,否則應(yīng)限制任何進(jìn)程的能力.?
????要服務(wù)器始終以同一個(gè)用戶(hù)的身份運(yùn)行.服務(wù)器有時(shí)作為一個(gè)用戶(hù)運(yùn)行而有時(shí)又作為另一個(gè)用戶(hù)運(yùn)行時(shí)會(huì)產(chǎn)生矛盾.這將導(dǎo)致文件和目錄以不同的所有權(quán)在該數(shù)據(jù)下被創(chuàng)建,甚至引起服務(wù)器不能訪問(wèn)數(shù)據(jù)庫(kù)或表.以同一個(gè)用戶(hù)的身份一致地運(yùn)行服務(wù)器可以避免該問(wèn)題.?
????為了以標(biāo)準(zhǔn)的、非特權(quán)的用戶(hù)身份運(yùn)行數(shù)據(jù)庫(kù),可按如下步驟執(zhí)行該過(guò)程:?
????1)?選擇用于運(yùn)行服務(wù)器的賬號(hào).mysqld?可以以任何用戶(hù)身份運(yùn)行,但是很明顯,它只為MySQL活動(dòng)創(chuàng)建了一個(gè)單獨(dú)的賬號(hào).您也可以為MySQL專(zhuān)門(mén)指定一個(gè)組.筆者將調(diào)用的這些用戶(hù)和組的名字命名為mysqladm?和mysqlg?r?p.如果您使用了其他的名字,則在本書(shū)中有mysqladm?和mysqlgrp?的地方替換它們?
????如果您在自己的賬號(hào)下安裝了MySQL并且系統(tǒng)中沒(méi)有特定的管理權(quán)限,則您可以在自己的ID?用戶(hù)下運(yùn)行服務(wù)器.在這種情況下,應(yīng)使用您自己的注冊(cè)名和組名替代mysqladm?和mysqlgrp?.?
????如果您利用RPM?文件在RedHat?Linux?下安裝了MySQL,則該安裝程序?qū)⒃趍ysql名下自動(dòng)創(chuàng)建了一個(gè)賬號(hào).應(yīng)使用該名字替換mysqladm?.?
????2)?如果必要的話,可用系統(tǒng)常用的賬號(hào)創(chuàng)建過(guò)程(?a?c?count?-?c?r?e?a?t?i?o?n)來(lái)創(chuàng)建服務(wù)器賬號(hào).這需要以root?身份進(jìn)行操作.?
????3)?關(guān)閉服務(wù)器(如果它在運(yùn)行).?
????4)?修改數(shù)據(jù)目錄以及任何子目錄和文件的所有權(quán),使mysqladm?用戶(hù)擁有它們.例如,如果數(shù)據(jù)目錄是/?us?r?/?l?o?c?a?l?/?v?a?r,則可按以下設(shè)置mysqladm?用戶(hù)的所有權(quán):?
????#?cd?/usr/local/var?移動(dòng)到數(shù)據(jù)目錄?
????#?chown?-r?mysqladmin.mysqlgrp?設(shè)置所有目錄和文件的所有權(quán)?
????5)?修改數(shù)據(jù)目錄以及任何子目錄和文件的許可權(quán),使得只有mysqladm?用戶(hù)能夠訪問(wèn)它們.設(shè)置該方式以避免其他人員訪問(wèn)是一種好得安全預(yù)防措施.如果數(shù)據(jù)目錄是/?us?r?/?l?o?c?a?l?/?v?a?r,則可通過(guò)mysqladm?用戶(hù)按下列操作設(shè)置應(yīng)具有的一切(您需要以root?身份運(yùn)行這些命令):?
????#?cd?/usr/local/var?移動(dòng)到數(shù)據(jù)目錄?
????#?chmod?-R?go?-rwx?使所有一切只對(duì)mysqladm?可訪問(wèn)?
????在設(shè)置數(shù)據(jù)目錄及其內(nèi)容的所有權(quán)和方式時(shí),觀察符號(hào)連接.您需要跟蹤符號(hào)連接并修改所指向的文件或目錄的所有權(quán)和方式.如果這些連接文件所定位的目錄不屬于您,則這樣做可能會(huì)引起麻煩,因此您必須是root?用戶(hù).?
????在完成前述過(guò)程后,應(yīng)確保無(wú)論是作為mysqladm?還是作為root?用戶(hù)注冊(cè)都始終啟動(dòng)服務(wù)器.在后者中,要確保指定了--user?=?mysqladm?的選項(xiàng),使服務(wù)器可以將其用戶(hù)ID?切換到mysqla?d?m(該選項(xiàng)在系統(tǒng)啟動(dòng)過(guò)程中也可使用).?
????--user?選項(xiàng)被增加到MySQL3.22?的mysql中.如果您的版本比MySQL3.22?舊,則在啟動(dòng)服務(wù)器并作為root?用戶(hù)運(yùn)行時(shí),可以使用su命令指示系統(tǒng)在指定賬號(hào)下運(yùn)行服務(wù)器.您需要閱讀有關(guān)su的人工頁(yè),因?yàn)樽鳛橐粋€(gè)指定用戶(hù)運(yùn)行命令的語(yǔ)法被改變了.?
啟動(dòng)服務(wù)器的方法?
????如果您已經(jīng)確定了用來(lái)運(yùn)行服務(wù)器的賬號(hào),則可以選擇安排怎樣啟動(dòng)服務(wù)器.可以從命令行手工運(yùn)行,或在系統(tǒng)啟動(dòng)過(guò)程中自動(dòng)運(yùn)行服務(wù)器.有三種啟動(dòng)服務(wù)器的主要方法:?
????直接調(diào)用mysqld.這或許是最小的命令方法.除了說(shuō)明mysqld?--help?是一個(gè)有用的命令(用它可以查找您可利用其他啟動(dòng)方法使用的選項(xiàng))外,筆者不打算進(jìn)一步討論它.?
????調(diào)用safe_mysqld?腳本.safe_mysqld?試圖確定服務(wù)器程序和數(shù)據(jù)目錄的位置,然后利用反映這些位置的選項(xiàng)調(diào)用服務(wù)器.safe_mysqld?將服務(wù)器的標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到數(shù)據(jù)目錄的錯(cuò)誤文件中,并以記錄的形式出現(xiàn).在啟動(dòng)服務(wù)器后,?safe_mysqld?還監(jiān)控?
服務(wù)器,并在其死機(jī)時(shí)重新啟動(dòng).safe_mysqld?通常用于UNIX?的BSD?風(fēng)格的版本.?
????如果您曾經(jīng)作為root?或在系統(tǒng)啟動(dòng)程序中啟動(dòng)s?a?f?e?_?mysqld,則錯(cuò)誤日志將由r?o?o?t擁有.如果您試著以非特權(quán)的用戶(hù)身份調(diào)用s?a?f?e?_?mysqld,則可能引起“所有權(quán)被拒絕”的錯(cuò)誤.刪除該錯(cuò)誤文件再試一次.
調(diào)用mysql.server?腳本.通過(guò)運(yùn)行s?a?f?e?_?mysqld?.?mysql.?server,該腳本啟動(dòng)服務(wù)器.該腳本建議在使用System?V?啟動(dòng)/關(guān)閉系統(tǒng)的系統(tǒng)中使用.這個(gè)系統(tǒng)包括幾個(gè)包含在機(jī)器登錄或退出一個(gè)特定運(yùn)行級(jí)時(shí)被調(diào)用的腳本的目錄.它可以利用start?或stop?參數(shù)進(jìn)行調(diào)用,以指明希望啟動(dòng)還是關(guān)閉服務(wù)器.?
????safe_mysqld?腳本被安裝在MySQL安裝目錄的bin?目錄下,或者在MySQL源程序分發(fā)包的scripts?目錄中.mysql.server?腳本安裝在MySQL安裝目錄的s?h?a?r?e?/?mysql目錄下,或者在MySQL源程序分發(fā)包的support-files?目錄中.如果要使用它,應(yīng)將其?
拷貝到合適的啟動(dòng)目錄中.?
????對(duì)于BSD?風(fēng)格的系統(tǒng),在/etc?目錄中有幾個(gè)文件相對(duì)應(yīng),它們?cè)谝龑?dǎo)期間開(kāi)始服務(wù).這些文件的名字通常以‘?r?c'開(kāi)始,因此很可能會(huì)有一個(gè)名為rc.local?(或類(lèi)似的名字)的文件來(lái)啟動(dòng)本地的安裝服務(wù).在這樣的系統(tǒng)中,您可能要按如下方法添加一些行到rc.local?文件中以啟動(dòng)服務(wù)器(如果路徑與您系統(tǒng)中的不同,可將其修改成s?a?f?e?_?mysqld):?
????if?(-x?/usr/local/bin/safe_mysqld);then?
????????/usr/local/bin/safe_mysqld?&??
????fi?
????對(duì)于System?V?風(fēng)格的系統(tǒng),可以通過(guò)將其放置在/etc?下的合適的啟動(dòng)目錄中來(lái)安裝mysql.?server.如果您運(yùn)行Linux?并從RPM?文件中安裝了MySQL,那么這此操作可能已經(jīng)完成了.否則,應(yīng)該在主啟動(dòng)腳本目錄中安裝該腳本,并在合適的運(yùn)行級(jí)目錄中設(shè)置對(duì)它的連接.您還可使該腳本僅對(duì)root?用戶(hù)可執(zhí)行.?
????啟動(dòng)文件目錄的布局隨系統(tǒng)而變化,因此將需要全面檢查來(lái)弄清系統(tǒng)是怎樣組織它們的.例如,在LinuxPPC?中,這些目錄為/etc/rc.d/init.d?和/?e?t?c?/?r?c?.?d?/?r?c?3?.?d.應(yīng)該按如下方法安裝該腳本:?
????#?cp?mysql.server?/etc/rc.d/init.d?
????#?cd?/etc/init.d?
????#?chmod?500?mysql.server?
????#?cd?/etc/rc.d/rc3.d?
????#?In?-s?../init.d/mysql.server?S99mysql????在Solaris?中,主腳本目錄為/?e?t?c?/?i?n?i?t?.?d,運(yùn)行級(jí)目錄為/?e?t?c?/?r?c?2?.?d,因此上述命令將替換為:?
????#cp?mysql.server?/etc/init.d?
????#?cd?/etc/init.d?
????#?chmod?500?mysql.server?
????#?cd?/etc/rc2.d?
????#?In?-s?../init.d/mysql.server?s99mysql????在系統(tǒng)啟動(dòng)期間,S99mysql腳本利用start?參數(shù)自動(dòng)調(diào)用.?
????如果您擁有chkconfig?命令(它在Linux?中很常用),則可用其幫助安裝mysql.server?腳本來(lái)代替手工運(yùn)行上述的命令.?
????1.?指定啟動(dòng)選項(xiàng)?
????在啟動(dòng)服務(wù)器時(shí),如果想要指定附加的啟動(dòng)選項(xiàng),可用兩種方法進(jìn)行操作.您可以修改所使用的啟動(dòng)腳本(?safe_mysqld?或mysql.?server),并在調(diào)用服務(wù)器的命令行中直接指定這些選項(xiàng).您還可以在選項(xiàng)文件中指定選項(xiàng).筆者建議,如果可能的話,應(yīng)在全局選項(xiàng)文件中指定服務(wù)器選項(xiàng).通常該文件的位置是UNIX?中的/?e?t?c?/?my.cnf?和Windows?中的c:my.cnf(有關(guān)使用選項(xiàng)文件的細(xì)節(jié),請(qǐng)參閱附錄E).?
????某些種類(lèi)的信息不能作為服務(wù)器的選項(xiàng)指定.為了這些選項(xiàng),您可能需要修改s?a?f?e?_?mysqld.例如,如果服務(wù)器不能正確地拾取GMT?中的本地時(shí)區(qū)(local?time?zone)和返回時(shí)間值,可以設(shè)置TZ?環(huán)境變量以給該變量一個(gè)提示.如果用safe_mysqld?或mysql.?ser?ver啟動(dòng)服務(wù)器,可以將時(shí)區(qū)設(shè)置增加到safe_mysqld?中.找到啟動(dòng)服務(wù)器的命令行,并在該行之前增加下列命令:?
????TZ=US/Central?
????export?TZ?
????這個(gè)命令將TZ?設(shè)置為US?Central?時(shí)區(qū).您需要使用合適位置的時(shí)區(qū).該語(yǔ)法是S?o?l?a?r?i?s?的,您的系統(tǒng)可能會(huì)有所不同.例如,設(shè)置TZ?變量的另一個(gè)常用語(yǔ)法為:?
????TZ=CST6CDT?
????export?TZ?
????如果修改了啟動(dòng)腳本,當(dāng)下次安裝MySQL時(shí)(如,升級(jí)到更新的版本),將失去這些修改,除非在之前將該啟動(dòng)腳本拷貝到了其他地方.在安裝新的版本之后,將您的腳本與新安裝的腳本進(jìn)行比較,以便看看重新建立還需要做什么改動(dòng).?
????2.?在啟動(dòng)期間檢查表?
????除了在系統(tǒng)引導(dǎo)時(shí)安排服務(wù)器的啟動(dòng)外,您還可以安裝一個(gè)腳本來(lái)運(yùn)行mysamchk?和i?s?a?m?c?h?k,以便在服務(wù)器啟動(dòng)前對(duì)表進(jìn)行檢查.您可能打算在服務(wù)器崩潰后重新啟動(dòng),但表可能已經(jīng)毀壞了.在服務(wù)器啟動(dòng)前檢查這些表是發(fā)現(xiàn)問(wèn)題的好辦法.第13?章包含了有關(guān)編寫(xiě)和安裝這種腳本的細(xì)節(jié).?
關(guān)閉服務(wù)器?
????要想手工關(guān)閉服務(wù)器,可使用mysqla?d?m?i?n:?
????%?mysqladmin?shutdown?
????要想自動(dòng)關(guān)閉服務(wù)器,您不需要做特別的操作.BSD?系統(tǒng)通常會(huì)通過(guò)給進(jìn)程發(fā)送一個(gè)TERM?信號(hào)來(lái)關(guān)閉服務(wù).進(jìn)程或者對(duì)其作出反應(yīng),或者被隨便地取消.當(dāng)mysqld?接收到信號(hào)時(shí),它會(huì)通過(guò)終止來(lái)響應(yīng).對(duì)于利用mysql.server?啟動(dòng)服務(wù)器的System?V-風(fēng)格的系統(tǒng),該關(guān)閉進(jìn)程將調(diào)用帶有stop?參數(shù)的腳本來(lái)指示服務(wù)器進(jìn)行關(guān)閉──當(dāng)然,這是在假定您已經(jīng)安裝了mysql.?ser?ver的情況下進(jìn)行的.?
在不連接時(shí)收回服務(wù)器的控制?
????在某些環(huán)境中,由于不能連接到服務(wù)器,您需要用手工重新啟動(dòng)它.當(dāng)然,這有點(diǎn)荒謬,因?yàn)橐话闶峭ㄟ^(guò)連接到服務(wù)器然后告知服務(wù)器終止來(lái)手工關(guān)閉服務(wù)器的.那么這種情況是怎樣出現(xiàn)的??
????首先,MySQL的root?口令可能得到了一個(gè)您不知道的值.這種情況可能是在修改口令時(shí)發(fā)生的─例如,如果在輸入新的口令值時(shí)碰巧鍵入了一個(gè)不可見(jiàn)的控制字符.還有可能就是完全忘記了口令.?
????其次,對(duì)于localhost?的連接通常是通過(guò)UNIX?域的套接字文件進(jìn)行的,它一般為/?t?m?p?/?mysql.?s?o?c?k.如果該套接字文件被刪除了,則本地客戶(hù)機(jī)將不能進(jìn)行連接.如果系統(tǒng)偶爾運(yùn)行了一個(gè)刪除/tmp?中的臨時(shí)文件的cron?作業(yè),這種情況就可能會(huì)發(fā)生.?
????如果因?yàn)槭ヌ捉幼治募荒苓M(jìn)行連接,可以通過(guò)重新啟動(dòng)服務(wù)器簡(jiǎn)單地進(jìn)行恢復(fù),因?yàn)榉?wù)器在啟動(dòng)期間重新建立了該文件.這里應(yīng)知道的是,不能用該套接字建立連接(因?yàn)樗呀?jīng)不存在)而必須建立TCP/IP?連接.例如,如果服務(wù)器的主機(jī)是pit?-?viper.?s?n?a?k?e?.?n?e?t,則可以按如下方法進(jìn)行連接:?
????%?mysqladmin?-p?-uroot?-h?pit-viper.snake.net?shutdown?
????如果此套接字文件被cron?作業(yè)刪除,則問(wèn)題將復(fù)發(fā),直到您修改cron?作業(yè)或使用另一個(gè)套接字文件為止.您可以用全局選項(xiàng)文件指定另一個(gè)套接字文件.例如,如果數(shù)據(jù)目錄為/?us?r?/?l?o?c?a?l?/?v?a?r,則可通過(guò)將以下行添加到/?e?t?c?/?my.cnf?中來(lái)移動(dòng)套接字文件到那里:?
????[mysqld]?
????socket=/usr/local/var/mysql.sock?
????[client]?
????socket=/usr/local/var/mysql.sock?
????路徑名是為服務(wù)器和客戶(hù)機(jī)程序二者所指定的,以便它們能使用相同的套接字文件.如果只對(duì)服務(wù)器設(shè)置路徑名,客戶(hù)機(jī)程序?qū)⑷匀辉谂f的位置上查找套接字文件.在做出這個(gè)修改后應(yīng)重新啟動(dòng)服務(wù)器,使它在新的位置創(chuàng)建套接字文件.?
????如果由于您忘記了root?的口令或?qū)⑵湫薷臑橐粋€(gè)您不知道的值而不能進(jìn)行連接,則需要收回服務(wù)器的控制以便重新設(shè)置口令:?
????關(guān)閉服務(wù)器.如果您以root?用戶(hù)的身份在服務(wù)器主機(jī)上進(jìn)行登錄,可用kill?命令終止服務(wù)器.通過(guò)使用ps?命令或通過(guò)查看服務(wù)器的PID?文件(通常放在數(shù)據(jù)目錄中)能找出服務(wù)器的ID?進(jìn)程.?
????最好先試著用標(biāo)準(zhǔn)的kill?命令取消服務(wù)器,該命令將一個(gè)TERM?信號(hào)發(fā)送到服務(wù)器上,以查看服務(wù)器是否通過(guò)關(guān)閉信號(hào)來(lái)響應(yīng).也就是說(shuō),表和日志將被適當(dāng)?shù)厮⑿?如果服務(wù)器被堵塞并且沒(méi)有響應(yīng)正常的終止信號(hào),可使用kill?-9?強(qiáng)制終止它.這是最后的一個(gè)?
方法,因?yàn)榭赡艽嬖谖此⑿碌母?并且要承擔(dān)非一致?tīng)顟B(tài)下將表保留下來(lái)的風(fēng)險(xiǎn).如果用kill?-9?終止服務(wù)器,應(yīng)確保在重新啟動(dòng)服務(wù)器之前利用myisamchk?和i?s?a?m?c?h?k對(duì)表進(jìn)行檢查(參見(jiàn)第13章)?
????用--skip-grant-tables?選項(xiàng)重新啟動(dòng)服務(wù)器.該操作告訴服務(wù)器不要使用授權(quán)的表檢查連接.這允許您作為root?用戶(hù)不用輸入口令即可進(jìn)行連接.在連接之后,修改r?o?o?t的口令.?
????告訴服務(wù)器再利用mysqladmin?flush-privileges?使用授權(quán)表啟動(dòng).如果您的mysqladmin?版本不識(shí)別f?l?us?h?-?priv?i?l?e?g?e?s,試著進(jìn)行重新加載.
維易PHP培訓(xùn)學(xué)院每天發(fā)布《Mysql應(yīng)用MySQL服務(wù)器的啟動(dòng)和關(guān)閉》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/12632.html