Skip to content
Leo Q edited this page Dec 6, 2019 · 54 revisions
  • 若遇到无法解决的问题,请查看相关日志,保存截图信息,提交Issue,issue中请贴文本日志
  • 请先进行Issue搜索,或许就可以解决你的问题
  • 请使用最新的Releases版本,其他分支都是非稳定版本,不受支持

错误日志地址

logs/archery.log
logs/qcluster.log
logs/soar.log
# docker查看,可能不完整,以日志文件为准
docker logs archery -f --tail=10

SQL上线相关

MySQL审核、执行、备份基于Inception/goInception实现,建议使用SQL审核前先完整阅读对应项目文档,Inception目前已停止维护,遇到问题可先切换到goInception,如仍无法满足需求,可给goInception项目提交issue,作者反馈及时

无法选择资源组、实例

  • 资源组必须关联实例
    用户和实例之间目前是通过资源组间接关联

  • 资源组必须关联用户
    用户仅可以查看关联的资源组以及资源组所关联的实例信息,在系统管理-资源组管理页面,进行组管理以及组关联对象管理 -w1216 也可在用户管理中编辑用户,增加关联关系 -w1198

  • 必须给实例关联[支持上线]标签
    在实例管理中编辑实例,给实例关联标签

  • 资源组属性里一定不能设置 删除: 是 设置为 删除: [是]时,不显示资源组列表,如需显示一定要设置[否]

选择MySQL实例后不显示数据库

系统会默认过滤系统和测试数据库,目前无法配置,过滤列表为

information_schema
performance_schema
mysql
test
sys

审核人无法查看申请人提交的工单

  • 相关issue: #84 #287
  • 审核人只能审核自己所在资源组的数据,所以审核人必须要关联工单的资源组

MySQL检测报错

以下错误均出现在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

The backup dbname is too long

主库配置的连接信息过长,Inception生成备份时需要依靠连接信息创建备份数据库,可使用ip或者cname别名缩短连接名信息

invalid source infomation

inception用来审核的账号,密码不能包含*,同时用户和端口不能为空

Incorrect database name ''**

inception检查不支持子查询

Invalid remote backup information**

inception无法连接备份库

SQL上线执行语句失败,提示需要SUPER权限

  • 相关issue: #129
  • 这个问题的根本原因是,如果binlog格式不为ROW,Inception/goInception会尝set binlog_format=row, 而这个操作需要super权限,所以会有这个错误提示

工单状态一直是执行中

从1.4.0版本开始,执行工单改成异步队列操作,由Django-Q模块处理

  1. 检查日志记录确认是否正常启动了Django-Q服务,日志文件为logs/qcluster.log,启动参考启动django-q
  2. 使用python manage.py qmonitor确认qcluster的运行状态
  3. 检查日志是否有执行报错的信息
  4. 检查系统管理-其他配置管理-全部后台数据,DJANGO-Q的Failed tasks记录,该表会记录所有失败的task执行信息 -w1317
  5. 登录inception,使用inception get processlist;确认语句执行状态,部分场景下可能出现备份耗时过长

回滚报错

  • 相关issue: #309 可在issue搜索回滚、备份关键字
  • 错误信息一般如下所示,或者显示备份数据库不存在,请按照以下checklist逐一排查 -w1338
  1. 使用前先完整阅读goInceptionInception项目文档
  2. 检查系统配置里面inception备份库的相关配置
  3. 检查inception配置文件inc.cnf里面的inception_remote_相关配置
  4. 检查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'
  5. 检查binlog是否开启,并且格式需要为ROW,binlog_row_image为FULL
  6. 检查DML的表是否存在主键
  7. 检查语句是否有影响数据
  8. 检查备份库是否开启autocommit
  9. mariadb不会生成备份

SQL查询相关

申请查询权限选择资源组后不显示实例信息

  • 在线查询仅显示关联了【支持查询】标签的实例,并且用户所在资源组需要关联该实例
  • 建议单独创建一个只读账号,来区分上线实例和查询实例

MySQL查询提示无法校验查询语句权限,请联系管理员

从v1.7.3开始,使用goInception来解析语句,进行表权限校验,在此之前是使用Inception解析,注意检查goInception的连接以及goInception对查询实例的连接

脱敏字段添加过于繁琐

可参考下面的脚本,定时运行即可

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

脱敏查询规则未生效

  1. 检查配置管理是否开启了脱敏配置
  2. 检查脱敏字段是否命中(名称区分大小写,关联实例和查询实例是否一致)
  3. 检查脱敏规则的正则表达式是否可以匹配到数据,无法匹配的会返回原结果
  4. 检查是否关闭了QUERY_CHECK参数,关闭该参数遇到无法解析的脱敏语句会直接跳过

SQL优化相关

慢日志不显示

  1. 检查脚本内的配置,hostname和实例配置表中的内容是否保持一致,比如实例列表配置如下 -w1125 则脚本内的hostname就应该为hostname="mysql:3306"
  2. 检查慢日志收集表mysql_slow_query_review_history是否存在记录,并且hostname_max是否和实例配置的host:port一致

采用goinception后添加json类型字段报错

* 报错如下:报错不允许使用json类型(列'xxx')
* 解决方法:在goincepiton的配置文件config.toml 添加enable_json_type=true

其他

页面样式显示异常

通常显示如下 -w1337 这是因为NGINX的静态资源配置不正确,无法访问样式文件,修改相关配置即可,假如 settings.py配置项为:STATIC_ROOT = os.path.join(BASE_DIR, 'static') archery部署路径为:/opt/archery,则location修改为

location /static {
         alias /opt/archery/static; 
       }

普通用户点击修改密码后无法登录管理页面

进入用户管理页面开启职员状态即可 -w1330

MS SQL server 连接异常

需要安装 msodbc驱动,具体参加官方文档