MySQL逻辑备份工具mysqldump

mysqldump

简介

mysqldump这个程序最开始是Igor Romanenko写的。它是一个MySQL/MariaDB逻辑备份的工具,备份的逻辑就是将指定的数据库/表中的数据以SQL语句的形式一条一条导出。还原的时候也是执行一条条sql语句,达到还原的目的。

用法

shell> mysqldump [options] db_name [tbl_name ...]  #备份指定库中的表
shell> mysqldump [options] --databases db_name ...   #备份指定数据库,可以多个
shell> mysqldump [options] --all-databases   #备份所有库

常用选项

  • -A, --all-databases
    备份所有数据库
  • -B, --databases
    对单个数据库,或多个数据库进行备份,会有CREATE DATABASEUSE 语句,如果不使用-B备份单库,则不会有这两个语句
  • - -add-drop-database
    在每次创建之前添加DROP DATABASE。通常与 --all-databases 一起用
  • - -compact
    提供较少的详细输出(对调试很有用)。禁用结构注释和页眉/页脚构造。
  • -E, --events
    导出事件
  • -F, --flush-logs
    在开始备份之前刷新MariaDB服务器binlog日志。如果将此选项与–databases=or --all-databases选项结合使用,则会为每个备份的数据库刷新日志。例外情况是使用–lock-all-tables或–master-data:在这种情况下,日志只刷新一次,对应于所有表被锁定的时刻。如果你希望你的转储和刷新日志在同一确切的时刻发生,你应该使用–flush-logs与一起两种–lock-all-tables或–master-data。
  • -f, --force
    即使在表转储期间发生SQL错误,也要继续。
  • -h name, --host=name
    从给定主机上的MariaDB或MySQL服务器连接并备份数据。默认主机是localhost
  • –ignore-table=name
    不要备份指定的表。要指定多个要忽略的表,请多次使用该指令,每个表使用一次。必须使用数据库和表名指定每个表,例如,–ignore-table=database.table。
  • -x, --lock-all-tables
    锁定所有数据库中的所有表。这是通过在整个转储期间获取全局读锁来实现的。指定–single-transaction和–lock-tables的时候此选项自动关闭(一般用于myisam表温备,一般不用)
  • -l, --lock-tables
  • - -log-error=name
    通过将警告和错误附加到指定文件来记录警告和错误。默认是不进行日志记录。
  • - -master-data[=#]
    使binlog日志位置和文件名附加到输出,如果该选项设置为1(默认值),则将其作为CHANGE MASTER命令输出; 如果设置为2,则该命令将以注释符号作为前缀。除非另有说明,否则此–master-data选项将打开。在MariaDB 5.3之前,这将在转储开始时短时间内进行全局读锁定(有这个参数之后就不需要用-x和-l参数锁表了,因为这个参数会自动会锁表,备份完了也会自动释放掉锁。)
  • -q, --quick
    此选项对于转储大型表非常有用。它强制mysqldump一次从服务器一行检索表的行,然后将结果直接输出到stdout,而不是检索整个行集并在写出之前在内存中缓冲它。默认为开,用于–skip-quick禁用。
  • –single-transaction
    此选项在备份数据之前向服务器发送START TRANSACTION SQL语句。它仅适用于InnoDB之类的事务表,使用此选项时,应记住只有InnoDB表以一致状态备份。单事务功能不仅取决于引擎是事务性的还是能够REPEATABLE-READ,还取决于START TRANSACTION WITH CONSISTENT SNAPSHOT。
    该–single-transaction选项与–lock-tables选项互斥,因为LOCK TABLES导致任何挂起的事务被隐式提交。因此,此选项自动关闭–lock-tables(针对innodb进行热备)
    要转储大表,您应该将–single-transaction选项与–quick。
  • -R, --routines
    备份存储过程和函数数据(备份一般都带上这个参数)
  • - -triggers
    备份触发器数据(备份一般都带上这个参数)
  • -d
    仅表结构
  • -t
    仅数据

实例

备份所有库,并保存到~/alldb_backup.sql

备份所有库,并保存到~/alldb_backup.sql

mysqldump -uroot -pcentos --flush-logs --quick   --single-transaction --master-data=2  --all-databases> ~/alldb_backup.sql

还原

mysql -uroot -pcentos < ~/alldb_backup.sql
备份单个hellodb单个库
mysqldump -uroot -pcentos   --flush-logs --quick   --single-transaction  --databases hellodb > ~/hellodb_backup.sql

还原

mysql -uroot -pcentos < ~/hellodb.sql 
备份hellodb数据库中的students表
mysqldump -uroot -pcentos   --flush-logs --quick   --single-transaction   hellodb students > ~/hellodb_students_backup.sql

还原

mysql -uroot -pcentos hellodb < ~/hellodb_students_backup.sql
备份mydb和test数据库
mysqldump -B mydb test > mydb_test.sql
备份mydb库下的t1表和Orders表
mysqldump mydb Orders t1 > Orders_t1.sql
分库备份
for i in `mysql -e'show databases;' | sed 1d` ;do mysqldump -B $i >${i}.sql ; done;  
记录全备后的binlog位置,并滚动日志
mysqldump -A  -R --triggers  --master-data=2 -F > full.sql
压缩备份并打上时间戳
mysqldump -A  -R --triggers  --master-data=2 -F | gzip   > full_$(date +%F).sql.gz

解压

zcat full_2019-01-18.sql.gz  > full_2019-01-18.sql
gzip -d full_2019-01-18.sql.gz 

注意
还原的时候可以先关闭binlog日志,不然数据会再次写到binlog日志中

mysql> set @@session.sql_log_bin=off
mysql> source sql文件
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值