記錄從 MySQL 5.5 遷移至 MariaDB 10.1.14 的完整過程,包含備份策略、表空間衝突、資料類型相容性、主從同步錯誤等實戰問題與解法。
問題:xtrabackup 還原需 innodb_file_per_table=ON,但部分舊表仍在共享表空間 ibdata 中。
解決:申請維護窗口,對受影響表執行 ALTER TABLE ... ENGINE=InnoDB 重建至獨立 .ibd 檔案。
問題:IMPORT TABLESPACE 報錯「表結構不匹配」,涉及欄位為 DATE、DATETIME、TIMESTAMP 類型。
解決:對報錯表改用 mysqldump 邏輯備份匯入,速度可接受且避開實體檔案相容性問題。
問題:備份與建立複制間有時間差,新資料導致從庫同步主鍵衝突。
解決:
-- 臨時跳過主鍵衝突 SET GLOBAL sql_slave_skip_counter = 1; -- 或設定 slave_skip_errors = 1062 -- 開啟 MariaDB 多執行緒複制加速追趕 SET GLOBAL slave_parallel_mode = 'optimistic'; SET GLOBAL slave_parallel_threads = 6; SET GLOBAL innodb_flush_log_at_trx_commit = 0; -- 暫時犧牲耐久性換速度
觀察同步狀態:
MariaDB> SHOW PROCESSLIST; +----+-------------+-----------+------+---------+------+----------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-------------+-----------+------+---------+------+----------------------------------+------------------+ | 23 | system user | | NULL | Connect | 1197 | Waiting for master to send event | NULL | | 24 | system user | | NULL | Connect | 1197 | Waiting for work from SQL thread | NULL | ... | 30 | system user | | NULL | Connect | 0 | apply log event | NULL | +----+-------------+-----------+------+---------+------+----------------------------------+------------------+
| 參數 | 用途 |
|---|---|
| slave_parallel_mode | optimistic:樂觀平行複制,自動偵測衝突 |
| slave_parallel_threads | SQL 執行緒數量 |
| innodb_flush_log_at_trx_commit | 0=每秒刷盤,效能最佳但可能丟失 1 秒資料 |
mysqldump,小表可 xtrabackup 表空間遷移DATE/DATETIME 欄位相容性pt-table-checksum)後再切換