# 备份功能

# 备份功能说明

goInception自带备份功能,首先服务启动时配置config.toml(放在 [inc] 段)

参数 默认值 可选范围 说明
backup_host "" string 备份数据库IP地址
backup_port 0 int 备份数据库端口
backup_user "" string 备份数据库用户名
backup_password "" string 备份数据库密码
backup_tls v1.4.0 "" string 备份数据库ssl认证方式,可选值请参考 (https://github.com/go-sql-driver/mysql/issues/899#issuecomment-443493840)

并且在执行sql时,添加 --backup=true--backup=1 选项

# 备份功能权限要求

  • 远程数据库要求具有:REPLICATION CLIENT,REPLICATION SLAVE, 以进行binlog解析
  • 备份数据库要求具有:CREATE,INSERT,建议给所有权限, 便于生成备份

# 示例

/*--user=root;--password=root;--host=127.0.0.1;--port=3306;--execute=1;--backup=1;*/
inception_magic_start;
use test;
create table t1(id int primary key);
inception_magic_commit;

# 备份功能写入规则

  • 在备份服务器上,备份库的命名格式为:IP_PORT_库名,例如127_0_0_1_3306_test
  • 在备份库上创建备份信息表$_$Inception_backup_information$_$,用来保存该库的执行信息和回滚语句信息
字段名 类型 说明
opid_time varchar(50) 执行操作ID,格式为时间戳_线程号_执行序号
start_binlog_file varchar(512) 起始binlog文件
start_binlog_pos int(11) 起始binlog位置
end_binlog_file varchar(512) 终止binlog文件
end_binlog_pos int(11) 终止binlog位置
sql_statement text 执行SQL
host varchar(64) 执行IP地址
dbname varchar(64) 执行库名
tablename varchar(64) 执行表名
port int(11) 执行端口
time timestamp 执行时间
type varchar(20) 操作类型
  • 在备份库有和操作表相同的表名,其表结构统一为:
字段名 类型 说明
id bigint 自增主键
rollback_statement mediumtext 回滚语句
opid_time varchar(50) 关联执行操作ID

# 备份功能详细步骤

  1. 配置备份数据库,并在执行SQL时开启备份功能
  2. 在执行SQL前记录binlog位置和线程号(逐条执行逐条记录)
  3. 执行SQL
  4. 在执行SQL后记录binlog位置和线程号
  5. 开始备份,解析远程服务器binlog
  6. 在备份服务器创建备份库
  7. 创建备份信息表,写入执行信息和binlog位置信息
  8. 创建备份表,
  9. 逐步解析binlog,并生成回滚语句,写入备份表