首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Data 目錄與 Binlog 目錄遷移標準化操作手冊

     編輯:MySQL 資料庫相關知識

遷移前核心原則

  • 停庫操作: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_dirRedo log 目錄強烈建議
innodb_undo_directoryUndo 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 tablesData 目錄遷移後 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 目錄遷移零風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved