跳转至

FAQ

  • 请先进行Issue搜索,或许就可以解决你的问题
  • 请使用最新的Releases版本,其他分支都是非稳定版本,不受支持

错误日志地址

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

SQL上线相关

MySQL审核、执行、备份基goInception实现,建议使用SQL审核前先完整阅读对应项目文档,如仍无法满足需求,可给goInception项目提交issue,作者反馈及时 - goInception使用规范及说明文档

无法选择资源组、实例

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

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

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

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

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

information_schema
performance_schema
mysql
test
sys

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

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

执行提示需要SUPER权限

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

执行提示无法获取master binlog信息

Execute: Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation (sql: SHOW MASTER STATUS;). Execute: 无法获取master binlog信息
原因是archery上去连接每个实例的账户需要同时授予Replication Client和Replication Slave权限,缺一不可,或者给Super权限。

工单状态一直是排队中

  1. 检查日志记录确认是否正常启动了django_q服务,日志文件为logs/qcluster.log
  2. 访问debug接口查看系统django_q运行情况 debug
  3. 使用python manage.py qmonitor确认qcluster的运行状态
  4. 确认是否存在任务回调失败的记录:django_q/failure
  5. 检查archery数据库中max_allowed_packet参数,如果工单内容过大,可能导致回调写入失败

查看回滚语句报错

相关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查询相关

相关issue: #145

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

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

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

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

脱敏字段添加过于繁琐

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

# 脱敏规则
# (1, '手机号'), (2, '证件号码'), (3, '银行卡'), (4, '邮箱'), (5, '金额'), (6, '其他')
masking_rule_phone='phone|mobile'
masking_rule_idno='id_number|idcard'
masking_rule_bankcardno='bank_no'
masking_rule_mail='mail|email'
masking_rule_amount='pay_money|amount'
masking_rule_others='pwd|password|user_pass'
masking_rules="$masking_rule_phone|$masking_rule_idno|$masking_rule_bankcardno|$masking_rule_mail|$masking_rule_amount|$masking_rule_others";

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 
id,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;"

# 临时账号密码(因实例账号&密码为加密,写死使用)
# 此方式只适用单个实例或多个实例账号密码一致
user=
pw=

# 获取脱敏字段信息
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 '$masking_rule_phone'
           THEN 1
         WHEN COLUMN_NAME REGEXP '$masking_rule_idno'
           THEN 2
         WHEN COLUMN_NAME REGEXP '$masking_rule_bankcardno'
           THEN 3
         WHEN COLUMN_NAME REGEXP '$masking_rule_mail'
           THEN 4
         WHEN COLUMN_NAME REGEXP '$masking_rule_amount'
           THEN 5
         WHEN COLUMN_NAME REGEXP '$masking_rule_others'
           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 '$masking_rules'
AND TABLE_SCHEMA != 'performance_schema'
AND TABLE_SCHEMA != 'information_schema';">$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_id,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一致

其他

页面样式显示异常

通常显示如下 -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驱动,具体参加官方文档

配置SSH隧道后无法连接

需要在supervisord.conf 文件中 ,修改并发方式为sync模式,如下所示:

command=gunicorn -w 4 -k sync-b 127.0.0.1:8000 --timeout 600 archery.wsgi:application

docker部署的话,执行如下命令即可,issue详情

docker exec -it archery bash
sed -i 's#return "127.0.0.1", self.server.local_bind_port#return "archery", self.server.local_bind_port#g' /opt/archery/sql/utils/ssh_tunnel.py
exit 
docker restart archery 

用户丢失2FA凭证无法登陆系统,需要重置该用户的2FA配置

管理员可以登录的情况: 管理员登陆管理后台,进入SQL→2FA配置,删除用户对应的那条2FA配置信息即可

管理员无法登陆的情况:

python3 manage.py shell
from sql.models import TwoFactorAuthConfig
TwoFactorAuthConfig.objects.filter(user__username='admin').delete()

前端添加负载均衡,配置域名后,无法使用

  1. 检查日志
    docker logs -f --tail=10 archery
    
  2. 查看是否发现如下错误:
    django.core.exceptions.DisallowedHost: Invalid HTTP_HOST header: 'archery_xxx.xxxang.com:9123'. The domain name provided is not valid according to RFC 1034/1035.
    
  3. 若有这个错误,则说明是域名不合规,上述示例是Django域名不支持下划线,将下划线(_)替换成横杠(-)后就好了,具体请参考 https://github.com/django/django/blob/0b8a0296bfd30748f08021834e95cdae241686e8/django/http/request.py#L28
Back to top