-
Notifications
You must be signed in to change notification settings - Fork 1.7k
downloads/log/archery.log
# docker查看
docker logs archery -f --tail=10
MySQL审核、执行、备份基于Inception/goInception实现,建议使用SQL审核前先完整阅读对应项目文档,Inception目前已停止维护,遇到问题可先切换到goInception,如仍无法满足需求,可给goInception项目提交issue,作者反馈及时
-
资源组必须关联实例 用户和实例之间目前是通过资源组间接关联
-
资源组必须关联用户 用户仅可以查看关联的资源组以及资源组所关联的实例信息 在系统管理-资源组管理页面,进行组管理以及组关联对象管理 也可在用户管理中编辑用户,增加关联关系
-
必须给实例关联[支持上线]标签 在实例管理中编辑实例,给实例关联标签
系统会默认过滤系统和测试数据库,过滤列表为
information_schema
performance_schema
mysql
test
sys
以下错误均出现在Inception中,切换到goInception和避免所有问题
Must start as begin statement* 或者 TypeError: '<' not supported between instances of 'NoneType' and 'int'
Inception版本不正确导致出现兼容问题,可以按照下列方法修改,或者直接使用推荐版本:https://github.com/hhyo/inception
#修改venv4archer/lib/python3.6/site-packages/MySQLdb/connections.py
def show_warnings(self):
"""Return detailed information about warnings as a
sequence of tuples of (Level, Code, Message). This
is only supported in MySQL-4.1 and up. If your server
is an earlier version, an empty sequence is returned."""
if self._server_version[0] is None: return () #增加一行,解决语法SQL语法错误时弹出的报错信息
if self._server_version < (4,1): return ()
self.query("SHOW WARNINGS")
r = self.store_result()
warnings = r.fetch_row(0)
return warnings
主库配置的连接信息过长,Inception生成备份时需要依靠连接信息创建备份数据库,可使用ip或者cname别名缩短连接名信息
inception用来审核的账号,密码不能包含*,同时用户和端口不能为空
inception检查不支持子查询
inception无法连接备份库
- 相关issue: #129
- 这个问题的根本原因是,如果binlog格式不为ROW,Inception/goInception会尝
set binlog_format=row
, 而这个操作需要super权限,所以会有这个错误提示
从1.4.0版本开始,执行工单改成异步队列操作,由Django-Q模块处理
- 检查日志记录确认是否正常启动了Django-Q服务,日志文件为
downloads/log/archery.log
,启动参考启动django-q - 使用
python manage.py qmonitor
确认qcluster的运行状态 - 检查日志是否有执行报错的信息
- 检查系统管理-其他配置管理-全部后台数据,DJANGO-Q的Failed tasks记录,该表会记录所有失败的task执行信息
- 登录inception,使用
inception get processlist;
确认语句执行状态,部分场景下可能出现备份耗时过长
- 相关issue: #309 可在issue搜索回滚、备份关键字
- 错误信息一般如下所示,或者显示备份数据库不存在,请按照以下checklist逐一排查
- 使用前先完整阅读goInception和Inception项目文档
- 检查系统配置里面inception备份库的相关配置
- 检查inception配置文件inc.cnf里面的inception_remote_相关配置
- 检查inception审核用户和备份用户权限,权限参考
— inception备份用户 GRANT SELECT, INSERT, CREATE ON *.* TO 'inception_bak' — inception审核用户(主库配置用户,如果要使用会话管理需要赋予SUPER权限,如果需要使用OSC,请额外配置权限) GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'inception'
- 检查binlog是否开启,并且格式需要为ROW,binlog_row_image为FULL
- 检查DML的表是否存在主键
- 检查语句是否有影响数据
- 检查备份库是否开启autocommit
- mariadb不会生成备份
- 在线查询仅显示关联了【支持查询】标签的实例,并且用户所在资源组需要关联该实例
- 建议单独创建一个只读账号,来区分上线实例和查询实例
- 检查inception的连接以及inception对查询实例的连接
- 若语句包含mysql关键字,可关闭inception的关键字检测,具体设置参考Inception所支持的参数变量
- 若提示语和inception解析语法树相关,可参考配置项QUERY_CHECK说明
可参考下面的脚本,定时运行即可
DIR="$( cd "$( dirname "$0" )" && pwd )"
cd $DIR
archery_host=127.0.0.1
archery_port=3306
archery_user=
archery_db=archery
archery_pw=
# 获取archery所有slave实例信息
mysql -h$archery_host -P$archery_port -u$archery_user -p$archery_pw $archery_db -N -e "select
instance_name,host,port
from sql_instance where type='slave';">instances.list
# 清空表
mysql -h$archery_host -P$archery_port -u$archery_user -p$archery_pw $archery_db -N -e "truncate table data_masking_columns;"
# 获取脱敏字段信息
cat instances.list|while read instance_name host port
do
mysql -h$host -P$port -u$user -p$pw -N -e "
SELECT CASE
WHEN COLUMN_NAME REGEXP 'phone|mobile|phone_number'
THEN 1
WHEN COLUMN_NAME REGEXP 'id_number|idcard'
THEN 3
WHEN COLUMN_NAME REGEXP 'mail'
THEN 4
WHEN COLUMN_NAME REGEXP 'pwd|password'
THEN 6
END AS rule_type,
1 AS active,
'$instance_id' instance_id,
TABLE_SCHEMA table_schema,
TABLE_NAME table_name,
COLUMN_NAME column_name,
COLUMN_COMMENT column_comment
FROM information_schema.COLUMNS
WHERE COLUMN_NAME REGEXP 'phone|mobile|phone_number|id_number|idcard|mail|pwd|password'
AND TABLE_NAME NOT LIKE 'tmp%';">$instance_name.txt
# 更新表数据
mysql -h$archery_host -P$archery_port -u$archery_user -p$archery_pw $archery_db -N -e "load data local infile '$instance_name.txt' replace into table data_masking_columns fields terminated by '\t' ( rule_type,active,instance_name,table_schema,table_name,column_name,column_comment);"
done
- 检查配置管理是否开启了脱敏配置
- 检查脱敏字段是否命中(名称区分大小写,实例名称和从库名称是否一致)
- 检查脱敏规则的正则表达式是否可以匹配到数据,无法匹配的会返回原结果
- 检查是否关闭了QUERY_CHECK参数
- 检查脚本内的配置,hostname和实例配置表中的内容是否保持一致,比如实例列表配置如下
则脚本内的hostname就应该为
hostname="mysql:3306"
- 检查慢日志收集表mysql_slow_query_review_history是否存在记录,并且hostname_max是否和实例配置的host:port一致
* 报错如下:报错不允许使用json类型(列'xxx')
* 解决方法:在goincepiton的配置文件config.toml 添加enable_json_type=true
通常显示如下
这是因为NGINX的静态资源配置不正确,无法访问样式文件,修改相关配置即可,假如
settings.py配置项为:STATIC_ROOT = os.path.join(BASE_DIR, 'static')
archery部署路径为:/opt/archery
,则location修改为
location /static {
alias /opt/archery/static;
}
进入用户管理页面开启职员状态即可
需要安装 msodbc驱动,具体参加官方文档