Categories
Linux

如何在CentOS 7上將MySQL數據目錄更改為新位置

在此示例中,我們將數據移至安裝在的塊存儲設備中/mnt/volume-nyc1-01

無論您使用什麼基礎存儲,本指南都可以幫助您將數據目錄移動到新位置。

第1步-移動MySQL數據目錄

為了準備移動MySQL的數據目錄,讓我們通過使用管理憑據啟動交互式MySQL會話來驗證當前位置。

$ mysql -u root -p

 

出現提示時,提供MySQL root密碼。然後在MySQL提示符下,選擇數據目錄:

mysql> select @@datadir;

 

Output+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

此輸出確認MySQL已配置為使用默認數據目錄,/var/lib/mysql/,因此這是我們需要移動的目錄。確認後,鍵入exit並按“ ENTER”離開監視器:

mysql> exit

 

為了確保數據的完整性,我們將在實際更改數據目錄之前關閉MySQL:

$ sudo systemctl stop mysqld

 

systemctl 不會顯示所有服務管理命令的結果,因此,如果要確保成功,請使用以下命令:

$ sudo systemctl status mysqld

 

如果輸出的最後一行告訴您服務器已停止,則可以確定它已關閉:

Output. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.

現在,服務器已關閉,我們將使用將現有數據庫目錄複製到新位置rsync。使用該-a標誌將保留權限和其他目錄屬性,同時-v提供詳細的輸出,以便您可以跟踪進度。

注意:請確保目錄上沒有斜杠,如果使用製表符補全,可以添加斜杠。當出現斜杠時,rsync會將目錄的內容轉儲到安裝點,而不是將其傳輸到包含mysql目錄:

$ sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01

 

一旦rsync完成,用.bak擴展名重命名當前文件夾中保存,直到我們已經證實,此舉是成功的。通過重命名,我們可以避免新舊位置文件引起的混淆:

$ sudo mv /var/lib/mysql /var/lib/mysql.bak

 

現在,我們準備將注意力轉向配置。

第2步-指向新數據位置

MySQL有幾種方法可以覆蓋配置值。默認情況下,在文件中datadir設置為。編輯此文件以反映新的數據目錄:/var/lib/mysql/etc/my.cnf

$ sudo vi /etc/my.cnf

 

在以[mysqld]開頭的代碼塊中找到該行,該代碼行datadir=與帶有幾個註釋的代碼塊標題分開。更改遵循的路徑以反映新位置。另外,由於套接字以前位於數據目錄中,因此我們需要將其更新到新位置:/etc/my.cnf

[mysqld]
. . .
datadir=/mnt/volume-nyc1-01/mysql
socket=/mnt/volume-nyc1-01/mysql/mysql.sock
. . .

 

更新現有的行後,我們需要為mysql客戶端添加配置。在文件的底部插入以下設置,這樣就不會在[mysqld]塊中拆分指令:/etc/my.cnf

[client]
port=3306
socket=/mnt/volume-nyc1-01/mysql/mysql.sock

 

完成後,點擊ESCAPE,然後輸入:wq!以保存並退出文件。

第3步-重新啟動MySQL

現在,我們已經更新了配置以使用新位置,現在可以啟動MySQL並驗證我們的工作了。

$ sudo systemctl start mysqld
$ sudo systemctl status mysqld

 

為了確保確實使用了新的數據目錄,請啟動MySQL監視器。

$ mysql -u root -p

 

再次查看數據目錄的值:

mysql> select @@datadir;

 

Output+----------------------------+
| @@datadir                  |
+----------------------------+
| /mnt/volume-nyc1-01/mysql/ |
+----------------------------+
1 row in set (0.01 sec)

現在,您已經重新啟動了MySQL並確認它正在使用新位置,請藉此機會確保您的數據庫可以正常運行。確認所有現有數據的完整性後,您可以使用刪除備份數據目錄sudo rm -Rf /var/lib/mysql.bak