MySQL数据库Inception工具学习与测试案例(4)

因为线上机器有很多,而备份机器只有一台,所以为了防止在备份数据库实例中存在库名冲突的问题,备份机器的库名是将线上机器IP地址的点换成下划线,再加上端口号及库名。

例如:

169_169_167_167_3306_testDB.

3.3 备份库上的表

主要有两类,一种针对线上每一个表生产一个备份表,即与线上的表是一一对应的,表名相同,但是表结构不一样。备份表主要用来存储所有对表修改的回滚语句。

主要有以下3列:

列名   说明  
id   标识列  
rollback_statement  

当某一行被修改后,生成的对应的回滚语句。因为Binlog必须为Row模式,所以,不管是什么语句,产生的回滚语句都是针对被修改的行记录的。

如果一条语句的执行,影响了多行,那么这里就会有多条回滚语句。

 

opid_time

 

执行SQL语句时获取的一个序列号。序列号由三部分组成:timestamp(int值,是语句执行的时间点)、线上服务器执行时所产生的thread_id及

当前这条语句在所有被执行语句块中的一个序号。序列号在指定的备库中是唯一的。针对同一条语句影响多行的情况、在产生的多行回滚语句中,

该列的值是相同的。

 

还有一类表,其实这个表每个库中只有一个,$_$Inception_backup_information$_$。该表主要用来记录所有对当前库的操作,它是为该库中所有表服务的,对线上这个库的所有的表的操作,都会被存储在这里面。

参数   说明  
opid_time  

该列与上面备份表中的列opid_time是一一对应的,因为这个表中的每一行对应的是在线上执行的实际的一条SQL语句。

opid_time从各个备份表中查找这条语句对应的回滚语句,是一对多的关系。

 
start_binlog_file  

表示执行这条语句前Binlog所在的位置的文件名。这个值是通过 show master status 获取的,在数据库并发比较高的情况下,

这个值不一定准确。这个值只能是这条语句产生Binlog前面的某个位置。同理。下面三个位置信息也是一样。

 
start_binlog_pos   该列与上面的列对应,表示的是上面指定文件的位置信息。  
end_binlog_file   该列表示的是执行当前语句之后,Binlog所在的文件名。  
end_binlog_pos   该列与上面的列对应,表示执行完成后,Binlog在文件end_binlog_file中的偏移位置。  
sql_statement   该列存储的是当前这个被执行的SQL语句。  
host   表示在线上的哪个数据库实例上执行了该语句。  
dbname   表示执行当前语句时所处的环境变量,指的是数据库名。  
tablename   表示当前语句影响的表的表名,通过这个名字对应到备份表名。  
port   与host对应,表示执行时数据库的端口号。  
time   表示当前语句的执行时间  
type   表示操作类型,现在只支持INSERT、UPDATE、DDELETE、CREATEDB、CREATETABLE、ALTERTABLE、DROPTABLE等类型。  
3.4线上库表结构与备份库表结构的对应关系如下图:

MySQL数据库Inception工具学习与测试案例

 3.5 通过Python脚本验证

测试环境

类别   ServerIP   Port  
线上数据库   XXX.XXX.XXX.9   3306  
Inception   XXX.XXX.XXX.8   6669  
备份数据库   XXX.XXX.XXX.9   3307  

测试python脚本

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

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