一以非特權用戶運行MySQL服務器 在討論如何啟動MySQL服務器之前
讓我們考慮一下應該以什麼用戶身份運行MySQL服務器
服務器可以手動或自動啟動
如果你手動啟動它
服務器以你登錄Unix(Linux)的用戶身份啟動
即如果你用paul登錄Unix並啟動服務器
它用paul運行
如果你用su命令切換到root
然後運啟動服務器
則它以root運行
然而
大多數情況下你可能不想手動啟動服務器
最有可能是你安排MySQL服務器在系統引導時自動啟動
作為標准引導過程的一部分
在Unix下
該引導過程由系統的Unix用戶root執行
並且任何在該過程中運行的進程均以root權限運行
你應該牢記MySQL服務器啟動過程的兩個目標
你想讓服務器以某個非root用戶運行
一般地
你想限制任何運行進程的能力
除非確實需要root權限
而MySQL不需要
你想讓服務器始終以同一個用戶運行
此時用一個用戶而其他時候以另一個不同的用戶運行服務器是很不方便的
這造成了為文件和目錄以具有不同屬主的數據目錄下被創建
並可能導致服務器不能訪問數據庫或表
這看你以哪個用戶運行
統一用同一個用戶運行服務器是你避免這個問題
要一個普通的非特權用戶運行服務器按照下列步驟 選擇一個用於運行服務器的用戶
mysqld可以用任何用戶運行
但在概念上較清晰的是為MySQL操作創建一個單獨的用戶
你也可以特別為MySQL選擇一個用戶組
本文使用mysqladm和mysqlgrp分別作為用戶名和用戶組名
如果你已在自己的賬號下安裝好了MySQL且沒有系統上的特殊管理權限
你將可能在你自己的用戶ID下運行服務器
在這種情況下
用你自己的登錄名和用戶組代替mysqladm和mysqlgrp
如果你在RedHat Linux上用rpm文件安裝MySQL
該安裝將自動創建一個名為mysql的賬號
用該賬號代替mysqladm
如果必要
用系統通常的創建用戶的過程創建服務器賬號
你需要用root做它
如果服務器在運行
停止它
修改數據目錄和任何子目錄和文件的屬主
這樣使得mysqladm用戶擁有它們
例如
如果數據目錄是/usr/local/var
你可以如下設置mysqladm的屬主(你需要以root運行這些命令)
#cd /usr/local/var
#chown
R mysqladm
mysqlgrp
修改數據目錄和任何子目錄和文件的權限
使得它們只能由mysqladm用戶訪問
如果數據目錄是/usr/local/var
你可以設置由mysqladm擁有的任何東西
# cd /usr/local/var
# chmod
R go
rwx
當你設置數據目錄及其內容的屬主和模式時
注意符號連接
你需要順著它們並改變它們指向的文件或目錄的屬主和模式
如果連接文件的目錄位於不屬於你的地方
會有些麻煩
你可能需要root身份
在你完成了上述過程後
你應該確保總是在以mysqladm或root登錄時啟動服務器
在後者
確定指定
user=mysqladm選項
使服務器能將其用戶ID切換到mysqladm(同時也適用於系統啟動過程)
user選項在MySQL
中引入
如果你有老版本
你可以使用su命令告訴系統在以root運行時在特定的用戶下運行服務器
二啟動服務器的方法 在我們確定了用於運行服務器的賬號後
你可以選擇如何安排啟動服務器
你可以從命令行手動或在系統引導過程中自動地運行它
對於啟動服務器由三種主要方法
直接調用mysqld
這可能是最不常用的方法
建議不要多使用
因此本文不詳細介紹
調用safe_mysqld腳本
safe_mysqld試圖確定服務器程序和數據目錄的位置
然後用反映這些值的選項調用服務器
safe_mysqld將標准出錯設備從服務器重定位到數據目錄下的一個出錯文件
使得有它的一條記錄
在啟動服務器後
safe_mysqld也監視它並且如果它死掉則重啟它
safe_mysqld常用於BSD風格的Unix系統
如果你以root或在系統引導期間啟動sqfe_mysqld
出錯日志由root擁有
這可能在你以後試圖用一個非特權用戶調用safe_mysqld時將導致
permission denied
(權限拒絕)錯誤
刪除出錯日志再試一下
調用mysql
server腳本
這個腳本通過有意用於System V的啟動和停止系統上的safe_mysqld
mysql
server來啟動服務器
該系統包含幾個包含在機器進入或退出一個給定運行級別時被點用的腳本目錄
它可以用一個start或stop參數點用以表明你是想啟動還是想停止服務器
safe_mysqld腳本安裝在MySQL安裝目錄的bin目錄下
或可在MySQL源代碼分發的scripts目錄下找到
mysql
server腳本安裝在MySQL安裝目錄下的share/mysqld目錄下或可以在MySQL源代碼分發的support_files目錄下找到
如果你想使用它們
你需要將它們拷貝到適當的目錄下
對BSD風格的系統(FreeBSD
OpenBSD等)
通常在/etc目錄下有幾個文件在引導時初始化服務
這些文件通常有以
rc
開頭的名字
且它有可能由一個名為
rc
local
的文件(或類似的東西)
特意用於啟動本地安裝的服務
在這樣的系統上
你可能將類似於下列的行加入rc
local文件中以啟動服務器(如果safe_mysqld的目錄在你的系統上不同
修改它即可)
if [
x /usr/local/bin/safe_mysqld ]; then
/usr/local/bin/safe_mysqld &
fi
對於對於System V風格的系統
你可以通過將mysql
server放在/etc下適當的啟動目錄下來安裝它
如果你運行Linux並從一個RPM文件安裝MySQL
這些已經為你做好了
否則將腳本安裝在主啟動目錄下
並將指向它的連接放在適當的運行級別目錄下
你也可以使腳本只能由root啟動
啟動文件的目錄布局各系統不同
所以你需要檢查一下看看你的系統如何組織它們
例如在Linux PPC上
目錄是/etc/rc
d和/etc/rc
d/rc
d
這樣你可以這樣安裝腳本
#cp mysql
server /etc/rc
d/init
d
#cd /etc/init
d
#chmod
mysql
server
#cd /etc/rc
d/rc
d
#ln
s
/init
d/mysql
server S
mysql
在solaris上
主腳本目錄是/etc/init
d
並且運行級別目錄是/etc/rd
d
所以命令看上去像這樣
#cp mysql
server /etc/rc
d/init
d
#cd /etc/init
d
#chmod
mysql
server
#cd /etc/rc
d
#ln
s
/init
d/mysql
server S
mysql
在系統啟動時
S
mysql腳本將自動用一個start參數調用
如果你有chkconfig命令(Linux上有)
你可以由它幫助安裝mysql
server腳本而不是象上面那樣手工運行上述命令
指定啟動選項
如果你想在服務器啟動時指定額外的啟動選項
你可有兩種方法
你可以修改你使用的啟動腳本(safe_mysqld或mysql
server)並直接在調用服務器的行上指定選項
或在一個選項文件中指定選項
建議你如果可能在一個全局選項文件中指定選項
它通常位於/etc/f(Unix)或c:\f(Windows)
某些種類的信息無法以服務器選項指定
對於這些你可能需要修改safe_mysqld
例如
如果你的服務器不能正確選擇本地時區而以GMT返回時間值
你可以設置TZ環境變量給它一個指示
如果你用safe_mysqld或mysql
server啟動服務器
你可以將一個時區設置加到safe_mysqld
找到啟動服務器的行並在該行前加入下列命令
TZ=US/Central
export TZ
上面命令的語法是Solaris的
對於其他系統語法可能不同
請查閱相關手冊
如果你確實修改了你的啟動腳本
要記住下次你安裝MySQL時(如升級到新版本)
你的修改將失去
除非你首先在別處復制了啟動腳本
在安裝了新版本後
比較新舊版本的腳本
看看你需要重建什麼改變
在啟動時檢查你的表
除了安排你的服務器在系統引導時啟動
你可能要安裝myisamchk和isamchk腳本
以在服務器啟動前檢查你的表
你可能在一個崩潰後重啟
有可能表已經損害
在啟動前檢查它是一個發現問題的好方法
三停止服務器 要手工啟動服務器
使用mysqladmin
%mysqladmin shutdown
要自動停止服務器
你不需做特別的事情
BSD系統一般通過向進程發一個TERM信號停止服務
它們或者正確應答它或被粗魯地殺死
mysqld在它收到這個信號時以終止作為應答
對於用mysql
server啟動服務器的System V風格的系統
停止進程將用一個stop參數調用該腳本
告訴服務器終止
當然假定你已安裝了mysql
server
四如果你不能連接服務器如何重新獲得對服務器的控制 在某些情況下
你可能由於不能連接它而手工重啟服務器
當然
這有點矛盾
因為一般你通過連接服務器而手工關掉它
那麼這種情況如何會出現
首先
MySQL root口令可以已經設置為你不知道的值
這可能發生在你修改口令時
例如
如果你在輸入新口令時偶然鍵入一個不可見的控制字符
你也可能忘記口令
其次
連接localhost通常通過一個Unix域套接字文件進行
一般是/tmp/mysql
sock
如果套接字文件被刪除了
本地客戶就不能連接
這可能發生在你的系統運行一個cron任務刪除了/tmp下的臨時文件
如果你因為丟失套接字文件而不能連接
你可以簡單地通過重啟服務器重新創建得到它
因為服務器在啟動時重新創建它
這裡的騙局是你不能用套接字建立連接因為它不見了
你必須建立一個TCP/IP連接
例如
如果服務器主機是
你可以這樣連接
%mysqladmin
p
u root
h shutdown
如果套接字文件被一個cron任務刪除
問題將重復出現
除非你修改cron任務或使用一個或使用一個不同的套接字文件
你可以使用全局選項文件
From:http://tw.wingwit.com/Article/program/MySQL/201311/29507.html