CentOS下mysql更改數據存放目錄

 
一、首先咱們須要關閉MySQL,命令以下: 

service mysqld stop


二、而後是轉移數據

爲了安全期間,咱們採用複製命令cp,先找到mysql的原目錄 php

cd /var/lib 
ls 

運行這個命令以後就會看到mysql的目錄了,而後執行cp命令 html

cp -a mysql /home/mysql_data/   #這樣就把數據庫複製到/home/mysql_data下面去了 

注意:(-a這個參數必定要帶着,不然複製過去的權限就不對了。) 
若是數據庫比較大的話,時間會比較長,可能會超時,能夠將複製的時候做爲後臺複製,命令以下mysql

cp -a mysql /home/mysql_data/ &

三、而後咱們修改配置文件,一共有三個: 
1.修改第一個文件:

修改以前先備份cp /etc/my.cnf /etc/my.cnfbak 
vi /etc/my.cnf 
打開以後修改datadir的目錄爲/home/mysql_data/mysql 
把socket改爲/home/mysql_data/mysql/mysql.sock #爲了安全起見,你能夠把原來的註釋掉,而後從新加入一行,改爲如今的目錄。 

2.修改第二個文件:

修改以前先備份 cp /etc/init.d/mysqld /etc/init.d/mysqldbak 
vi /etc/init.d/mysqld 

注意:準確的位置是/etc/rc.d/init.d/mysqld,因爲這裏這裏有一個/etc/init.d到/etc/rc.d/init.d的映射, 因此用上面的命令便可,也簡單。 把其中datadir=/var/lib/mysql一行中,等號右邊的路徑改爲你如今的實際存放路徑:/home/mysql_data/mysql linux

3.修改第三個文件:

修改以前先備份 cp /usr/bin/mysqld_safe /usr/bin/mysqld_safebak 
vi /usr/bin/mysqld_safe 

這裏也是修改datadir的目錄爲/home/mysql_data/mysql sql


四、下面須要創建一個mysql.sock的連接: 

ln -s /home/mysql_data/mysql/mysql.sock /var/lib/mysql/mysql.sock 

至此全部的修改都完成了,下面啓動mysql 
service mysqld start 
或者重啓linux 
reboot 
若是能正常啓動,恭喜你修改爲功!shell

 

錯誤分析:

Starting MySQL.. ERROR! The server quit without updating PID file (/var/lib/l/JJonline.pid).

就抓狂了,服務器上的幾個網站還跑着了,mysql啓動不了這不歇菜了。找了找相關這種問題的資料,這裏作下總結。數據庫

1、my.cnf配置文件datadir項配置錯誤或被啓動腳本篡改

這個問題不太說講,主要是mysql自帶的啓動文件(/etc/init.d/mysqld)中會自動檢測mysql的數據存儲目錄,若mysql新裝,還沒有初始化系統表,那麼配置文件中的datadir項寫不寫無所謂,出現這種狀況主要是在更改了mysql的數據存儲目錄,今天我出現的這個問題就在於此。centos

個人mysql安裝後的配置文件中關於datadir項目的配置以下,而該配置文件存儲於/etc/my.cnf,今兒不知動了什麼東西,查來查去都沒找着緣由,後來打開該配置文件才發現,其中的datadir項目被篡改爲/var/mysql/data了.....安全

[mysqld] datadir=/data/mysql socket=/tmp/mysql.sock user=mysql

2、進程裏已經存在mysql進程

這種狀況我不多遇到,若存在mysql進程但有不提供mysql服務(表現爲其餘客戶端鏈接不上mysql服務器,例如php鏈接mysql時提示「鏈接失敗」),這個時候就要看看有沒有存在的mysql殭屍進程了,命令以下:服務器

ps -ef|grep mysql

若存在,該命令執行後會列出存在的殭屍進程,kill -9 `pid`掉便可。

3、mysql的數據存儲目錄權限不足

這種狀況發生於mysql第一次安裝或升級,配置文件中的datatdir目錄的權限要設定好,通常來講運行mysql的用戶以及組就是mysql.mysql,那麼解決權限不足問題的方法以下:

