#### 备份功能说明

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

参数  |  默认值  |  可选范围 | 说明
------------ | ------------- | ------------ | ------------
backup_host   |  ""    |   string     |   备份数据库IP地址
backup_port   |  0    |   int     |     备份数据库端口
backup_user   |  ""    |   string     |   备份数据库用户名
backup_password   |  ""    |   string    |   备份数据库密码

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

```sql
/*--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,并生成回滚语句,写入备份表