MySQL备份工具mysqldump

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

文章评论

0条评论