chown -R mysql.mysql /data/mysql ##該命令僅爲示例,其中/data/mysql就是mysql配置文件中datadir的目錄 ##若爲空,則默認爲mysql安裝目錄下的data文件夾下

4、覆蓋安裝或升級mysql後,殘餘數據的影響

這種狀況發生於mysql被覆蓋安裝或升級後,固然mysql無端宕機後也會有這種狀況,可能會影響mysql啓動的數據文件,通常存在於mysql的數據存儲目錄(這個目錄依據my.cnf配置文件中的datadir而異),也就是存在於mysql數據存儲目錄下的mysql-bin.index文件,刪除之便可。

5、selinux的問題,centos下最容易出現

selinux不甚瞭解,直接關掉。

##方法1:永久關閉seliux ##修改 vi /etc/selinux/config #文件中設置SELINUX=disabled ,而後重啓服務器 ##方法2:暫時關閉seliux setenforce 0 ##如需每次開機都鈴聲關閉seliux,則能夠在/etc/rc.d/rc.local文件中添加該命令

6、mysql運行狀態下刪除binary日誌後重啓失敗

這是今天在羣裏的一個朋友出現的,特彙總於此;當mysql開啓了二進制日誌而且mysql在運行狀態下用rm命令刪除過mysql的binary日誌文件的話,下次重啓mysql你就悲劇了。

什麼是binary日誌?說白了就是mysql的數據目錄下的mysql-bin.00000一、mysql-bin.000002的文件,下圖所示。

解決方法就是修改配置文件臨時關閉binary-log,而後刪除mysql數據目錄下的全部相似mysql-bin.00000一、mysql-bin.000002的文件後再次重啓,mysql便可啓動成功。

#mysql配置關閉二進制日誌 找到以下語句 註釋掉便可 #log-bin=mysql-bin #binlog_format=mixed

此步驟操做完畢以後,若還須要啓用二進制日誌,那麼就要先停掉mysql服務,而後修改msyql的配置文件,再次重啓便可。

另外再附上正確刪除mysql二進制日誌文件的方法(絕對不是rm -rf命令直接刪這些文件):

#第一步 經過shell或cmd登陸進mysql 這步沒什麼好說的 msyql -u root -p *** #第二步 在mysql下直接執行清理binary日誌命令 mysql> rese

7、mysql遠程鏈接報錯

問題代碼代碼

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.19' (111) 
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.19' (111)

這個 緣由就是Mysql數據庫的默認配置文件my.cnf(linux下)中的bind-address默認爲127.0.0.1,因此就算你建立了能夠 remote訪問的用戶,你也不能使用mysql -h命令進行訪問,若訪問就會出現上出問題,由於此時Mysql只接受localhost,因此須要把bind-address屏蔽掉。 
my.cnf通常在/etc/mysql下面,若是不在使用locate my.cnf查找,修改前的my.cnf配置文件爲: 
修改前的my.cnf配置文件代碼 
# 
# Instead of skip-networking the default is now to listen only on 
# localhost which is more compatible and is not less secure. 
bind-address = 127.0.0.1 
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
咱們須要作的就是屏蔽這個bind-address代碼,屏蔽後代碼爲: 
屏蔽後my.cnf配置文件代碼 
# 
# Instead of skip-networking the default is now to listen only on 
# localhost which is more compatible and is not less secure. 
#bind-address = 127.0.0.1 
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
如今你就能夠用mysql -h命令進行你想作的操做了,如登陸系統: 
登錄數據庫代碼 

若是沒法解決,那多是防火強的問題:

解決辦法:關閉防火牆,linux下命令

service iptables stop

若是任然沒法解決,檢查是否將帳戶設置爲可從任何主機上訪問mysql數據庫

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
若是你想容許用戶zz從ip爲192.168.1.3的主機鏈接到mysql服務器,並使用123456做爲密碼
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY '123456' WITH GRANT OPTION;

重啓生效:

service mysql restart
相關文章
相關標籤/搜索