开发者学堂课程【MySQL 实操课程:MySQL 下增量备份与还原】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/717/detail/12827
MySQL 下增量备份与还原
内容介绍
一、增量备份与还原
二、案例演示
一、增量备份与还原
1、增量备份是在某一次完全备份的基础,只备份其后数据的变化
2、如果 mysqld 在运行则停止 ,然后用 --log-binf[=file_ name] 选项来启动,就是说在 bin-log 配置文件中启动 --log-bin,然后全量备份加上增量 --log-bin 一起去还原。二进制日志文件中提供了执行 mysqldump 之后对数据库的更改进行复制所需要的信息
③MySQL 支持增量备份:需要用 --log-bin 选项来启动服务器以便启用二进制日志。当想要进行增量备份时(包含上一次完全备份或增量备份之后的所有更改),应使用 F@USH LOGS 回滚二进制日志。然后,需要将从最后的完全或增量备份的某个时刻到最后某个点的所有二进制日志复制到备份位置。这些二进制日志为增量备份;恢复时,按照下面的解释应用。下次进行完全备份时,还应使用 FLUSH LOGS 或 mysqlhotcopy --flushlogs 回滚二进制日志
二、案例演示
首先通过 mysql 进行登录,为了方便再开启一个窗口,在 MySQL 下可以看到有对应 bin 的生成,这里先要去开启,打开 my.cnf 后可以看到有很多配置,找到 bin-log 的配置,然后指定生成控件,这里默认是 mysql-binlog,还有一个就是开启binlog,指定为 row,配置完后进行重启就可以了:
[root@iZwz9bize6nk8hug8jOvywZ ~]# cd /data/mysql
[root@iZwz9bize6nk8hug8jOvywZ ~]# vi /etc/my.cnf
1、下面演示增量的还原
首先打开 MySQL 数据库,然后打开 school 表,可以看到有四条数据,然后进行备份的操作,备份成功后写入数据:
mysql> show tables;
mysql> select * from school:
| id | name |
|1001 | yizhong |
|1002 | erzhong |
|1003 | sanzhong |
|1006 | liuzhong |
[root@iZwz9bize6nk8hug8jOvywZ ~]# /usr/local/mysql/bin/mysql -uroot -p aliyun school > /data/mysql/backup/aliyun. sql
mysql> insert into school values(1007,’qizhong’);
mysql> select * from school:
| id | name |
|1001 | yizhong |
|1002 | erzhong |
|1003 | sanzhong |
|1006 | liuzhong |
|1007 | qizhong |
此时数据为四条。
那么此时如果一些数据库出现问题,就需要去进行还原,此时进行还原,只能还原为前面版本的四条,没有1007的数据,这时就需要用到 MySQL 下的日志的文件。通过 flush logs 命令进行刷盘后,mysql 下会生成新的 mysql-binlog 日志:
mysql> flush logs;
[root@iZwz9bize6nk8hug8jOvywZ mysql]# ll
…
-rw-r----- 1 mysql mysql 477 Aug 21 01:03 mysql-binlog.000001
-rw-r----- 1 mysql mysql 1881 Aug 21 01:12 mysql-binlog.000002
…
此时再进行查看就会发现日志更新为000003:
[root@iZwz9bize6nk8hug8jOvywZ mysql]# ll
…
-rw-r----- 1 mysql mysql 477 Aug 21 01:03 mysql-binlog.000001
-rw-r----- 1 mysql mysql 1881 Aug 21 01:12 mysql-binlog.000002
-rw-r----- 1 mysql mysql 1881 Aug 21 01:12 mysql-binlog.000003
…
而 flush logs 表示从当前时间点之前的所有操作刷新到000002的 binlog,并且重新开启一个新的 binlog,所以刚才写入的数据1007在 binlog.000002中。接下来就进行还原到之前的四行版本:
[root@iZwz9bize6nk8hug8jOvywZ mysql]# /usr/local/mysql/bin/mysql -uroot -p aliyun < /data/mysql/backup/aliyun_school. sql
[root@iZwz9bize6nk8hug8jOvywZ mysql]# ll
还原后进行查看可以发现没有1007数据,因为1007是做了全量备份后写入的数据,这时只有通过 bin log 进行还原,然后进行查看:
[root@iZwz9bize6nk8hug8jOvywZ mysql]# usr/local/mysql/bin/mysqlbinlog /data/mysql/ mysql-binlog .000002 I /usr/local/mysql/bin/mysq1 -uroot -p aliyun
mysql> select * from school:
| id | name |
|1001 | yizhong |
|1002 | erzhong |
|1003 | sanzhong |
|1006 | liuzhong |
|1007 | qizhong |
可以发现出现1007数据,说明还原成功,这就是 mysql 的 bin-log 增量日志的还原。
2、总结
本节课程主要讲的是备份和还原,备份已经演示过一种是基于物理备份,一种是逻辑备份,物理备份进行的演示是在阿里云主机上面安装本地的数据库,演示了通过物理文件进行备份还原指定的文件,另外一种是逻辑的备份与还原,演示了基于阿里云 ecs 下面和基于 rds for mysql 进行备份与还原,并且讲解了怎么通过rds for mysql 云数据库下面进行可视化的数据操作进行备份与还原,可以进行设置备份的还原周期。第三个讲解了怎样去进行增量的备份还原,增量的备份与还原也是以本地的 MySQL 进行讲解的,在进行增量备份与还原的时候首先要开启日志,然后执行操作的时候要刷新日志,只有这样还原的时候才能知道还原到那个版本。