MySQL增量备份与恢复实例_MySQL
小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份。增量备份的原理就是使用了mysql的binlog日志。
本次操作的MySQL版本为 5.5.40 for Linux (x86_64)
。
增量备份要确保打开了二进制日志,参考 mysql的日志系统 :
<code>mysql> <span><span>show</span> variables <span>like</span><span>'%log_bin%'</span>;</span></code>
首先对pak数据库做一个完整备份:
<code><span>$ </span>mysqldump -h localhost -upak -ppwd -<span>P3306</span> --master-data=<span>2</span> --single-transaction --opt pak > pak_bak_full.sql </code>
这时候就会得到一个全备文件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中。
开始恢复
恢复过程不要记录日志:
<code>mysql > <span><span>set</span><span>global</span> sql_log_bin=<span>0</span>;</span></code>
首先导入全备数据
$ mysql -h localhost -upak -ppwd < pak_bak_full.sql 或 mysql> source /path/backup/pak_bak_full.sql
我们也可以看到全备时的binlog位置:
<code>head -50 backup-file.sql |grep 'CHANGE MASTER' <span>-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4321;</span></code>
查看当前所在二进制日志中的位置:
<code>mysql> <span><span>show</span> master status;</span></code>
根据上面两个position能大概确定需要完整恢复哪几个binlog文件。
恢复mysql-bin.000002
在待恢复的position或时间点以前、全备以后的binlog需要全部恢复,多个文件以空格隔开
<code>$ mysqlbinlog /<span>var</span>/lib/mysql/mysql-bin<span>.000002</span> | mysql -uroot -p </code>
此时查询可以得到前两条数据。
恢复部分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
恢复命令:
<code>$ mysqlbinlog /<span>var</span>/lib/mysql/mysql-bin<span>.000003</span> --stop-position=<span>775</span> | mysql -h localhost -uroot -p </code>
如果position难以确定,但知道需要恢复到的确切(服务器)时间,也可以使用datetime:
<code>$ mysqlbinlog /<span>var</span>/lib/mysql/mysql-bin<span>.000003</span> --stop-datetime=<span>"2014-12-04 15:08:00"</span> | mysql -uroot -p </code>
如果不是误操作导致的,而是迁移数据库,那么不需要position或datetime,使用所有binlog文件增量恢复即可。
确定恢复成功后记得打开日志记录:
<code>mysql > <span><span>set</span><span>global</span> sql_log_bin=<span>1</span>;</span></code>
报错
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-
,表示当程序不认识此选项时会略过此选项,并给出一个警告。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

谷歌浏览器扩展程序如何备份?对于大多数谷歌浏览器用户来说,日常使用时都会安装或多或少的插件,插件的存在可以提升我们的使用体验。当我们重装系统或浏览器时,这些插件却无法保留,重新下载安装又比较麻烦,那么有没有办法备份当前已安装的插件呢?下面就为大家带来操作方法。备份chrome插件的教程方法首先打开谷歌浏览器,点击右上角的菜单,选择更多工具——扩展程序。点击扩展程序页面上方的打包扩展程序。在C:UsersAdministratorAppDataLocalGoogleChromeUserDataDe

如果您希望在Windows11的文件资源管理器中隐藏“开始备份”选项,以下是您可以采取的方法。有多种途径可用于在文件资源管理器中禁用或隐藏启动备份选项,我们将简要列出一些方法,帮助您快速完成这项任务。在开始之前,您需要了解这个选项与OneDrive密切相关。一旦您打开某个库文件夹(比如Document、Pictures、Music等),它会立即显示在文件资源管理器的路径中。如何在Windows11的文件资源管理器中删除启动备份要在Windows11的文件资源管理器中删除启动备份,请按照以下方法操

标题:hosts文件删除后如何恢复摘要:hosts文件是操作系统中非常重要的一个文件,用于将域名映射到IP地址。如果不小心将hosts文件删除了,可能会导致上网无法访问特定网站或者其他网络问题。本文将介绍如何在Windows和Mac操作系统中恢复被误删的hosts文件。正文:一、Windows操作系统中恢复hosts文件Windows操作系统中的hosts文

近期有很多小伙伴咨询小编ghost怎么备份系统,接下来就让我们一起学习一下ghost备份系统的方法教程,希望可以帮助到大家。1、运行Ghost后,单击“OK”,如图所示。2、依次单击“Local”→“Partition”→“ToImage”(意为:本地→分区→到镜像文件),如图所示。3、出现选择本地硬盘窗口,单击要备份的分区所在硬盘,再单击“OK”,如图所示。4、出现选择源分区窗口(源分区就是你要备份的那个分区),单击系统所在的分区(通常为1区,一定要弄准),再单击“OK”,如图所示。5、此时弹

在PHP中备份和还原MySQL数据库可通过以下步骤实现:备份数据库:使用mysqldump命令转储数据库为SQL文件。还原数据库:使用mysql命令从SQL文件还原数据库。

WindowsServerBackup是WindowsServer操作系统自带的一个功能,旨在帮助用户保护重要数据和系统配置,并为中小型和企业级企业提供完整的备份和恢复解决方案。只有运行Server2022及更高版本的用户才能使用这一功能。在本文中,我们将介绍如何安装、卸载或重置WindowsServerBackup。如何重置Windows服务器备份如果您的服务器备份遇到问题,备份所需时间过长,或无法访问已存储的文件,那么您可以考虑重新设置WindowsServer备份设置。要重置Windows

如何在麒麟操作系统上进行系统备份和恢复?麒麟操作系统是中国自主研发的开源操作系统,广泛应用于各种场景中。在使用麒麟操作系统时,系统备份和恢复是非常重要的一项任务。备份系统可以防止因故障或误操作导致数据丢失,而系统恢复则可以在系统崩溃时快速恢复正常功能。本文将详细介绍如何在麒麟操作系统上进行系统备份和恢复,并附上相关代码示例。备份系统为了备份整个系统,我们可以

GitLab是一个开源的代码托管平台,提供了丰富的功能,包括代码库备份和恢复。代码库备份是确保代码安全的重要步骤之一,它可以帮助我们在发生意外情况时恢复数据。本文将介绍GitLab的代码库备份和恢复功能,并提供相应的实施步骤和代码示例。GitLab的代码库备份功能GitLab提供了两种类型的备份:增量备份和全量备份。增量备份:增量备份是指只备份最新更改的数据
