mysqldump 是 MySQL 官方邏輯備份工具,參數極其豐富。本文梳理 13 個高頻使用場景,附帶完整參數速查表,幫助 DBA 快速定位所需命令。
mysqldump [OPTIONS] database [tables] mysqldump [OPTIONS] --databases DB1 [DB2...] mysqldump [OPTIONS] --all-databases
CREATE DATABASE db1 DEFAULT CHARSET utf8; USE db1; CREATE TABLE a1(id int); INSERT INTO a1 VALUES(1),(2); CREATE TABLE a2(id int); INSERT INTO a2 VALUES(2); CREATE TABLE a3(id int); INSERT INTO a3 VALUES(3); CREATE DATABASE db2 DEFAULT CHARSET utf8; USE db2; CREATE TABLE b1(id int); INSERT INTO b1 VALUES(1); CREATE TABLE b2(id int); INSERT INTO b2 VALUES(2);
mysqldump -uroot -proot --all-databases > /tmp/all.sql
mysqldump -uroot -proot --databases db1 db2 > /tmp/user.sql

mysqldump -uroot -proot --databases db1 --tables a1 a2 > /tmp/db1.sql
輸出內容無 CREATE DATABASE 判斷,僅含 DROP TABLE、CREATE TABLE、INSERT。

mysqldump -uroot -proot --databases db1 --tables a1 --where="id=1" > /tmp/a1.sql

mysqldump -uroot -proot --databases db1 -F > /tmp/db1.sql
配合主從切換場景,確保備份位點對應新 binlog 文件。
mysqldump -uroot -proot --no-data --databases db1 > /tmp/db1.sql
# h1 -> h2,目標庫 db2 必須預先存在 mysqldump --host=h1 -uroot -proot --databases db1 | mysql --host=h2 -uroot -proot db2 # 啟用壓縮傳輸(-C),跨公網/低帶寬場景極大提速 mysqldump --host=192.168.80.137 -uroot -proot -C --databases test | mysql --host=192.168.80.133 -uroot -proot test
在從庫執行,相當於 SHOW SLAVE STATUS。
-- 1: 輸出 CHANGE MASTER 命令 mysqldump -uroot -proot --dump-slave=1 --databases db1 > /tmp/db1.sql![]()
-- 2: 註釋形式輸出 mysqldump -uroot -proot --dump-slave=2 --databases db1 > /tmp/db1.sql
會隱式開啟 --lock-all-tables,除非指定 --single-transaction。
在主庫執行,相當於 SHOW MASTER STATUS。參數含義同 --dump-slave。
mysqldump -uroot -proot --single-transaction --quick --databases db1 > /tmp/db1.sql
--lock-tables 互斥。--quick 避免緩存撐爆內存。MyISAM 表適用。InnoDB 優先用 --single-transaction。多庫備份時無法保證庫間邏輯一致性。
mysqldump -uroot -proot --routines --databases db1 > /tmp/db1.sql
--opt 等價於:--add-drop-table --add-locks --create-options --quick --extended-insert --lock-tables --set-charset --disable-keys。
大表導出建議顯式組合:--single-transaction --quick --extended-insert --set-charset。
| 參數 | 短參 | 說明 |
|---|---|---|
| --all-databases | -A | 導出全部庫 |
| --databases | -B | 導出指定庫列表 |
| --tables | 覆蓋 -B,指定導出表 | |
| --where | -w | 條件過濾(單表) |
| --no-data | -d | 僅結構 |
| --no-create-info | -t | 僅數據 |
| --single-transaction | 事務一致性備份(InnoDB) | |
| --lock-tables | -l | 鎖表備份(MyISAM) |
| --extended-insert | -e | 多值 INSERT,加速導入 |
| --quick | -q | 流式輸出,不緩存結果集 |
| --compress | -C | 壓縮傳輸 |
| --master-data | 記錄主庫 binlog 位點 | |
| --dump-slave | 記錄從庫 binlog 位點 | |
| --routines | -R | 導出存儲過程/函數 |
| --triggers | 導出觸發器(默認開啟) | |
| --events | -E | 導出事件調度器 |
| --hex-blob | 二進制字段十六進制導出 | |
| --ignore-table | 忽略指定表(可重複) |
#!/bin/bash # 每日全量備份,排除系統庫 FILE="mysql_$(date +%F)" BACKDIR="/mysqlbackup" mysql -uroot -e 'show databases' | egrep -v "Database|information_schema|performance_schema|mysql|sys" \ | xargs mysqldump -uroot --single-transaction --quick --extended-insert --databases > $BACKDIR/$FILE.sql # 壓縮存儲 gzip $BACKDIR/$FILE.sql # 保留 7 天 find $BACKDIR -mtime +7 -name "*.gz" -delete
mysqldump,物理備份看 xtrabackup。管道流式 + 壓縮,避免落地文件二次傳輸。作者:pursuer.chen | 博客:https://www.cnblogs.com/chenmh