MySQL数据库备份与恢复(3)

增量备份的特点
与完全备份不同,增量备份没有重复数据,备份量较小,备份时间短;但其恢复麻烦,需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对增量备份进行逐个反推恢复。MySQL并没有提供直接的增量备份方法,可以通过MySQL提供的二进制日志间接实现增量备份。

mysql二进制日志对备份的意义
二进制日志保存了所有更新或者可能更新数据库的操作。二进制日志在启动MySQL服务器后开始记录,并在文件达到二进制日志所设置的最大值或者接收到“flush logs”命令后重新创建新的日志文件,生成二进制文件序列,并及时把这些日志保存到安全的存储位置,即可完整一个时间段的增量备份。

要想进行MySQL的增量备份,首先必须开启二进制日志功能。

[root@localhost ~]# vim /etc/my.cnf //编写mysql服务的主配置文件 ………… //省略部分内容,添加以下内容 log-bin=/usr/local/mysql/mysql-bin //二进制日志的存放位置 [root@localhost ~]# systemctl restart mysqld //重启mysql服务 [root@localhost ~]# ll /usr/local/mysql/mysql-bin.* //查看二进制日志文件 -rw-rw----. 1 mysql mysql 120 723 18:00 /usr/local/mysql/mysql-bin.000001 -rw-rw----. 1 mysql mysql 34 723 18:00 /usr/local/mysql/mysql-bin.index //现在对mysql数据库的操作将记录在mysql-bin.000001文件中

mysql增量恢复常见的方法有三种:
一般恢复:将所有备份的二进制日志文件内容全部恢复,命令格式:

mysqlbinlog [--no-defaults] 增量备份文件 | mysql -u 用户名 -p

基于位置的恢复:数据库管理员在操作数据库时可能在同一时间点既有错误的操作也有正确的操作,基于位置恢复更加精准:
1.恢复数据到指定位置,命令格式:

mysqlbinlog --stop-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码

2.从指定位置开始恢复数据,命令格式:

mysqlbinlog --start-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码

基于时间点恢复:跳过某个发生错误的时间点实现数据恢复。而基于时间点的恢复可以分为三种情况:
1.从日志开头截止到某个时间点的恢复,命令格式:

mysqlbinlog [--no-defaults] --stop-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

2.从某个时间点到日志结尾的恢复,命令格式:

mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

3.从某个时间点到某个时间点的恢复,命令格式:

mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’ --stop-datetime=’年-月-日小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

通过一个小事例了解一下:

[root@localhost ~]# mysql -u root -e 'select * from a.t1;' +------+ | id | +------+ | 1 | | 2 | | 3 | +------+ //新建a库t1表,并往表中插入三条数据。 [root@localhost ~]# mysqldump -u root a t1 > a_t1_$(date +%F).sql //先做一次完全备份 [root@localhost ~]# mysqladmin -u root flush-logs //刷新二进制日志 [root@localhost ~]# mysql -u root -e 'insert into a.t1 values(4);' [root@localhost ~]# mysql -u root -e 'insert into a.t1 values(5);' [root@localhost ~]# mysql -u root -e 'insert into a.t1 values(6);' //插入三条新数据 [root@localhost ~]# mysqladmin -u root flush-logs //再刷新二进制日志 [root@localhost ~]# mysql -u root -e 'insert into a.t1 values(7);' [root@localhost ~]# mysql -u root -e 'insert into a.t1 values(8);' [root@localhost ~]# mysql -u root -e 'insert into a.t1 values(9);' [root@localhost ~]# mysql -u root -e 'delete from a.t1;' //插入三条记录并删除表中所有数据 [root@localhost ~]# mysqladmin -u root flush-logs //刷新二进制日志 [root@localhost ~]# mysql -u root -e 'select * from a.t1;' //查看表,表中已经没有任何数据

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/314b825f061b7facbfdb18145d70a5b2.html