【转】mysql增量备份恢复实战企业案例

来源地址:http://seanlook.com/2014/12/05/mysql_incremental_backup_example/  

小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份。增量备份的原理就是使用了mysql的binlog日志。
本次操作的MySQL版本为5.5.40 for Linux (x86_64)。
增量备份要确保打开了二进制日志,参考mysql的日志系统:
1   mysql> show variables like ‘%log_bin%‘;
首先对pak数据库做一个完整备份:
1   $ 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。
1. 模拟插入数据和误操作
a. 在pak库的某个表插入一些数据,然后执行flush logs命令。这时将会产生一个新的二进制日志文件mysql-bin.000003,mysql-bin.000002则保存了全备过后的所有更改,既增加记录的操作也保存在了mysql-bin.00002中。
b. 再在pak库中的t_user表中增加两条记录,然后误删除t_user表。t_user中增加记录的操作和删除表的操作都记录在mysql-bin.000003中。
2. 开始恢复
恢复过程不要记录日志:
1   mysql > set global sql_log_bin=0;
3. 首先导入全备数据
1
2
3   $ mysql -h localhost -upak -ppwd < pak_bak_full.sql
或
mysql> source /path/backup/pak_bak_full.sql
我们也可以看到全备时的binlog位置:
1
2   head -50 backup-file.sql |grep ‘CHANGE MASTER‘
-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000001‘, MASTER_LOG_POS=4321;
查看当前所在二进制日志中的位置:
1   mysql> show master status;
根据上面两个position能大概确定需要完整恢复哪几个binlog文件。
4. 恢复mysql-bin.000002
在待恢复的position或时间点以前、全备以后的binlog需要全部恢复,多个文件以空格隔开
1   $ mysqlbinlog /var/lib/mysql/mysql-bin.000002 | mysql -uroot -p
此时查询可以得到前两条数据。
5. 恢复部分mysql-bin.000003
这个日志中包括了新增记录和误删表两个部分,我们需要恢复到新增记录之后、误删操作以前的位置。
如果知道误操作的命令如DROP TABLE,则可以通过下面的方法在binlog文件中找到误操作之前的那个position:
(如下面的信息显示,误操作DROP TABLE之前的pos是775,在datetime 141204 15:08:04或pos 882时完成DROP TABLE操作)
1
2
3
4
5
6
7
8
9   $ 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
恢复命令:
1   $ mysqlbinlog /var/lib/mysql/mysql-bin.000003 --stop-position=775 | mysql -h localhost -uroot -p
如果position难以确定,但知道需要恢复到的确切(服务器)时间,也可以使用datetime:
1   $ 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查看二进制日志的时候,提示下面的错误:
2.
/usr/local/mysql/bin/mysqlbinlog: unknown variable ‘default-character-set=utf8’
3.
原因是在我为了统一mysql客户端到服务端的的字符编码,在/etc/my.cnf文件的[client]、[mysqld]等节加入了default-character-set = utf8,mysqlbinlog会从my.cnf中的[client]读取配置,但奈何mysqlbinlog并不认识这个选项(据说是个bug)导致的。
4.
应对这个bug的方法有两个:
第一,自然是注释到[client]中的这个字符集配置;
第二,改用loose-default-character-set = utf8。在选项前加了loose-,表示当程序不认识此选项时会略过此选项,并给出一个警告。
5.  
时间: 2024-08-27 14:05:33

【转】mysql增量备份恢复实战企业案例的相关文章

mysql增量备份断点恢复

生产环境中在mysql中误操作是非常正常的,所以就需要用到mysql的增量备份恢复.增量备份是我们经常用到的,它可以指定某个误操作的时间以及位置点进行数据恢复,更加准确的恢复我们想要还原的数据.以下实验为大家演示误操作使用增量备份进行数据的恢复. 1.配置文件中开启二进制日志,并重启mysql 2.创建测试数据库,写入内容 3.查看二进制日志,截断日志,完成完全备份 mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_bi

Mysql -- 完全备份 + 增量备份 + 恢复

文章目录 一.数据库备份的分类 二.MySQL 完全备份 (1)完全备份特点 (2)mysqldump 备份库 1.针对单个库进行完全备份 2.针对多个库进行完全备份 3.对所有库进行完全备份 (3)恢复数据库操作 1.source 命令 2.使用 mysql 命令 (4)mysqldump 备份表 1.备份表 2.备份表的结构 (5)恢复表的操作 三.MySQL 增量备份 一.数据库备份的分类: 1.从物理与逻辑的角度,备份可以分为: 物理备份:对数据库操作系统的物理文件(数据文件.日志文件等

MYSQL增量备份(日志备份)

MYSQL数据库在使用过程中,一般都需要对使用的数据库进行备份处理,对于数据量较小时可以通过mysqldump命令进行数据库全备份,但是当数据库数据量达到一定程度之后,显然增量备份更加适合. MYSQL增量备份主要通过二进制日志文件进行增量备份.mysql数据库会以二进制形式自动把用户对mysql数据库的操作记录到文件,当用户希望恢复的时候可以使用备份文件进行恢复. 本文主要介绍如何实现在本地服务器上对远程服务器的数据库文件进行在本地服务器的备份.(以下的cmd均需跳转到mysql的bin文件夹

利用XtraBackup实现MySQL物理备份恢复

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等功能节约磁盘空间和流量: (4)自动实现备份检验: (5)还原速度快: Xtrabackup中主要包含两个工具: xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构: in

Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工具: xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构: innobackupex:是将xtrabackup进行封装的perl脚本,可以备份和恢复MyISAM表以及数据表结构. 一段官方文档的说明: http://www.per

MySQL增量备份与还原详解

增量备份与恢复的特点 增量备份的优点是没有重复数据,备份量不大,时间短.但缺点也很明显,需要建立在上次完全备份及完全备份之后所有的增量才能恢复. MySQL没有提供直接的增量备份方法,但是可以通过mysql二进制日志间接实现增量备份.二进制日志对备份的意义如下: (1)二进制日志保存了所有更新或者可能更新数据库的操作. (2)二进制日志在启动MySQL服务器后开始记录,并在文件达到所设大小或者收到flush logs 命令后重新创建新的日志文件. (3)只需定时执行flush logs方法重新创

MongoDB迁移方案-冷备份+增量备份恢复

QQ群:465614686 1.  环境构建步骤 (1)线上环境 都是副本集模式 3个业务访问节点+1个隐藏节点 (隐藏节点做hadoop.spark数据同步使用以及数据报表查询等) (2)主机以及配置说明 10.21.18.21  primary节点    优先级为100 10.21.18.22  secondary节点  优先级为90 10.21.18.23  secondary节点  优先级为80 10.21.18.24  隐藏节点       优先级为0 系统配置:128G内存,64Co

mysql用户管理、常用sql语句、mysql数据库备份恢复

mysql用户管理 1.新增用户user1,并设置密码为123456 mysql> grant all on *.* to 'user1'@'127.0.0.1' identified by '123456'; #创建user1用户并授予其所有权限"*.*"(通配符) #第一个*:表示所有的数据库 #第二个*:表示所有的表 #127.0.0.1表示来源IP,指的只有这个IP可以连接:'%':代表所有的ip #identified by 设置密码 2.对user1用户进行授权管理

13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复

13.4 mysql用户管理 grant all on . to 'user1' identified by 'passwd';mysql> grant all on . to 'user1' identified by 'passwd';Query OK, 0 rows affected (0.01 sec) grant SELECT,UPDATE,INSERT on db1. to 'user2'@'192.168.15.132' identified by 'passwd';mysql>