MySQL 5.6 線上遷移 Binlog 目錄完整操作
一、場景與現狀確認
# 當前配置
grep log-bin /usr/local/mysql/my.cnf
# log-bin = /home/data/mysql/binlog/mysql-bin.log
# 當前 binlog 文件
ls -lh /home/data/mysql/binlog/
# mysql-bin.000053 1.0G 12-10 20:44 (最新寫入)
二、驗證 Binlog 正常寫入
mysql> CREATE TABLE test.z2 SELECT 2 AS a;
# 觀察 mysql-bin.000053 大小變化,確認活躍
三、重啟觀察 Binlog 旋轉
service mysqld56 restart
ls -lh /home/data/mysql/binlog/
# 新生成 mysql-bin.000054 (399 bytes) — 旋轉正常
四、建立新目錄並授權
mkdir -p /home/data/mysql/binlog_new
chown -R mysql.mysql /home/data/mysql/binlog_new
五、修改配置文件指向新路徑
vim /usr/local/mysql/my.cnf
# log-bin = /home/data/mysql/binlog_new/mysql-bin
六、重啟服務生效
service mysqld56 restart
七、驗證新 Binlog 產生與寫入
ls -lh /home/data/mysql/binlog_new/
# mysql-bin.000001 (143B), mysql-bin.000002 (399B), mysql-bin.index (90B)
mysql> USE test;
mysql> CREATE TABLE z3 SELECT 3 AS a;
mysql> INSERT INTO z3 SELECT 4; INSERT INTO z3 SELECT 5;
ls -lh /home/data/mysql/binlog_new/
# mysql-bin.000002 從 399B 增長到 1085B — 新日志正常寫入
八、mysqlbinlog 解析驗證內容完整性
/usr/local/mysql/bin/mysqlbinlog --base64-output=DECODE-ROWS -v \
/home/data/mysql/binlog_new/mysql-bin.000002
# 輸出包含:
# CREATE TABLE `test`.`z3` ...
# INSERT INTO `test`.`z3` VALUES (3), (4), (5)
# Xid = 60/63/64 COMMIT
輸出顯示完整的 DDL、DML、事務提交事件,證明遷移成功且 Binlog 內容完整可用於主備復制/時間點恢復。
九、關鍵注意事項
- **必須重啟 mysqld** 使
log-bin 新路徑生效(動態修改無效)
- **舊目錄保留**:舊 binlog 仍可能被 Slave 讀取,確認所有 Slave 已切換至新位置(或通過
CHANGE MASTER TO 指定新路徑)後再清理
log-bin.index 會自動在新目錄生成,記錄新 binlog 列表
- 生產環境建議**低峰期操作**,並提前備份