# goInception 更新日志 ## [v1.1.5] - 2019-12-09 ### Update * 优化对象名大小写审核逻辑 * 优化索引长度审核准确性 * 支持update多表更新语法(暂不支持多表回滚) (#112) * 优化sql语法解析失败时的错误信息 ## [v1.1.4] - 2019-11-21 ### Fix * 修复非空字段insert时对自增列的处理 (#113) * 修复alter table rename语句的回滚SQL生成错误问题 * 修复在开启`real_row_count`选项时,DML转select count时未处理limit的问题 (#119) ### New Features * 添加新参数 `hex_blob` ,以支持回滚时解析二进制类型 (#118) ## [v1.1.3] - 2019-11-13 ### Fix * 修复表内有text,json等[]byte类型字段时最小化生成回滚语句panic的问题 (#105,#107) * 修复`decimal`类型逆向解析时变为科学计数法形式的问题 (#106,#108) * 修复多线程高并发测试时解析调用参数出现线程安全问题的bug (#103) ### New Features * 添加审核选项 `check_implicit_type_conversion` ,审核where条件中的隐式类型转换 (#101) ### Update * 添加TiDB数据库判断(不支持tidb备份) * 添加未指定表前缀时的字段歧义审核 ## [v1.1.2] - 2019-10-30 ### Fix * 修复线程号超出uint32范围时无法备份的问题 ### New Features * 添加设置参数 `enable_minimal_rollback`, 用以开启最小化回滚SQL设置 (#90) * 添加设置参数 `wait_timeout`, 用以设置远端数据库等待超时时间,默认为0,即保持数据库设置 * 添加mysql安全连接参数设置 `--ssl`等, 可配置SSL或CA证书验证 (#92) ## [v1.1.1] - 2019-10-13 ### Fix * 修复TiDB数据库explain出错的问题 (#86) * 修复`insert select`语法在有删除列时列数校验可能不准确的问题 ### New Features * 添加审核选项 `explain_rule` ,用以设置explain获取受影响行数方式 ### Update * 完善`spatial index`审核规则 * 调整update语法均进行逻辑审核 * 添加join语法的ON子句审核 * 优化delete审核规则,有新表时跳过explain审核 * 远程数据库无法连接时,优化返回结果,添加sql内容返回 ## [v1.1.0] - 2019-9-7 ### Fix * 修复add column操作未命中`merge_alter_table`检测的问题 (#79) ### New Features * 添加空间类型语法解析,添加空间索引支持 * 添加新的调用选项`--db`,用以设置默认连接的数据库,默认值为`mysql` ### Update * 支持建库时同时创建表等操作 (#77) * 优化DDL回滚细节,对alter table多条子句调整回滚SQL为逆向 (#76) * 在执行前添加数据库只读状态判断 * 优化索引总长度审核,现在基于目标库`innodb_large_prefix`参数判断 * 审核select语法中的星号列 * 优化多语句拆分解析逻辑,优化分号末尾但未结束的SQL解析 * 完善列定义中的索引校验 ## [v1.0.5] - 2019-8-20 ### Fix * 修复insert values子句不支持default语法的问题 ### New Features * 添加参数`default_charset` 用以设置连接数据库的默认字符集,默认值`utf8mb4` (解决低版本不支持utf8mb4的问题) * 添加pt-osc参数`osc_check_unique_key_change`, 设置pt-osc是否检查唯一索引,默认为`true` ### Update * 优化回滚功能,添加binlog_row_image设置检查,为minimal时自动修改会话级别为full ## [v1.0.4] - 2019-8-5 ### New Features * 添加set names语法支持 (#69) ### Update * 优化主键索引审核信息 (#67) * 完善`update set`多字段审核规则,为set多列and语法添加警告 * 优化gh-ost socket文件名生成规则,避免长度溢出导致创建失败 * 完善外键审核规则 (#68,#70) ## [v1.0.3] - 2019-7-29 ### Fix * `[gh-ost]` 修复gh-ost在异常时没有断开binlog dump连接的问题 * `[gh-ost]` 修复gh-ost当添加datetime列且默认值current_timestamp时,增量数据因时区导致数据错误的问题(timestamp列是正常的) ### New Features * 添加参数 `enable_change_column` ,设置是否支持change column语法 * 添加调用选项 `real_row_count`,设置是否通过`count(*)`获取真正受影响行数.默认值`false` ### Update * 添加pt-osc执行change column的审核,禁止多条change column操作,以免数据丢失 (pt-osc bug) ## [v1.0.2] - 2019-7-26 ### Fix * 修复 `alter table` 命令没有其他选项时能正常通过的bug (#59) * 修复跨库操作时可能出现备份记录写错备份库的问题 ### New Features * 添加参数 `max_ddl_affect_rows`,设置DDL允许的最大受影响行数,默认为`0`,即不限制 * 添加参数 `check_float_double` ,为 true 时,警告将 float/double 转成 decimal 数据类型。 默认为 false (#62) * 添加参数 `check_identifier_upper` ,限制表名、列名、索引名等必须为大写,默认为`false` (#63) ### Update * 优化自定义审核级别实现,移除参数 `enable_level`,现在自定义审核级别和审核开关设置合并 (#52) * 升级parser语法解析包,优化列排序规则和分区表语法支持 (#50) * 优化gh-ost的server_id设置自动变化,避免同一实例重复 ## [v1.0.1] - 2019-7-20 ### Fix * 修复 `must_have_columns` 参数列类型的大小写兼容问题 ### New Features * 添加 `alter table rename index` 语法支持 * 添加参数 `enable_zero_date`,设置是否支持时间为0值,关闭时强制报错。默认值为 `true` (#55) * 添加参数 `enable_timestamp_type` ,设置是否允许 `timestamp` 类型字段 (#57) * 添加 `mysql 5.5` 版本审核支持 (#54) ### Update * 优化modify column列信息逻辑保存 * 优化列属性的键定义逻辑保存 ## [v1.0] - 2019-7-15 ### Fix * 修复密码中包含特殊字符时pt-osc执行出错的问题 ### New Features * 添加审核结果级别自定义功能 (#52) ### Update * 添加delete/update自连接审核支持 (#51) * 优化binlog回滚时指定的server_id自动变化,避免同一实例重复 ## [v1.0-rc4] - 2019-7-9 ### Fix * 修复pt-osc可能出现执行成功时但进度不到100%的问题 (#48) ### New Features * 增加enable_set_engine、support_engine参数,控制是否允许指定存储引擎以及支持的存储引擎类型 (#47) ### Update * 优化osc的进程列表,同一会话的osc进程信息延后清除(在会话执行返回后) (#48) * 优化备份库库名生成逻辑,库名过长时自动截断 (#49) * 优化delete和update别名审核 (#51) ## [v1.0-rc3] - 2019-7-2 ### Fix * 修复使用osc做DDL变更时可能不支持的问题(如`alter table t engine='innodb'`) ### New Features * 添加sleep执行等待功能,降低对线上数据库的影响 (#46) * 调用选项 `sleep` ,执行 `sleep_rows` 条SQL后休眠多少毫秒,以降低对线上数据库的影响 * 调用选项 `sleep_rows` ,执行多少条SQL后休眠一次 * 添加参数 `max_allowed_packet` 以支持更长的SQL文本 * 添加参数 `skip_sqls` 以兼容不同客户端的默认sql ### Update * 调整备份记录表sql_statement字段类型为mediumtext,并自动兼容旧版本的text类型 * 兼容mysqlclient客户端 ## [v1.0-rc2] - 2019-6-21 ### Fix * 优化回滚相关表结构,字符集调整为utf8mb4 (`历史表结构需要手动调整`) ### Update * 优化审核规则,审核子查询、函数等各种表达式 (#44) * 优化gh-ost默认生成的socket文件名格式 * 优化日志输出,添加线程号显示 * binlog解析时添加mariadb判断 ## [v1.0-rc1] - 2019-6-12 ### New Features * 添加split分隔功能 (#42) ## [v0.9-beta] - 2019-6-4 ### New Features * 添加统计功能,可通过参数 `enable_sql_statistic` 启用 (#38) * 添加参数 `check_column_position_change` ,可控制是否检查列位置/顺序变更 (#40, #41) ### Update * 优化使用阿里云RDS和gh-ost时的逻辑,自动设置 `assume-master-host` 参数 (#39) ## [v0.8.3-beta] - 2019-5-30 ### Fix * 修复gh-ost的initially-drop-old-table和initially-drop-ghost-table参数支持 * 修复设置osc_min_table_size大于0后无法正常启用osc的bug ### Update * 兼容语法inception get processlist * docker镜像内置pt-osc包(版本3.0.13) ## [v0.8.2-beta] - 2019-5-27 ### Fix * fix: 修复binlog解析时对unsigned列溢出值的处理 * fix: 修复gh-ost执行语句有反引号时报语法错误的bug (#33) * fix: 修复kill DDL操作时,返回执行和备份成功的bug,现在会提示执行结果未知了 (#34) ## [v0.8.1-beta] - 2019-5-24 ### Fix * 修复新建表后,使用大小写不一致的表名时返回表不存在bug ### New Features * 添加general_log参数,用以记录全量日志 ### Update * 优化insert select新表的审核规则,现在select新表时也可以审核了 ## [v0.8-beta] - 2019-5-22 ### Fix * 修复当开启sql指纹功能时,可能出现把警告误标记为错误的bug ### Update * 优化子查询审核规则,递归审核所有子查询 * 审核group by语法和聚合函数 ## [v0.7.5-beta] - 2019-5-17 ### Fix * 修复执行阶段kill逻辑,避免kill后备份也中止 ### New Features * 添加select语法支持 * 添加alter table的ALGORITHM,LOCK,FORCE语法支持 ### Update * 优化update子查询审核 ## [v0.7.4-beta] - 2019-5-12 ### New Features * 添加alter table表选项语法支持 (#30) * 重新设计kill操作支持,支持远端数据库kill和goInception kill命令 (#10) ## [v0.7.3-beta] - 2019-5-10 ### Fix * 修复在开启备份时,执行错误时偶尔出现的误标记执行/备份成功bug ### New Features * 添加`check_column_type_change`参数,设置是否开启字段类型变更审核,默认`开启` (#27) ### Update * 实现insert select * 列数审核 ## [v0.7.2-beta] - 2019-5-7 ### New Features * 添加`enable_json_type`参数,设置是否允许json类型字段 (#26) ### Update * 实现基于系统变量explicit_defaults_for_timestamp的审核规则 * 优化osc解析,转义密码和alter语句中的特殊字符 ## [v0.7.1-beta] - 2019-5-4 ### Update * 优化json类型字段处理逻辑,不再检查其默认值和NOT NULL约束 (#7, #22) * 优化must_have_columns参数值解析 * 优化insert select审核逻辑 ### Fix * 修复和完善add column(...)语法支持 * 修复开启osc时,alter语句有多余空格时执行失败的bug ### New Features * 添加`enable_null_index_name`参数,允许不指定索引名 (#25) * 添加语法树打印功能(beta) (#21) ## [v0.7-beta] - 2019-4-26 ### Update * 优化update关联新建表时的审核,现在update时可以关联新建表了 * 优化insert 新建 select语法审核,现在可以获取预估受影响行数了 * 审核阶段自动忽略警告,优化审核逻辑 * 优化`check_column_default_value`的审核逻辑,默认值审核时会跳过主键 * 备份阶段sql过长时会自动截断(比如insert values很多行),`返回警告但不影响执行和备份操作` ### Fix * 修复开启`enable_pk_columns_only_int`选项时列类型审核错误的问题 ### New Features * 添加`enable_set_collation`参数,设置是否允许指定表和数据库的排序规则 * 添加`support_collation`参数,设置支持的排序规则,多个时以逗号分隔 ## [v0.6.4-beta] - 2019-4-23 ### Fix * 修复mysql 5.6和mariadb无法获取受影响行数的问题 ## [v0.6.3-beta] - 2019-4-22 ### New Features * 添加`max_insert_rows`参数,设置insert values允许的最大行数。 * 添加`must_have_columns`参数,用以指定建表时必须创建的列。多个列时以逗号分隔(`格式: 列名 [列类型,可选]`) ## [v0.6.2-beta] - 2019-4-18 ### Update * 添加不支持的语法警告(create table as和create table select) * 实现alter多子句时的表结构变化支持,如drop column后跟add column ### Fix * 修复explain返回null列时报错的问题 * 修复索引的唯一标识设置错误问题 ## [v0.6.1-beta] - 2019-4-9 ### Update * 添加远端数据库断开重连机制,优化线程号和master status查询速度 * 优化远端数据库访问操作 * 优化sql内容解析,移除多余分号和空格 ### Fix * 修复跨库update时无法找到列的问题 * 修复osc子句有双引号时执行错误的问题 ### New Features * 添加sql指纹功能 dml语句相似时,可以根据相同的指纹ID复用explain结果,以减少远端数据库explain操作,并提高审核速度 - 可以通过```inception set enable_fingerprint=1;```或配置文件开启全局配置 - 也可以通过调用选项```--fingerprint=1;```开启单个配置 - 两种配置取并集,即开启任一配置,则启用sql指纹功能,默认关闭。 ## [v0.6-beta] - 2019-4-3 ### Update * 备份操作性能优化,备份信息改为批量写入 * 添加备份库连接超时检查 * explain函数性能优化 * 优化部分函数未指定架构名时的默认处理 * 优化默认值检查,添加计算列支持 (#12, #13, #14) * 优化时间格式和范围检查,根据数据库sql_mode校验零值日期 * 升级到go 1.12 ### Fix * 修复index name校验逻辑,其可与列名一致 * 修复timestamp默认值校验不准确的问题 ### New Features * 添加kill功能支持,在审核和执行时可以kill,备份阶段无法kill (#10) * 添加`check_timestamp_count`参数,可配置是否检查current_timestamp数量 (#11, #15) ## [v0.5.3-beta] - 2019-3-25 ### Update * 变更列名时使用逻辑校验,避免explain update失败 * 添加union子句校验 * 添加表名别名重复性校验 ### Fix * 修复update set子句指定表别名时校验问题 * 修复自增列校验问题 * 修复default value为表达式时的校验问题 ## [v0.5.2-beta] - 2019-3-17 ### Update * 优化主键NULL列审核规则(审核`DEFAULT NULL`) * 优化索引总长度校验,根据列字符集判断字节数长度 * 优化DDL备份对默认值的处理 ## [v0.5.1-beta] - 2019-3-14 ### Update * 优化option解析规则,密码兼容特殊字符 * 优化语法解析失败时返回的sql语句 * 添加中文的异常和警告信息 * 添加新的参数 - lang 设置返回的异常信息语言,可选值 `en-US`,`zh-CN`,默认`en-US` ### Fix * 修复mariadb备份警告信息重复的问题 ## [v0.5-beta] - 2019-3-10 ### Update * 兼容mariadb v10版本的备份兼容(高并发时回滚语句可能有误,须注意检查) * 更新pt-osc部分参数名,使其与inception保持一致 - osc_critical_running -> osc_critical_thread_running - osc_critical_connected -> osc_critical_thread_connected - osc_max_running -> osc_max_thread_running - osc_max_connected -> osc_max_thread_connected * 隐藏gh-osc部分未使用参数 * 添加是否允许删除数据库参数`enable_drop_database` * 优化系统变量variables显示和设置 * 调整部分参数默认值 - ghost_ok_to_drop_table `true` - ghost_skip_foreign_key_checks `true` - osc_chunk_size `1000` ### Fix * 修复json列校验异常问题 (#7) ## [v0.4.1-beta] - 2019-3-6 ### Update * 兼容mariadb数据库(v5.5.60) - 添加mariadb的binlog解析支持(测试版本**v5.5.60**,v10版本由于binlog格式改变,暂无法解析thread_id) - 优化备份失败时的返回信息 ## [v0.4-beta] - 2019-3-5 ### New Features * 添加gh-ost工具支持 - 无需安装gh-ost,功能内置(v1.0.48) - 进程列表 ```inception get osc processlist``` - 指定进程信息 ```inception get osc_percent 'sqlsha1'``` - 进程终止 ```inception stop alter 'sqlsha1'``` (同义词```inception kill osc 'sqlsha1'```) - 进程暂停 ```inception pause alter 'sqlsha1'``` (同义词```inception pause osc 'sqlsha1'```) - 进程恢复 ```inception resume alter 'sqlsha1'``` (同义词```inception resume osc 'sqlsha1'```) - 兼容gh-ost参数 ```inception show variables like 'ghost%'``` ## [v0.3-beta] - 2019-2-13 ### New Features * 添加pt-osc工具支持 - ```inception get osc processlist``` 查看osc进程列表 - ```inception get osc_percent 'sqlsha1'``` 查看指定的osc进程 - ```inception stop alter 'sqlsha1'``` (同义词```inception kill osc 'sqlsha1'```)中止指定的osc进程 ## [v0.2-beta] - 2019-1-31 ### Optimizer * 优化二进制构建方式,压缩安装包大小 * 移除vendor依赖,优化GO111MODULE使用方式 * 跳过权限校验,以避免登陆goInception失败 * 移除root身份启动校验,以避免windows无法启动 * 优化inception set变量时的类型校验 ## [v0.1-beta] - 2019-1-25 #### goInception正式发布