资讯专栏INFORMATION COLUMN

MySQL增量备份与恢复实例

vvpvvp / 3184人阅读

摘要:增量备份的原理就是使用了的日志。本次操作的版本为。增量备份要确保打开了二进制日志,参考的日志系统首先对数据库做一个完整备份这时候就会得到一个全备文件。

小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份。增量备份的原理就是使用了mysql的binlog日志。
本次操作的MySQL版本为5.5.40 for Linux (x86_64)

增量备份要确保打开了二进制日志,参考mysql的日志系统:

mysql> show variables like "%log_bin%";

首先对pak数据库做一个完整备份:

$ mysqldump -h localhost -upak -ppwd -P3306 --master-data=2 --single-transaction --opt pak > pak_bak_full.sql

这时候就会得到一个全备文件pak_bak_full.sql。mysqldump操作会导致滚动一次log,假设新的binlog文件是mysql-bin.000002。

模拟插入数据和误操作

a. 在pak库的某个表插入一些数据,然后执行flush logs命令。这时将会产生一个新的二进制日志文件mysql-bin.000003,mysql-bin.000002则保存了全备过后的所有更改,既增加记录的操作也保存在了mysql-bin.00002中。

b. 再在pak库中的t_user表中增加两条记录,然后误删除t_user表。t_user中增加记录的操作和删除表的操作都记录在mysql-bin.000003中。

开始恢复

恢复过程不要记录日志:

mysql > set global sql_log_bin=0; 

首先导入全备数据

$ mysql -h localhost -upak -ppwd < pak_bak_full.sql
或
mysql> source /path/backup/pak_bak_full.sql

我们也可以看到全备时的binlog位置:

head -50 backup-file.sql |grep "CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE="mysql-bin.000001", MASTER_LOG_POS=4321;

查看当前所在二进制日志中的位置:

mysql> show master status;

根据上面两个position能大概确定需要完整恢复哪几个binlog文件。

恢复mysql-bin.000002
在待恢复的position或时间点以前、全备以后的binlog需要全部恢复,多个文件以空格隔开

$ mysqlbinlog /var/lib/mysql/mysql-bin.000002 | mysql -uroot -p

此时查询可以得到前两条数据。

恢复部分mysql-bin.000003
这个日志中包括了新增记录和误删表两个部分,我们需要恢复到新增记录之后、误删操作以前的位置。

如果知道误操作的命令如DROP TABLE,则可以通过下面的方法在binlog文件中找到误操作之前的那个position:
(如下面的信息显示,误操作DROP TABLE之前的pos是775,在datetime 141204 15:08:04或pos 882时完成DROP TABLE操作)

$ mysqlbinlog /var/lib/mysql/mysql-bin.000003 |grep -C 5 "DROP TABLE"
#141204 15:07:05 server id 1  end_log_pos 775   Xid = 376
COMMIT/*!*/;
# at 775
#141204 15:08:04 server id 1  end_log_pos 882   Query   thread_id=10    exec_time=0 error_code=0
SET TIMESTAMP=1417676884/*!*/;
DROP TABLE `t_user` /* generated by server */
/*!*/;
# at 882

恢复命令:

$ mysqlbinlog /var/lib/mysql/mysql-bin.000003 --stop-position=775 | mysql -h localhost -uroot -p

如果position难以确定,但知道需要恢复到的确切(服务器)时间,也可以使用datetime:

$ mysqlbinlog /var/lib/mysql/mysql-bin.000003 --stop-datetime="2014-12-04 15:08:00" | mysql -uroot -p

如果不是误操作导致的,而是迁移数据库,那么不需要position或datetime,使用所有binlog文件增量恢复即可。

确定恢复成功后记得打开日志记录:

mysql > set global sql_log_bin=1;

报错
1. unknown variable "default-character-set=utf8"
在使用mysqlbinlog查看二进制日志的时候,提示下面的错误:

  

/usr/local/mysql/bin/mysqlbinlog: unknown variable "default-character-set=utf8"

原因是在我为了统一mysql客户端到服务端的的字符编码,在/etc/my.cnf文件的[client][mysqld]等节加入了default-character-set = utf8mysqlbinlog会从my.cnf中的[client]读取配置,但奈何mysqlbinlog并不认识这个选项(据说是个bug)导致的。

应对这个bug的方法有两个:
第一,自然是注释到[client]中的这个字符集配置;
第二,改用loose-default-character-set = utf8。在选项前加了loose-,表示当程序不认识此选项时会略过此选项,并给出一个警告。


原文链接地址:http://seanlook.com/2014/12/05/mysql_incremental_backup_example/


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/46403.html

相关文章

  • MySQL数据库运维之数据备份02

    摘要:上篇文章介绍了一下数据库逻辑备份第一部分的使用,本篇文章将继续介绍数据库逻辑备份第二部分工具的操作过程介绍是有公司发行的一款数据库物理备份工具,可以对存储引擎的表实现在线热备,同时可以对数据库进行全备和增量备份以及增量恢复。 上篇文章介绍了一下MySQL数据库逻辑备份第一部分mysqldump的使用,本篇文章将继续介绍MySQL数据库逻辑备份第二部分Xtrabackup工具的操作过程!...

    LeoHsiun 评论0 收藏0
  • Linux运维:mysql数据库的备份恢复

    摘要:运维工程师的日常工作需要对各种数据进行备份,其中数据库数据的备份当属重点之一,为了方便管理,选择哪种备份方案是很重要的。以上版本进行备份恢复及以上的版本用工具会有问题。 运维工程师的日常工作需要对各种数据进行备份,其中数据库数据的备份当属重点之一,为了方便管理,选择哪种备份方案是很重要的。 数据备份种类 全量备份 全量备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝。实际应...

    xuexiangjys 评论0 收藏0
  • Xtrabackup 全备 增量 差异 恢复数据 自动化备份脚本

    摘要:为最终恢复数据做准备。如果是差异备份全备和差异备份合并。恢复数据自动化备份脚本基础配置脚本文件全备份脚本文件增量备份脚本文件差异备份脚本文件 安装xtrabackup wget -O /etc/yum.repos.d /epel.repo http://mirrors.aliyun.com/repo/epel-6.repo #配置epel源 yum -y install perl p...

    melody_lql 评论0 收藏0
  • Xtrabackup 全备 增量 差异 恢复数据 自动化备份脚本

    摘要:为最终恢复数据做准备。如果是差异备份全备和差异备份合并。恢复数据自动化备份脚本基础配置脚本文件全备份脚本文件增量备份脚本文件差异备份脚本文件 安装xtrabackup wget -O /etc/yum.repos.d /epel.repo http://mirrors.aliyun.com/repo/epel-6.repo #配置epel源 yum -y install perl p...

    jollywing 评论0 收藏0
  • Xtrabackup 全备 增量 差异 恢复数据 自动化备份脚本

    摘要:为最终恢复数据做准备。如果是差异备份全备和差异备份合并。恢复数据自动化备份脚本基础配置脚本文件全备份脚本文件增量备份脚本文件差异备份脚本文件 安装xtrabackup wget -O /etc/yum.repos.d /epel.repo http://mirrors.aliyun.com/repo/epel-6.repo #配置epel源 yum -y install perl p...

    yy13818512006 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<