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 sbtest1.sql