在此示例中,我們將數據移至安裝在的塊存儲設備中/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
。