0

0

MySQL增量备份与恢复实例_MySQL

php中文网

php中文网

发布时间:2016-06-01 13:01:01

|

1282人浏览过

|

来源于php中文网

原创

小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份。增量备份的原理就是使用了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 > setglobal 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

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

超会AI
超会AI

AI驱动的爆款内容制造机

下载

如果知道误操作的命令如 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 > setglobal 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 = utf8 ,mysqlbinlog 会从 my.cnf 中的 [client] 读取配置,但奈何mysqlbinlog并不认识这个选项(据说是个bug)导致的。

应对这个bug的方法有两个:

第一,自然是注释到 [client] 中的这个字符集配置;

第二,改用 loose-default-character-set = utf8 。在选项前加了 loose-,表示当程序不认识此选项时会略过此选项,并给出一个警告。

相关专题

更多
苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

115

2025.12.24

拼豆图纸在线生成器
拼豆图纸在线生成器

拼豆图纸生成器有PixelBeads在线版、BeadGen和“豆图快转”;推荐通过pixelbeads.online或搜索“beadgen free online”直达官网,避开需注册的诱导页面。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

82

2025.12.24

俄罗斯搜索引擎yandex官方入口地址(最新版)
俄罗斯搜索引擎yandex官方入口地址(最新版)

Yandex官方入口网址是https://yandex.com。用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

546

2025.12.24

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

150

2025.12.24

php框架基础知识汇总
php框架基础知识汇总

php框架是构建web应用程序的架构,提供工具和功能,以简化开发过程。选择合适的框架取决于项目需求和技能水平。实战案例展示了使用laravel构建博客的步骤,包括安装、创建模型、定义路由、编写控制器和呈现视图。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

20

2025.12.24

Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

47

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

7

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

12

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

371

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
TypeScript 教程
TypeScript 教程

共19课时 | 1.7万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号