mysqldump是MySQL自带的逻辑备份工具,能够实现包括库级别、表级别、字段级别、表结构、where条件过滤等不同粒度的数据备份,备份出来的文件通常是文本形式保存的SQL语句,当然也可以是CSV,XML格式,这些文本文件能够很方便地再次导入到MySQL或者其他类型的数据库。

由于是逻辑备份,mysqldump工具在备份大数量的库时,耗时较长,因此不建议使用mysqldump备份大库,对于大库的备份建议使用物理备份工具,比如xtrabackup。

1. mysqldump需要的权限

SELECT

SHOW VIEW(导出视图)

TRIGGER(导出触发器)

LOCK TABLES(如果没有指定--single-transaction )

2. mysqldump用法与常用参数

将db_name库备份到db_name.sql文件中:

mysqldump -h 127.0.0.1 -u user -p'password' db_name > db_name.sql

将db_name库里面的tb_name表备份到tb_name.sql文件中:

mysqldump -h 127.0.0.1 -u user -p'password' db_name tb_name > tb_name.sql

常用参数:

--host,-h,指定MySQL IP地址

--user, -u,指定用户名

--password, -p,指定密码

--all-databases,-A,全库备份

--databases,-B,指定某个或者某些库备份

--tables,指定某个或者某些表备份

--where,-w,指定where条件进行过滤,只备份符合条件的数据

--result-file,指定备份文件路径

--no-data,只备份表结构,不备份实际行数据

--no-create-info,备份文件中不包含建表语句

--no-create-db,备份文件中不包含建库语句

--single-transaction,在一个事务中备份数据,可以避免锁表

MySQL 5.7 备份数据,导入时如果不想重置GTID,则在导入时,加上参数: --set-gtid-purged=OFF

3. mysqldump各种场景使用示例

3.1 备份表结构

导出db库里t1,t2表的表结构:

mysqldump -h 127.0.0.1 -u user -p'123456' db t1 t2 --no-data > t1.sql

导出db库里所有表的表结构:

mysqldump -h 127.0.0.1 -u user -p'123456' db --no-data > db.sql

3.2 备份表数据(包含表结构)

导出db库里t1,t2表的表数据,包含建表语句:

mysqldump -h 127.0.0.1 -u user -p'123456' db t1 t2 > t1_t2.sql

3.3 备份表数据(不包含表结构)

导出db库里t1,t2表的表数据,不包含建表语句:

mysqldump -h 127.0.0.1 -u user -p'123456' db t1 t2 --no-create-info > t1_t2.sql

3.4 备份一个数据库

导出db库里所有表的数据:

mysqldump -h 127.0.0.1 -u user -p'123456' db > db.sql

3.5 备份多个数据库

备份db1,db2两个数据库里所有表的数据:

mysqldump -h 127.0.0.1 -u user -p'123456' -B db1 db2 > db.sql

3.6 备份所有数据库

备份整个MySQL数据库,包括触发器,存储过程、函数,事件等等。

mysqldump -h 127.0.0.1 -u user -p'123456' --all-databases --triggers --routines --events > all.sql

3.7 指定where条件进行备份

sysbench测试表sbtest1包含id,k,c,pad这几个字段,如果想备份 k>1000 and k<5000 的数据,如下:

mysqldump -h 127.0.0.1 -u user -p'123456' sysbench sbtest1 --where="k>1000 and k<5000" > sbtest1.sql