修改了mysql的數(shù)據(jù)文件目錄為/home/mysql,安裝時默認的數(shù)據(jù)文件目錄為/var/lib/mysql,配置文件為/etc/my.cnf,更改/etc/init.d/mysql文件中的datadir=/home/mysql 。 我們要知道/etc/my.cnf配置文件中包含對mysql服務端和客戶端的配置。 然后進行如下操作
修改了mysql的數(shù)據(jù)文件目錄為/home/mysql,安裝時默認的數(shù)據(jù)文件目錄為/var/lib/mysql,配置文件為/etc/my.cnf,更改/etc/init.d/mysql文件中的datadir=/home/mysql 。
我們要知道/etc/my.cnf配置文件中包含對mysql服務端和客戶端的配置。
然后進行如下操作,改名my.cnf為my.cnf-bak,更改/etc/init.d/mysql文件中的datadir為默認路徑datadir=,然后啟動mysql服務端/usr/bin/mysqld_safe --defaults-extra-file=/etc/my.cnf-bak,成功啟動mysql服務端,查看mysqld、mysql進程信息ps -ef| grep -i mysql*,顯示mysql的datadir為/home/mysql,sock為/home/mysql/mysql.sock,其他信息也顯示正常,然后嘗試登錄mysql數(shù)據(jù)庫,這時報錯提示說/var/lib/mysql/mysql.sock不存在。為什么呢?是因為my.cnf配置文件不存在,mysql客戶端沒有找到配置文件,就會去讀取安裝mysql時rpm包編譯時指定的默認路徑,而/var/lib/mysql/mysql.sock不存在,所以報錯。就是說這時mysql客戶端從默認參數(shù)中讀取的信息
與修改后的datadir=/home/mysql的信息不一致,所以無法登錄mysql服務器
1)/etc/init.d/mysql里面的datadir=/home/mysql,在mysql啟動文件里面設置了數(shù)據(jù)文件目錄
2)查看/etc/、basedir、datadir、~./my.cnf下面是否存在my.cnf配置文件
3)更改/etc/my.cnf為/etc/my.cnf-bak,mysql啟動時會讀取編譯時設置的默認參數(shù)
4)此時可以正常啟動mysql服務,因為在/etc/init.d/mysql中顯示指定了數(shù)據(jù)文件的目錄(似乎與第三條有點矛盾?其實3指的默認參數(shù)就是這里)
# service mysql start
# mysqladmin -uroot -p variables |grep -i basedir
# mysqladmin -uroot -p variables |grep -i datadir
5)現(xiàn)在修改/etc/init.d/mysql文件中的datadir,注釋掉顯示指定的datadir=/home/mysql
6)嘗試關閉mysql數(shù)據(jù)庫
#service mysql stop
#MySQL server PID file could not be found! [FAILED]
這是因為修改了mysql的datadir=/home/mysql,這時mysql會根據(jù)mysql的rpm包里面編譯的默認路徑/var/lib/mysql文件夾來讀取PID文件,而/var/lib/mysql下面沒有PID文件,所以提示。
7)此時可以通過mysqladmin -uroot -p shutdown 來正常關閉mysql進程。
8)因為/etc/my.cnf、basedir、datadir、~/.my.cnf都不存在,無法啟動mysql。
可以通過/usr/bin/mysqld_safe --help查看mysqld_safe的參數(shù),然后使用
# /usr/bin/mysqld_safe --defaults-extra-file=/etc/my.cnf-bak
指定mysql啟動腳本,并啟動mysqld進程。 這時mysqld_safe進程會占用終端(在當前終端,無法進行其他操作),使用Ctrl+Z停止mysqld進程(睡眠進程),再使用bg(fg將后臺作業(yè)放到前臺)把mysqld_safe進程設置為后臺進程(會從睡眠狀態(tài)恢復為運行狀態(tài),使用)。
###########
9)嘗試連接mysql數(shù)據(jù)庫,查看mysql的信息
# mysqladmin -uroot -p variables | grep -i datadir
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socke'/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!
提示無法通過/var/lib/mysql/mysql.sock連接mysql服務器
嘗試連接mysql數(shù)據(jù)庫,
#mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
###########
查看mysql進程信息:
[root@localhost ~]# ps -ef|grep -i mysql*
root 18835 5614 0 04:10 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-extra-file=/etc/my.cnf-bak
mysql 19133 18835 0 04:10 pts/1 00:00:00 /usr/sbin/mysqld --defaults-extra-file=/etc/my.cnf-bak --basedir=/usr --datadir=/home/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/home/mysql/localhost.localdomain.err --pid-file=/home/mysql/localhost.localdomain.pid
--socket=/home/mysql/mysql.sock --port=3306
這時會發(fā)現(xiàn),mysql的進程信息顯示的socket路徑為修改過的my.cnf-bak中指定的路徑/home/mysql/mysql.sock,而連接mysql數(shù)據(jù)庫時,卻說無法通過默認的socket路徑連接/var/lib/mysql/mysql.sock連接。
############
這是由于/etc/my.cnf、basedir/my.cnf、datadir/my.cnf、~/.my.cnf文件都不存在,而在啟動mysql服務的時候,使用/usr/bin/mysqld_safe --defaults-extra-file=/etc/my.cnf-bad 指定了啟動時mysql_server讀取的配置文件,這樣mysql服務器進程成功啟動,而在mysql_client客戶端使用mysqladmin客戶端工具、或mysql通過客戶端嘗試登陸mysql服務器 時,mysql客戶端會去尋找my.cnf配置文件(my.cnf中包含了mysql服務端[mysqld]和客戶端[client]的設置),因為沒有找到my.cnf配置文件,無法讀取用戶的設置,mysql客戶端會使用mysql安裝時設置的默認目錄,而默認數(shù)據(jù)文件目錄/var/lib/mysql下沒有mysql.sock,所以會報錯說找不到/var/lib/mysql/mysql.sock。
my.cnf中的配置信息分類:
mysqld_safe / mysqld / mysqld_multi 屬于服務器端配置
mysqldump / mysql / client / mysqladmin之類的屬于客戶端配置
[client]用戶告訴客戶端工具mysql連接數(shù)據(jù)庫服務器使用的port和socket文件的路徑
[mysql]用于設置客戶端工具的顯示信息,如在my.cnf中設置
[mysql]
#prompt="(\\u:hostname:\D)[\\d]> "
這樣使用mysql -uroot -p連接到mysql服務器時,就會顯示:
(root:hostname:Thu Feb 9 16:32:26 2012)[(none)]>
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com