遷移前核心原則
- 停庫操作:
systemctl stop mysqld,確保數據靜態一致
- 同步工具:
rsync -av 保留權限、屬性、軟鏈、時間戳
- 雙配置一致:
my.cnf 與啟動腳本 datadir/log-bin 雙重生效
- 權限歸屬:目標目錄遞歸
chown -R mysql:mysql
標準遷移流程(Data 目錄)
# 1. 停止服務
systemctl stop mysqld
# 2. 同步數據(排除臨時文件)
rsync -av --exclude='*.pid' --exclude='*.sock' /usr/local/mysql/var/ /home/mysql/mysqldata/
# 3. 修改配置文件
# /etc/my.cnf
[mysqld]
datadir = /home/mysql/mysqldata
# 如使用 InnoDB 獨立表空間,同步修改:
innodb_data_home_dir = /home/mysql/mysqldata/
innodb_log_group_home_dir = /home/mysql/mysqldata/
# 4. 修正權限(關鍵!)
chown -R mysql:mysql /home/mysql/mysqldata/
# 5. 啟動驗證
systemctl start mysqld
mysql -e "SHOW VARIABLES LIKE 'datadir';"
Binlog 目錄獨立遷移
# 1. 停庫(同 Data 遷移可合併)
systemctl stop mysqld
# 2. 同步 Binlog
rsync -av /usr/local/mysql/var/binlog/ /home/mysql/mysqllog/binlog/
# 3. 修改配置
[mysqld]
log-bin = /home/mysql/mysqllog/binlog/mysql-bin
# 4. 權限修正
chown -R mysql:mysql /home/mysql/mysqllog/
# 5. 啟動
systemctl start mysqld
# 6. 驗證
mysql -e "SHOW BINARY LOGS;"
mysql -e "SHOW VARIABLES LIKE 'log_bin%';"
InnoDB 關鍵參數同步修改表
| 參數 | 說明 | 遷移時是否必改 |
| innodb_data_home_dir | 系統表空間目錄 | 是(若非默認) |
| innodb_log_group_home_dir | Redo log 目錄 | 強烈建議 |
| innodb_undo_directory | Undo log 目錄 (8.0+) | 建議 |
| innodb_temp_data_file_path | 臨時表空間 | 可選 |
常見報錯與排查
| 錯誤現象 | 原因 | 解決 |
File '.../mysql-bin.index' not found (Errcode: 2) | Binlog 目錄遷移未同步或權限錯誤 | 檢查 log-bin 路徑、index 文件存在、mysql 用戶讀寫權限 |
Can't open and lock privilege tables | Data 目錄遷移後 mysql 系統庫缺失 | 確認 rsync 包含 mysql 目錄、權限正確 |
InnoDB: Operating system error number 13 | 目錄權限非 mysql 用戶 | chown -R mysql:mysql /target/path |
| 啟動卡住無日誌 | SELinux/AppArmor 阻擋 | setenforce 0 或配置策略允許新目錄 |
驗證清單
# 1. 連接測試
mysql -e "SELECT VERSION();"
# 2. 讀寫測試
mysql -e "CREATE DATABASE migrate_test; USE migrate_test; CREATE TABLE t(id INT); INSERT INTO t VALUES(1); SELECT * FROM t; DROP DATABASE migrate_test;"
# 3. Binlog 正常產生
mysql -e "FLUSH LOGS; SHOW BINARY LOGS;"
# 4. 從庫同步檢查(如有)
mysql -e "SHOW SLAVE STATUS\G" # 確認 Relay_Master_Log_File 正常推進
回滾方案
# 保留舊目錄 7 天
mv /usr/local/mysql/var /usr/local/mysql/var.bak.$(date +%F)
# 回滾:改回 my.cnf datadir、log-bin,chown,啟動
遷移核心四步:停庫 → rsync -av → 改配置 → chown → 啟庫驗證。嚴守流程,Data 與 Binlog 目錄遷移零風險。
- 上一篇文章: MySQL 核心數據安全防護七大實戰策略
- 下一篇文章: mysqldump 普通用戶備份報 "Access denied ... LOCK TABLES" 解決方案
Copyright ©
程式碼之家 All Rights Reserved