MySQL 是一個廣泛使用的開源關係數據庫管理系統(RDBMS),為無數的 web 應用程序和服務提供支持。默認情況下,MySQL 將其數據存儲在預定義的目錄中,這可能並不總是適合您的需求。您可能希望將數據目錄移動到另一個位置以獲得更好的性能和安全性,或者利用單獨的磁盤或分區。
在本指南中,我們將引導您完成在 Linux 系統上更改默認 MySQL 數據目錄的過程,確保以最小的停機時間順利過渡。
Step 1: 準備新的數據目錄
第一步是創建一個新目錄,用於存儲 MySQL 數據,確保新位置有足夠的存儲空間以滿足當前和未來的數據要求,用您所需的路徑替換 /new/mysql/data 路徑。
sudo mkdir -p /new/mysql/data
接下來,設置新目錄的所有權和權限,以匹配默認 MySQL 數據目錄的所有權和權限。
sudo chown -R mysql:mysql /new/mysql/data
sudo chmod 750 /new/mysql/data
Step 2: 停止 MySQL 服務
在更改 MySQL 配置之前,必須先停止 MySQL 服務,以避免數據損壞或丟失。
sudo systemctl stop mysqld
Step 3: 將現有數據複製到新目錄
MySQL 服務停止後,可以安全地將現有數據複製到新目錄中。需要保留文件的權限和所有權。
sudo rsync -av /var/lib/mysql/* /new/mysql/data
如果原有數據目錄有所不同,則將 /var/lib/mysql 替換為當前的 MySQL 數據目錄路徑。
Step 4: 更新 MySQL 配置
要通知 MySQL 新數據目錄,您必須更新配置文件,打開 MySQL 配置文件。
sudo nano /etc/my.cnf
更新 datadir 和 socket 選項以指向新目錄
[mysqld]
datadir=/new/mysql/data
socket=/new/mysql/data/mysql.sock
如果這些選項不存在,將它們添加到 [mysqld] 部分,保存並關閉配置文件。
Step 5: 更新 systemd 配置 (可選)
如果您的系統使用 systemd 來管理 MySQL 服務,則可能需要更新 systemd 配置以反映新數據目錄。打開
MySQL systemd 服務文件,通常位於 /usr/lib/systemd/system/mysqld.service 或
/lib/systemd/system/mysql.service
sudo nano /usr/lib/systemd/system/mysqld.service
找到 ExecStart 行並添加 --datadir 和 --socket 選項
ExecStart=/usr/sbin/mysqld --datadir=/new/mysql/data --socket=/new/mysql/data/mysql.sock
保存並關閉該文件,重新加載 systemd 配置。
sudo systemctl daemon-reload
Step 6: 更新 MySQL 客户端配置
為了確保 MySQL 客户端可以使用新的 socket 文件,需要更新客户端配置。
sudo nano /etc/my.cnf
找到 [client] 部分並更 socket 選項以指向新目錄
[client]
socket=/new/mysql/data/mysql.sock
如果 socket 選項不存在,將其添加到 [client] 部分。保存並關閉配置文件。
Step 7: 重啓 MySQL 服務
重啓 MySQL 服務,使更改生效。
sudo systemctl start mysqld
Step 8: 驗證更改
查看 mysql 服務狀態
sudo systemctl status mysqld
此外,您可以使用客户端連接到 MySQL 服務器,並驗證是否正在使用新的數據目錄
mysql -u root -p -e 'SHOW VARIABLES WHERE Variable_Name = "datadir";'
Step 9: 刪除或備份舊數據目錄 (可選)
一旦確認 MySQL 正在使用新的數據目錄並且一切正常,可以執行以下操作:
刪除舊數據目錄
sudo rm -rf /var/lib/mysql
或者,創建數據備份
sudo mv /var/lib/mysql /var/lib/mysql_backup