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

mydumper 多線程邏輯備份實戰:原理、安裝、備份恢復、主從建立全流程

     編輯:MySQL 資料庫相關知識

前言

mysqldump 單線程、串行導出,大庫備份耗時極長。mydumper 支援多線程並行備份、壓縮、一致性快照、Binlog 記錄、多線程恢復、守護進程模式,是大數據量邏輯備份的利器。

一、mydumper 核心特性

  • 多線程並行備份/恢復(預設 4 線程,可調)
  • 輸出多文件(每表結構+資料分離,支援分片)
  • MyISAM 加 FTWRL 全局鎖(短暫),InnoDB 基於一致性快照(無鎖)
  • 保證備份數據一致性
  • 支援壓縮、Binlog 導出、分片、守護進程定時快照

二、備份機制流程圖解

  1. 主線程 FLUSH TABLES WITH READ LOCK → 記錄 Binlog 位置到 metadata
  2. N 個 Dump 線程 START TRANSACTION WITH CONSISTENT SNAPSHOT
  3. 先導出非事務表(MyISAM 等)
  4. 主線程 UNLOCK TABLES(非事務表備份完成即釋放鎖,極短)
  5. 基於快照導出 InnoDB 表
  6. 事務提交,備份結束

輸出文件結構

backup_dir/
├── metadata                    # Binlog 位置、從庫同步位置
├── db.tbl-schema.sql           # 表結構
├── db.tbl.sql                  # 表資料(或分片:db.tbl.00001.sql ...)

三、安裝部署

# 依賴
yum install -y glib2-devel mysql-devel zlib-devel pcre-devel

# 編譯安裝
wget https://launchpad.net/mydumper/0.6/0.6.2/+download/mydumper-0.6.2.tar.gz
tar zxvf mydumper-0.6.2.tar.gz
cd mydumper-0.6.2
cmake . && make && make install

四、實戰案例:跨機器備份恢復 + 主從建立

環境

  • 10.137.143.151:A 業務 Master(40GB 數據庫 TaeOss)
  • 10.137.143.152:B 業務 Master(作為備機/新 Slave)
  • 10.137.143.156:備份中轉機(CentOS 6.4,避免生產機 I/O 爭搶)

步驟 1:授權備份賬號

# 在 151、152 上執行
mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'backup'@'10.137.143.156' IDENTIFIED BY 'backup2015'; FLUSH PRIVILEGES;"

步驟 2:中轉機備份(8 線程)

mydumper -h 10.137.143.151 -u backup -p backup2015 -B TaeOss -t 8 -o /data/rocketzhang

步驟 3:恢復到備機(8 線程)

myloader -h 10.137.143.152 -u backup -p backup2015 -B TaeOss -t 8 -d /data/rocketzhang

步驟 4:建立主從複制

# 151 建立 replication 賬號
mysql -uroot -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.137.143.152' IDENTIFIED BY 'repl123456'; FLUSH PRIVILEGES;"

# 查看 metadata 獲取 Binlog 位置
cat /data/rocketzhang/metadata
# 例:binlog=mysql-bin.002205, pos=456584891

# 152 配置從庫
vim /etc/my.cnf
replicate-do-table = TaeOss.%
replicate-wild-do-table = TaeOss.%
service mysqld reload

mysql -uroot -e "CHANGE MASTER TO MASTER_HOST='10.137.143.151', MASTER_USER='repl', MASTER_PASSWORD='repl123456', MASTER_LOG_FILE='mysql-bin.002205', MASTER_LOG_POS=456584891; START SLAVE; SHOW SLAVE STATUS\G;"

步驟 5:處理主鍵衝突(實戰踩坑)

啟動 Slave 後報主鍵衝突錯誤(Error 1062),經 mysqlbinlog 定位發現主庫已有衝突數據。緊急處理:

# 從庫導出衝突表、去除主鍵定義、重新導入
mysqldump -uroot --opt TaeOss t_evil_detect_uin_blacklist > t.sql
# 編輯 t.sql 移除 PRIMARY KEY 行
mysql -uroot TaeOss < t.sql
mysql -uroot -e "STOP SLAVE; START SLAVE; SHOW SLAVE STATUS\G;"

同步恢復正常,Slave_IO_Running: Yes, Slave_SQL_Running: Yes。

五、關鍵參數速查

  • -t, --threads:線程數(建議 CPU 核心數)
  • -c, --compress:壓縮輸出
  • -r, --rows / -F, --chunk-filesize:分片大小
  • -x, --regex:正則匹配表名
  • -k, --no-locks:不加鎖(僅 InnoDB 安全)
  • --daemon:守護進程模式
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved