ITPub博客

首页 > 数据库 > MySQL > MySQL审核工具Yearnng(基于inception)

MySQL审核工具Yearnng(基于inception)

原创 MySQL 作者:czxin788 时间:2018-05-08 14:37:57 0 删除 编辑
MySQL审核工具Yearnng

说明:Yearnng是基于去哪网inception做的图形化,使用的技术为python+django + vue.js,本文主要是我个人的使用总结。

一、下载地址:https://github.com/cookieY/Yearning,安装方法见官方文档,这里不再赘述。

二、inception是集审核、执行、回滚于一体的自动化运维系统,它是根据mysql代码修改过了的。它的工作模式和MySQL完全相同,可以直接用Mysql客户端来连接,而不需要验证权限。对于要审核或者执行语句所设计的线上MYSQL服务器来说,它就是一个客户端。而待审核的sql语句是发往线上mysql来审核的。

三、inception的DML回滚语句:inception在执行DML时还能提供生成回滚语句的功能,对应的操作记录及回滚语句会被存储在备份机器上。执行DML所生成的回滚语句是通过binlog转换而来的(所以要审核的mysql数据库要开启binlog功能),具有精准、可控及快速的特点。对于DDL的执行,也会生成相应的回滚语句,不过只涉及语句级的回滚,而不关心数据。另外,只有表上有主键时,才能生成回滚语句,否则不会生成回滚语句。

四、inception支持pt-online-schema-chage的功能,可以查看详细的执行进度。


五、对被审核数据库的配置需求:
1、线上数据库必须开启log-bin参数,binlog_row_image参数必须设置为full,不然不会备份及生成回滚语句,因为inception的回滚语句是通过解析binlog来做的,需要拿到binlog记录的完整信息;
2、对于设计的表要求是需要有主键,如果没有主键,则inception会选择不生成回滚语句,原因很明显,就是对应的回滚语句的where条件没法指定,指定一个全表的列没有意义,所以选择不生成
3、参数binlog_format必须设置为mixed或row模式
4、参数server_id必须要设置为非0非1;
5、线上数据库权限(指的是被审计的mysql数据库):
GRANT process,SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'incep'@'172.16.22.15' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
GRANT select,insert,update,delete,create,drop,process,alter,trigger  ON `test`.* TO 'incep'@'172.16.22.15'   
6、需要额外注意,不能讲DML语句及DDL语句放在一起执行,否则会由于表结构的变化导致备份解析binlog时出现不可预知的错误。

六、inception的备份回滚
inception默认是开启备份功能的,不过可以通过inception选项--disable-remote-backup禁用,

七、inception的参数变量
/var/incetion/bin/inception --defaults-file=inc.cnf或者/var/inception/bin/inception --port=6669
登录成功后,可以通过mysql客户端看一下:
mysql -uroot -h127.0.0.1 -P6669
登录上之后,inception get variables可以输出所有变量,这些变量可以在inception的配置文件/opt/Yearning/install/inception/bin/inc.cnf里面设置。
inception不支持show variables like '%fd%'那样的模糊匹配,只支持精确匹配。inception get variables 'time_format'; 
可以通过inception set variable_name=value;来设置变量名的值。
每个参数的含义如下,所有以inception开头的参数,都是专门为inception加的,而其他大都是mysql原生的,还有一个是以inception_osc开头的,这十几个参数主要是用来控制inception在使用osc弓箭执行alter表操作时使用的。




inception osc的选项:




前面说到osc可查看执行进度,而进度在99%到100%之间做的事情包括清除环境的操作,所以时间可能比之前1%都要长。
终止osc的执行:在执行osc的过程中,有可能遇到的问题是,执行了一部分,突然发现线上造成DML等待现象(也就是当DDL和DML操作、慢查询操作的是同一个表时,就会出现DDL操作需要等待这个大的DML操作、慢查询,只有这个DML操作、慢查询执行完,DDL才能执行的现象,就叫做DML等待(元数据锁))。发生DML等待时,其他所有的对该表的操作都被卡住,等待事件为Waiting for table metadata lock。
这种情况下,一般的处理方式是,先退出osc执行,压力小的时候多试几次,才可以继续执行下去,所以inception支持osc执行的中止操作。
注意:由于inceotion中止osc后没有删除目标库中pt产生的触发器。所以中止后需要自己手动删除目标数据库有关pt的触发器,触发器名称以pt_osc_+表名+(ins、upd、del)命名。

查看所有osc执行信息:inception get osc processlist;
查看osc执行进度:inception get osc_percent '当前执行的sql语句'
中止osc的执行:inception stop alter '当前执行的sql语句'






来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28916011/viewspace-2154174/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-06-03

  • 博文量
    233
  • 访问量
    858427