MySql全量备份,增量备份及恢复

一. 准备工作

MySql没有现成的增量备份功能,但是可以利用binlog实现增量备份,所以我们需要先开启binlog功能.同时全备份过程中避免对数据库进行操作.本文的场景是,已经配置好主从复制,我们用从库的日志文件来进行数据恢复.

1.1 修改配置文件

  1. 修改mysql配置文件
#linux
vi /etc/my.cnf
#windows
修改my.ini文件
  1. 在该文件下[mysqld]中指定Master的配置如下:
#启用从库的二进制日志
log-bin=mysql-bin
#配置更新的日志写入binlog
log_slave_updates = 1

1.2 重启MySql

#linux
service mysqld restart
#windows
net stop mysql
net start mysql

二. 全量备份

2.1 使用mysqldump进行全备份

#文件备份路径最好写绝对路径,如果只写文件名称,生成的文件在打开cmd窗口的位置
mysqldump -u 用户 -p 数据库 [表1 表2 …… 表N] > 备份文件路径

#实际上还要加一些别的参数控制
mysqldump -u root -p --single-transaction --flush-logs --master-data=2 liberty > backup_test.sql
--single-transaction,开启单一事务,整个备份过程只有一个事务,不适用该参数时,会频繁的开启事务,实现点对点的备份恢复.因为-single-transaction选项备份时涉及到的是select语句,所以dml语句是被允许的,ddl不被允许直到回滚保存点撤销select 语句
--flush-logs 为结束当前日志,生成新日志文件
--master-data=2 选项将会在输出SQL中记录下完全备份后新日志文件的名称,用于日后恢复时参考

三. 恢复

  1. 恢复前先关闭binlog并重启
vi /etc/my.cnf

#log-bin=mysql-bin
  1. 暂停同步
登录mysql
mysql>stop slave;

3.1 全量恢复

在shell命令下:
shell>  mysql -u 用户名 -p 数据库名 < 备份文件.sql

在mysql命令下:
mysql>  source 备份文件.sql;

3.2 增量恢复

  1. 用最后一次的全量备份文件进行恢复,见上一步
  2. 找到误操作所在的binlog文件
命令行:
# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.00000x [-d dbname]
mysql中:
mysql> show binlog events in 'mysql-bin.00000x';
  1. 比如说误操作在mysql-bin.000005中,找到误操作的位置或者时间
  • 依次恢复:
# mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p
# mysqlbinlog --no-defaults mysql-bin.000002 | mysql -u root -p 
# mysqlbinlog --no-defaults mysql-bin.000003 | mysql -u root -p
# mysqlbinlog --no-defaults mysql-bin.000004 | mysql -u root -p
  • 基于时间的恢复:跳过误操作的时间
    [亲测没有成功!]
# mysqlbinlog --no-defaults --stop-datetime='2018-07-03 18:19:49' /usr/local/mysql/data/mysql-bin.00000x | mysql -u root -p
# mysqlbinlog --no-defaults --start-datetime='2018-07-03 18:22:21' /usr/local/mysql/data/mysql-bin.00000x | mysql -u root -p
  • 基于位置的恢复:跳过误操作的位置
# mysqlbinlog --no-defaults --stop-position=347 /usr/local/mysql/data/mysql-bin.00000x | mysql -u root -p
# mysqlbinlog --no-defaults --start-position=395 /usr/local/mysql/data/mysql-bin.00000x | mysql -u root -p

参考文章

零星的点

猜你喜欢

转载自blog.csdn.net/qq_34448882/article/details/86624655