一,首先一直有个疑问,就是mysql的binlog日志是在数据更新之后执行flush logs 存入到新的binlog日志当中呢还是说存入到当前所在的binlog日志内
首先这是目前最新的日志文件
之后创建了新的一个库
mysql> create database test1;
Query OK, 1 row affected (0.00 sec)
之后又刷新了mysql的binlog日志
之后创建了新的binlog日志
接下来检测一下这个创建库的内容被记录在了那个binlog日志里面就可以得出顺序
首先我们先查看mysql-bin.000104
mysqlbinlog mysql-bin.000104
其实不接着往下看已经得出了结论,数据库的日志文件是直接存储到目前最新的库里面,而不是刷新之后存入到新的里面
mysqlbinlog mysql-bin.000105
二,接下来开始做一个mysql 完整备份和增量备份的过程
实验过程
创建一个新的库test
之后往test库里写一个表student 一共插入五条数据 列名分别为 id and name
sql-- 使用数据库 USE test; -- 创建表 CREATE TABLE IF NOT EXISTS student ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 插入数据 INSERT INTO student (name) VALUES ('张三'); INSERT INTO student (name) VALUES ('李四'); INSERT INTO student (name) VALUES ('王五'); INSERT INTO student (name) VALUES ('赵六'); INSERT INTO student (name) VALUES ('孙七');
插入成功之后退出数据库首先做一个完整备份
使用mysqldump命令
之后我们在进入数据库,先刷新一个新的binlog日志,之后紧接着插入多条新的数据
之后我们删除掉这个库
drop database test
紧接着来验证完整备份
我们先创建test这个库
之后退出数据库去找之前创建的完整备份backup.sql
使用这个命令恢复,-p 后面跟的是库名字
mysql -u root -p test < backup.sql
之后我们登录数据库select查看一下表内容
可以看到最初我们创建的哪些数据都在里面,接下来就只需要去利用之前创建的mysqlbinlog去恢复我们之后的哪些数据就行,以此来完成增量备份的恢复
可以使用这个mysqlbinlog来查看内容
注意里面的at 表示位置也成为了post位置
我们使用
mysqlbinlog -uroot -p mysql-bin.000106 --start-position=4 --stop-position=980 -r /111.sql
命令解释就是 一般情况下 -p后面跟的是数据库的名字,然后 --start后面跟你想要恢复数据在
binlog日志内开始的位置,stop就是结束的 -r 指定sql文件保存的位置
只有我们来恢复他
可以看到恢复成功