mysqldump 是 MySQL 官方提供的命令行工具,用于备份 MySQL 数据库的结构和数据,支持全量备份、增量备份、单库 / 单表备份等场景。它通过生成 SQL 语句文件(包含建库、建表、插入数据等操作)实现备份,恢复时只需执行该 SQL 文件即可
一,基本语法
mysqldump 【选项】 库名 表名 > 文件.sql
二,核心参数详解
1,连接参数:
-u 数据库账号
-p 数据库密码
-h 数据库主机
-P 数据库端口2,备份范围参数:
--all-databases 备份所有库,包括系统库mysql-全量备份
--databases 库1 库2 备份多个库,会包含建库语句
仅指定库名 表名 备份单张表或多个表3,数据一致性参数
--single-transaction 对 InnoDB 表开启事务快照,备份时不锁表(不阻塞读写)
--lock-all-tables 锁定所有表(读锁),确保备份一致性(会阻塞写操作)
--lock-tables 仅锁定当前备份的表(默认对 MyISAM 生效)4,备份内容参数
--no-data 只备份表结构,不备份表数据,生成 CREATE TABLE 语句
--no-create-info 只备份数据(不包含表结构),生成 INSERT 语句
--routines 备份存储过程和函数,需有 SELECT 权限 on mysql.proc
--events 备份事件调度器,需有 EVENT 权限
--triggers 备份所有表的触发器(默认开启),禁用用 --skip-triggers
--add-drop-table 在创建表之前添加 DROP TABLE IF EXISTS 语句
--ignore-table 跳过指定的表
--where=" " 加条件限制
--skip-extended-insert 使每行数据生成一条插入语句5,日志和恢复辅助参数
--master-data=2 记录备份时的二进制日志文件名和位置(以注释形式),用于增量备份(配合 mysqlbinlog)
--flush-logs 备份前刷新二进制日志(生成新日志文件),便于后续增量备份切割点
--binlog-do-db=库名 仅备份指定库的二进制日志(需配合主从),主从复制场景6,压缩与优化参数
--compress 压缩客户端与服务器之间的传输数据,远程备份时节省带宽
--quick 快速备份(直接从表中读取,不缓存到内存),大表备份避免内存溢出
--max_allowed_packet=大小 设置最大数据包大小(默认 24M),备份大字段(如 BLOB)时增大7,外键与压缩
mysql外键
取消
SET FOREIGN_KEY_CHECKS=0;
恢复
SET FOREIGN_KEY_CHECKS=1;
#压缩结果:
mysqldump ... | gzip > xkf_ht_full.sql.gz
#记录日志:
mysqldump ... > xkf_ht_full.sql 2> backup.log三,基本场景与对应命令
1,表结构 + 表数据(大批量)
mysqldump -u 用户名 -p -h 主机名 --default-character-set=utf8mb4 --single-transaction --quick --extended-insert database table > table.sql2,表结构 + 表数据(单条数据)
mysqldump -u 用户名 -p -h 主机名 --default-character-set=UTF8 --single-transaction --quick --skip-extended-insert --databases database table > table.sql3,只有表数据(大批量)
mysqldump -u 用户名 -p -h 主机名 --default-character-set=UTF8 --single-transaction --quick --no-create-info --extended-insert database table > table.sql4,只有表数据(单条数据)
mysqldump -u 用户名 -p -h 主机名 --default-character-set=UTF8 --single-transaction --quick --no-create-info --skip-extended-insert database table > table.sql5,只有表结构(单表)
mysqldump -u 用户名 -p -h 主机名 --default-character-set=UTF8 --no-data --add-drop-table database table > table.sql6,只有表结构(整库)
mysqldump -u 用户名 -p -h 主机名 --default-character-set=UTF8 --no-data --single-transaction --add-drop-table --databases database > database.sql7,备份整个库(表结构 + 数据)
mysqldump -u 用户名 -p -h 主机名 --default-character-set=UTF8 --single-transaction --quick --routines --triggers --events --databases database > database.sql