# goInception 更新日志

# [v1.2.5] - 2021-10-31

# Fix

  • 修复gh-ost的ghost_initially_drop_socket_file 参数不生效的问题 (#382)
  • 修复索引前缀中文英文不一致的问题 (#380)
  • 修复受影响行数可能溢出的问题 (#375)
  • 修复bit类型默认值设置为NULL时无法审核通过的问题 (#346)
  • 修复pt-osc连接非3306端口时执行失败的问题 (#335)
  • 修复tidb v4.0版本dml无法审核的bug
  • 修复dml回滚语句未忽略计算列的问题(#324)
  • 修复rename table语法一次修改多个表名时,有表名逻辑上不生效的问题 (#327)

# New Features

  • 新增 check_identifier_lower 参数,用于打开表名、列名、索引名小写需求 (#389)
  • 添加masking功能-语法树解析功能升级,返回select涉及的对象(库.表.列) (#355)
  • 添加ghost_bin_dir参数设置来自切换gh-ost模式,独立gh-ost模块,采用binary方式调用以优化ddl高并发且kill gh-ost进程时可能出现的bug (#334)
  • 添加选项max_execution_time设置会话级DML语句的最大执行时间 (#319)
  • 添加enable_any_statement选项以支持所有语法均可执行 (#301)

# Update

  • 优化alter table修改列子句的关键字审核逻辑 (#392)
  • 优化group by子句审核逻辑 (#385)
  • 添加datetime小数秒校验 (#369)
  • 添加视图对union的支持
  • 微调严格模式下的insert列值检查逻辑
  • 优化字符类型长度审核逻辑
  • 优化数据库连接超时时的处理(#306)
  • 完善字符集和排序规则审核逻辑,添加utf8mb4_0900_ai_ci排序规则支持

# [v1.2.4] - 2020-12-19

# Fix

  • 修复MariaDB可能出现dml未备份成功的问题
  • 修复update指定表别名时审核错误的问题 (#249)
  • 修复select列中子查询可能找不到父表列和having子句可能找不到列的问题 (#266)
  • 修复未按正确格式调用时误报error的问题
  • 修复inception set语法指定float类型参数会报错的问题 (#279)
  • 修复未正确解析备份语句时的状态标计 (#286)

# New Features

  • 添加lock_wait_timeout,控制普通SQL 执行时的锁等待超时时间 (#224)
  • 增加 pt-osc 的 sleep 参数,以优化低配 db 执行 ddl 变更时的负载情况 (#260)
  • 添加视图支持 (#238,#262)
  • 添加参数ignore_osc_alter_stmt配置强制忽略osc检查的语法 (#258,#263)
  • 添加CREATE TABLE AS SELECT语法支持 (#246,#264)
  • 添加tidb列属性auto_random支持 (#270)
  • 增加 inc 执行时设置 sql_mode 选项 (#267)
  • insert时添加非法日期审核 (#277)

# Update

  • 优化索引可见性审核对于多版本数据库的支持 (#247)
  • 优化备份功能的binlog解析 (#250)
  • 完善MySQL8.0关键字列表 (#210)
  • 优化默认数据库的配置,指定--db选项后可省略use操作
  • 优化osc进程处理逻辑,添加并发锁处理
  • 完善alter table表分区语法 (#281)
  • 优化当开启ssl时的备份功能处理 (#287)

# [v1.2.3] - 2020-05-22

# Fix

  • fix: 修复pt-osc在获取表锁卡住时无法kill的问题 (#213, #222)

# New Features

  • 添加参数ignore_sighup,默认忽略终端连接断开信号 (#195)
  • 添加osc_lock_wait_timeout参数, 控制pt-osc等待meta lock时间,默认60s (#214, #215)
  • 支持多个自定义索引前缀 (#204)

# Update

  • 完善MySQL5.7关键字列表 (#210)

# [v1.2.2] - 2020-04-04

# Fix

  • 修复max_char_length未指定时误审核的问题
  • 修复索引列长度限制不准确的问题 (#176)
  • 修复inception set命令返回错误的问题,修复lang设置可能不生效的问题
  • 修复在开启事务时,DDL和DML混合执行时可能出错的问题 (#182)

# New Features

  • 添加会话级变量设置 (#157, #166, #167)
  • 添加osc参数osc_max_flow_ctl,以便PXC集群启用pt-osc功能 (#170, #172)
  • 添加审核项columns_must_have_index, 指定列必须添加索引 (#174, #175)

# Update

  • 优化列的字符集和排序规则审核逻辑 (#173)
  • 添加where条件中的值表达式审核,避免无效表达式误更新 (#178)
  • 优化鉴权失败时打印部分须特权执行的内部SQL,以便问题快速定位

# [v1.2.1] - 2020-03-07

# Fix

  • 优化使用pt工具时ALTER语句前后的注释可能导致其解析失败的问题

# New Features

  • 系统变量中添加版本号信息 show variables like 'version' (#164)

# Update

  • 在开启获取真实受影响行数参数时,忽略sql指纹功能(准确性优先)
  • 自动移除每行SQL行首行尾的特殊空格(ASCII码160)
  • 优化bit类型默认值审核,现已支持如b'1'的审核
  • 优化未正确配置数据源时的错误提示,使之更友好
  • 缓存建表时唯一键的设置
  • 完善数值类型的显示宽度审核 (#162)

# [v1.2.0] - 2020-01-18

# Fix

  • 修复change column修改列名并立即引用旧列名时未正确审核的bug (#150)
  • 修复使用year类型错误长度时未正确审核的问题
  • 修复join语法ON子句审核逻辑不正确的问题

# New Features

  • 表名和索引名前缀自定义 (#149)
    • 表名前缀 table_prefix, 默认为空,即不限制
    • 索引前缀 index_prefix ,默认为idx_,和之前版本保持一致,可自定义
    • 唯一索引前缀 uniq_index_prefix ,默认为uniq_,和之前版本保持一致,可自定义

# Update

  • 优化使用pt工具时的alter子句解析
  • 优化gh-ost和备份功能的日志输出,调整为统一格式
  • 优化默认数据库的参数设置,由默认mysql库调整为默认为空,以避免特殊情况下影响主从同步

# [v1.1.6] - 2020-01-02

# Fix

  • 修复timestamp类型开关审核不正确的问题
  • 修复实例未开启autocommit时DML操作未正确提交的bug (#146)

# New Features

  • 添加用户鉴权模块,实现用户管理,安全连接功能 (#132)
  • 添加事务支持(批量执行) (#135)

# Update

  • 优化列类型变更审核 (#121)
  • 实现update set多表时的回滚支持 (#112,#136)
  • 优化区分大小写时的审核规则 (#123)
  • 优化使用pt-osc工具时的alter子句拆分逻辑 (#142)

# [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正式发布