因为线上机器有很多,而备份机器只有一台,所以为了防止在备份数据库实例中存在库名冲突的问题,备份机器的库名是将线上机器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线上库表结构与备份库表结构的对应关系如下图: 3.5 通过Python脚本验证
测试环境
类别 ServerIP Port线上数据库 XXX.XXX.XXX.9 3306
Inception XXX.XXX.XXX.8 6669
备份数据库 XXX.XXX.XXX.9 3307
测试python脚本