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

FLUSH TABLES WITH READ LOCK → 記錄 Binlog 位置到 metadataSTART TRANSACTION WITH CONSISTENT SNAPSHOTUNLOCK TABLES(非事務表備份完成即釋放鎖,極短)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
# 在 151、152 上執行 mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'backup'@'10.137.143.156' IDENTIFIED BY 'backup2015'; FLUSH PRIVILEGES;"
mydumper -h 10.137.143.151 -u backup -p backup2015 -B TaeOss -t 8 -o /data/rocketzhang
myloader -h 10.137.143.152 -u backup -p backup2015 -B TaeOss -t 8 -d /data/rocketzhang
# 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;"
啟動 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:守護進程模式