mv /var/lib/mysql /new/path/data;my.cnf、啟動腳本、AppArmor/SELinux 策略中的路徑。mysql> SHOW VARIABLES LIKE '%dir%';
+---------------------------+------------------+
| Variable_name | Value |
+---------------------------+------------------+
| datadir | /var/lib/mysql/ |
| ... | ... |
+---------------------------+------------------+
# 1. 停止服務
systemctl stop mysqld # 或 service mysql stop
# 2. 移動數據目錄(保留權限、屬性)
rsync -av /var/lib/mysql/ /new/path/mysql/
# 或 mv /var/lib/mysql /new/path/mysql
# 3. 修改主配置
vi /etc/my.cnf
[mysqld]
datadir=/new/path/mysql
socket=/new/path/mysql/mysql.sock
# 4. 修改啟動腳本(如使用 systemd 需改 unit 文件)
vi /etc/init.d/mysqld # 或 /usr/lib/systemd/system/mysqld.service
# 將 datadir 路徑同步修改
# 5. AppArmor/SELinux 策略同步
# Ubuntu/Debian:
vi /etc/apparmor.d/usr.sbin.mysqld
# 將 /var/lib/mysql/ 替換為 /new/path/mysql/
apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
# CentOS/RHEL (SELinux):
semanage fcontext -a -t mysqld_db_t "/new/path/mysql(/.*)?"
restorecon -Rv /new/path/mysql
# 6. 啟動驗證
systemctl start mysqld
mysql> SHOW VARIABLES LIKE 'datadir';
my.cnf 忘改啟動腳本/SELinux;ibdata1、ib_logfile* 導致 InnoDB 無法恢復;
#!/bin/bash
# check_datadir.sh
mysql -NBe "SHOW VARIABLES LIKE 'datadir'" | grep -q "$1" && echo "OK: $1" || echo "FAIL"
用法:./check_datadir.sh /new/path/mysql