Archery-SQL审核查询平台

news2024/11/16 0:42:44

Archery-SQL审核查询平台

文章目录

  • Archery-SQL审核查询平台
    • 一、功能列表介绍
      • 1.1、SQL审核
          • MySQL实例
          • 非MySQL实例
          • 审核执行分离
          • SQL工单自动审批、高危语句驳回
          • 快速上线其他实例
          • 定时执行
      • 1.2、SQL查询
          • 多类型数据库支持
          • 授权管理
          • 页面体验
      • 1.3、SQL优化
          • 慢日志管理
          • SQL语句优化
      • 1.4、实例管理
          • 会话管理
          • 数据库管理
          • 账号管理
          • 参数配置
      • 1.5、工具插件
          • PTArchiver
          • Binlog2SQL
          • My2SQL
          • SchemaSync
      • 1.6、资源(项目)组
      • 1.7、权限(角色)组
      • 1.8、工作流
      • 1.9、配置管理
      • 1.10、消息通知
      • 1.11、可视化
      • 1.12、功能导图
    • 二、部署
      • 2.1、部署
        • 2.1.1、安装docker版本18.09.9
        • 2.1.2、安装docker-compose版本1.29.2
        • 2.1.3、安装mysql
        • 2.1.4、安装archery
      • 2.2、系统配置
    • 三、测试
      • 3.1、增加资源组
      • 3.2、新建实例
      • 3.3、修改权限组
      • 3.4、配置审批流程
      • 3.5、修改新用户注册配置
      • 3.6、创建各类型测试用户
      • 3.7、创建上线sql/回滚
      • 3.8、申请查询权限
      • 3.9、申请归档权限
      • 3.10、数据脱敏
        • 脱敏规则配置
    • 四、升级
      • 4.1、执行数据库变更脚本(请注意数据备份)
      • 4.2、更新服务
    • 五、踩坑记录
      • 5.1.执行上线sql时报错 lookup mysql on 127.0.0.11:53: no such host
      • 5.2、执行上线SQL报错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定位于SQL审核查询平台,旨在提升DBA的工作效率,支持多种数据库的SQL上线和查询,同时支持丰富的MySQL运维功能,所有功能都兼容手机端操作。

在这里插入图片描述

一、功能列表介绍

数据库查询审核执行备份数据字典慢日志会话管理账号管理参数管理数据归档
MySQL
MsSQL×××××××
Redis××××××××
PgSQL××××××××
Oracle×××××
MongoDB×××××××
Phoenix××××××××
ODPS×××××××××
ClickHouse×××××××

1.1、SQL审核

MySQL实例

基于Inception/goInception实现,集成审核、执行、备份

非MySQL实例

支持提交和执行工单,依托工作流实现流程化管理

审核执行分离

审批和执行可以分配给不同的用户进行操作

SQL工单自动审批、高危语句驳回
  • 支持正则判断工单是否需要人工审批,开启自动审批后,不在正则范围内的SQL语句无需审批,系统自动审核
  • 自主控制SQL是否自动驳回,可自主配置对inception审核驳回的场景,支持警告驳回和异常驳回
快速上线其他实例

在工单详情可快速提交相同SQL内容到其他实例,可适用于test>beta>ga等多套环境维护的需求

定时执行

工单审核通过后可以选择定时执行或者立即执行

1.2、SQL查询

多类型数据库支持
  • MySQL 表级授权、脱敏查询
  • MsSQL 库级授权、脱敏查询
  • Redis 库级授权
  • PostgreSQL 库级授权、脱敏查询
  • Oracle 库级授权、脱敏查询
  • MongoDB 库级授权
  • Phoenix 库级授权
  • ODPS 库级授权
  • ClickHouse 库级授权
授权管理
  • 工作流控制SQL查询授权,支持库表级别的权限限制,以及授权时间,查询结果集的限制
  • 支持部分语句的动态查询脱敏(有限的功能)
  • 支持前台管理用户权限,对用户权限进行修改和维护
  • 支持查询导出、查询日志审计
页面体验
  • 库、表、字段补全提示
  • 多结果级展示
  • 表结构查看

1.3、SQL优化

慢日志管理

基于PT收集慢日志,需要单独部署

SQL语句优化

基于SQLAdvisor|SOAR|SQLTuning的全方位优化建议

1.4、实例管理

会话管理
  • 支持查看和批量终止会话
  • 支持查看事物、锁信息
数据库管理

管理实例数据库,支持添加

账号管理

管理实例账号,支持增加、授权、删除

参数配置

可修改实例动态参数并记录修改历史

1.5、工具插件

PTArchiver

支持使用pt-archiver归档MySQL数据,支持直接添加配置和由用户申请归档

Binlog2SQL

将Binlog2SQL模块可视化,从MySQL binlog解析出你要的SQL

My2SQL

My2SQL可视化,更高效地解析MySQL binlog,快速回滚

SchemaSync

对比不同数据库的Schema信息,输出修改语句和回滚语句,SchemaSync不仅限于表结构,它可以处理的对象还有:视图、事件、存储过程、函数、触发器、外键

1.6、资源(项目)组

支持自定义资源(项目)组,管理资源组和关联对象,资源组成员之间审批流程、实例配置、消息通知等资源隔离

1.7、权限(角色)组

权限可以分配给用户,也可以分配给权限组,支持对大多数操作进行限制,独立控制用户的审核、执行等操作权限

1.8、工作流

工作流审批流程支持多层级多用户,并且隔离资源组,不同资源组不同的工单类型可以配置不同的审批层级

1.9、配置管理

系统配置项、工作流审批流程可在前端页面动态修改,无需重启服务实时生效

1.10、消息通知

支持钉钉、企业微信、邮件通知,及时知晓工单状态变化

1.11、可视化

使用pyecharts实现工单、查询维度的可视化统计

1.12、功能导图

在这里插入图片描述

二、部署

2.1、部署

服务器信息

系统:centos7.9

内网ip:192.168.0.213

公网ip:121.37.17.85

2.1.1、安装docker版本18.09.9

# wget https://download.docker.com/linux/centos/docker-ce.repo   #下载docker的yum源
# mv docker-ce.repo /etc/yum.repos.d
# yum -y  install docker-ce-18.09.9
# docker -v
Docker version 20.10.6, build 370c289
# systemctl start docker
# systemctl enable docker 

# 修改docker的日志规则
# vim /etc/docker/daemon.json     #docker18版本之后无效
{
"log-driver":"json-file",
  "log-opts":{ "max-size" :"500m","max-file":"30"}     #最大日志500m  最大保留个数30,一定删除注释
},
{
 "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}




#修改docker的数据存储路径
# vim /usr/lib/systemd/system/docker.service    
在ExecStart=/usr/bin/dockerd-current \  下添加
--graph /opt/docker \              #docker存储路径
--registry-mirror=http://hub-mirror.c.163.com \         #加速地址
--registry-mirror=https://docker.mirrors.ustc.edu.cn \
--registry-mirror=https://p31wiatp.mirror.aliyuncs.com \
-H tcp://0.0.0.0:6935 -H unix://var/run/docker.sock    #portainer可以检测到

# systemctl daemon-reload
# systemctl restart docker
# docker info |grep Root    #查看docker数据存储位置
Docker Root Dir: /opt/docker
# ss -ltnp  |grep  6935

2.1.2、安装docker-compose版本1.29.2

#安装docker-compose
# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# docker-compose --version
docker-compose version 1.29.2, build 5becea4c

2.1.3、安装mysql

创建目录

# mkdir -p  /opt/mysql_8_0_31/mysql/data
# mkdir -p /opt/mysql_8_0_31/mysql/sql
# cd  /opt/mysql_8_0_31/

准备初始化sql

# vim /opt/mysql_8_0_31/mysql/sql/archery.sql
CREATE DATABASE `archery` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci';

create user 'archery'@'%' identified by 'Archeryweb%123' ;

GRANT ALL on archery.* TO 'archery'@'%';

GRANT REPLICATION SLAVE,REPLICATION CLIENT,Select,Process,Create,Update,Insert,Drop,DELETE ON *.*
TO 'archery'@'%';
# 特别注意Drop,DELETE权限,生产不允许授这个权限,但是没有Drop,DELETE权限不能执行一些回滚sql,请联系管理员手动执行回滚sql

flush privileges;

编写docker-compose文件

# pwd
/opt/mysql_8_0_31/
# vim docker-compose-mysql.yaml
version: '3.7'
services:
  mysql8_0_31:
    image: docker.io/mysql:8.0.31
    ports:
      - 3366:3306
    container_name: mysql8_0_31
    environment:
      - MYSQL_ROOT_PASSWORD=Archeryweb%123
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/sql/archery.sql:/docker-entrypoint-initdb.d/archery.sql
    restart: always

docker-compose启动mysql

# pwd
/opt/mysql_8_0_31/
# docker-compose -f  docker-compose-mysql.yaml create #根据docker-compose文件创建容器及网络或存储卷
# docker-compose -f  docker-compose-mysql.yaml up -d     # 后台启动容器

2.1.4、安装archery

上传archery.tar.gz包

# pwd
/opt

# ls
Archery.tar.gz  containerd  docker

# 解压tar包
# tar xzvf Archery.tar.gz
# ls
Archery  Archery.tar.gz  containerd  docker

# 查看目录结构
# tree ./Archery     #如果提示没有tree命令,请执行yum -y install tree

Archery
├── archery
│   ├── docs.md
│   ├── downloads
│   │   ├── archiver
│   │   ├── binlog2sql
│   │   └── schemasync
│   ├── keys
│   ├── logs
│   │   ├── archery.log
│   │   ├── qcluster.log
│   │   └── supervisord.log
│   ├── notify.py
│   ├── notify.py.bak
│   ├── settings.py
│   ├── soar_path
│   │   ├── soar_path
│   │   └── sqladvisor_path
│   ├── soar.yaml
│   └── sql
│       └── migrations
│           ├── 0001_initial.py
│           ├── __init__.py
│           └── __pycache__
│               ├── 0001_initial.cpython-39.pyc
│               └── __init__.cpython-39.pyc
├── docker-compose.yml
├── inception
│   └── config.toml
└── mysql
    └── my.cnf

修改mysql连接为外置

修改docker-compose

# cd Archery
# pwd
/opt/Archery

# vim docker-compose.yml
version: '3'

services:
  redis:
    image: redis:5
    container_name: redis
    restart: always
    command: redis-server --requirepass 123456
    expose:
      - "6379"

  #将mysql的注释掉
  # mysql:
  #   image: mysql:5.7
  #   container_name: mysql
  #   restart: always
  #   ports:
  #     - "3306:3306"
  #   volumes:
  #     - "./mysql/my.cnf:/etc/mysql/my.cnf"
  #     - "./mysql/datadir:/var/lib/mysql"
  #   environment:
  #     MYSQL_DATABASE: archery
  #     MYSQL_ROOT_PASSWORD: 123456

  goinception:
    image: hanchuanchuan/goinception
    container_name: goinception
    restart: always
    ports:
      - "4000:4000"
    volumes:
      - "./inception/config.toml:/etc/config.toml"

  archery:
    image: hhyo/archery:v1.9.1
    container_name: archery
    restart: always
    ports:
      - "9123:9123"
    volumes:
      - "./archery/settings.py:/opt/archery/local_settings.py"
      - "./archery/soar.yaml:/etc/soar.yaml"
      - "./archery/docs.md:/opt/archery/docs/docs.md"
      - "./archery/notify.py:/opt/archery/sql/notify.py"
      - "./archery/downloads:/opt/archery/downloads"
      - "./archery/soar_path/sqladvisor_path:/opt/archery/soar_path/sqladvisor_path"
      - "./archery/soar_path/soar_path:/opt/archery/soar_path/soar_path"
      - "./archery/sql/migrations:/opt/archery/sql/migrations"
      - "./archery/logs:/opt/archery/logs"
      - "./archery/keys:/opt/archery/keys"
    entrypoint: "dockerize -wait tcp://192.168.0.213:3366 -wait tcp://redis:6379 -timeout 60s /opt/archery/src/docker/startup.sh"
    env_file:
      - .env


==========================================================================
# 注意
entrypoint: "dockerize -wait tcp://192.168.0.213:3366 -wait tcp://redis:6379 -timeout 60s /opt/archery/src/docker/startup.sh"   这里的mysql地址一定要修改

修改.env文件

# pwd
/opt/Archery
# ls -a
.  ..  archery  docker-compose.yml  .env  inception  mysql

# vim .env
NGINX_PORT=9123

# https://django-environ.readthedocs.io/en/latest/quickstart.html#usage
# https://docs.djangoproject.com/zh-hans/4.1/ref/settings/
DEBUG=false

#修改mysql配置信息
DATABASE_URL=mysql://archery:Archeryweb%123@192.168.0.213:3366/archery
CACHE_URL=redis://redis:6379/0?PASSWORD=123456

# https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins
CSRF_TRUSTED_ORIGINS=http://127.0.0.1:9123

# https://django-auth-ldap.readthedocs.io/en/latest/
ENABLE_LDAP=false
AUTH_LDAP_ALWAYS_UPDATE_USER=true
AUTH_LDAP_USER_ATTR_MAP=username=cn,display=displayname,email=email

# https://django-q.readthedocs.io/en/latest/configure.html#
Q_CLUISTER_WORKERS=4
Q_CLUISTER_TIMEOUT=60
Q_CLUISTER_SYNC=false

修改setting.py

# cd /opt/Archery/archery
# vim  settings.py
# 修改SECRET_KEY
# 关闭debug模式
DEBUG = False
# 设置ALLOWED_HOSTS,建议限制内网访问
ALLOWED_HOSTS = [
    '.example.com',  # Allow domain and subdomains
    '.example.com.',  # Also allow FQDN and subdomains
]
# 请求大小限制,如果提交SQL语句过大可以修改该值
DATA_UPLOAD_MAX_MEMORY_SIZE = 15728640
# 密码校验,用户注册和添加密码校验规则
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        'OPTIONS': {
            'min_length': 9, 
        }
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


#mysql配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'archery', # 数据库名称
        'USER': 'archery', # 数据库用户
        'PASSWORD': 'Archeryweb%123', # 数据库密码
        'HOST': '192.168.0.213', # 数据库HOST,如果是docker启动并且关联,可以使用容器名连接
        'PORT': '3366',  # 数据库端口
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", # SQL_MODE,为了兼容select * group by,可以按需调整
            'charset': 'utf8mb4'
        },
        'TEST': {
            'NAME': 'test_archery',
            'CHARSET': 'utf8mb4',
        },
    }
}

# Django-Q配置
Q_CLUSTER = {
    'name': 'archery',
    'workers': 4,
    'recycle': 500,
    'timeout': 60,
    'compress': True,
    'cpu_affinity': 1,
    'save_limit': 0,
    'queue_limit': 50,
    'label': 'Django Q',
    'django_redis': 'default',
    'sync': False  # 本地调试可以修改为True,使用同步模式

}

# 缓存配置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://redis:6379/0", # redis://host:port/db
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "123456"

        }
    }
}

docker-compose启动Archery

# pwd
/opt/Archery
# docker-compose create    #根据docker-compose文件创建容器及网络或存储卷
# docker-compose up -d     # 后台启动容器

# 表结构初始化
docker exec -ti archery /bin/bash
cd /opt/archery
source /opt/venv4archery/bin/activate
python3 manage.py makemigrations sql  
python3 manage.py migrate 

# 数据初始化
python3 manage.py dbshell<sql/fixtures/auth_group.sql
python3 manage.py dbshell<src/init_sql/mysql_slow_query_review.sql

# 创建管理用户
python3 manage.py createsuperuser
#账户:admin   邮箱:admin@admin.com  密码:Fysladmin


exit

# 重启
docker restart archery

# 日志查看和问题排查
docker logs archery -f --tail=50

访问http://{ip}:9123

账户:admin 密码:Fysladmin

在这里插入图片描述

2.2、系统配置

GO_INCEPTION_HOST 192.168.0.213

GO_INCEPTION_PORT 4000

**BACKUP_HOST ** 192.168.0.213

BACKUP_PORT 3366

BACKUP_USER root

BACKUP_PASSWORD Archeryweb%123

在这里插入图片描述

SQLADVISOR_PATH /opt/archery/soar_path/sqladvisor_path

SOAR_PATH /opt/archery/soar_path/soar_path

在这里插入图片描述

在这里插入图片描述

三、测试

3.1、增加资源组

在这里插入图片描述

飞书机器人webhook地址:https://open.larksuite.com/open-apis/bot/v2/hook/xxxxxx

在这里插入图片描述

3.2、新建实例

在这里插入图片描述

注意:数据库账户权限需具有以下权限

  • 1.对目标DB库需要有所有权限
  • 2.对所有DB库具有REPLICATION SLAVE、REPLICATION CLIENT 、Select和Process权限,关于这个权限,官方文档并没有说明,此处需注意。

关于账户授权的sql语句示例如下:

create user 'archery'@'%' identified by 'Archeryweb%123' ;

GRANT ALL on archery.* TO 'archery'@'%';

GRANT REPLICATION SLAVE,REPLICATION CLIENT,Select,Process ON *.*
TO 'archery'@'%';

flush privileges;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.3、修改权限组

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.4、配置审批流程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.5、修改新用户注册配置

在这里插入图片描述

在这里插入图片描述

测试新用户注册

在这里插入图片描述

账户:test001

密码:fysltest001

在这里插入图片描述

登录

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到之前配置的飞书机器人webhook已经发出通知了

在这里插入图片描述

登录DBA的账户,对申请进行批复

在这里插入图片描述

在这里插入图片描述

到这新用户注册的权限组测试完毕,新注册的用户仅能申请SQL查询权限

3.6、创建各类型测试用户

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

PM权限用户:

账户:PM-test001

密码:Fysltest03

DBA权限用户:

账户:DBA-test001

密码:Fysltest02

RD权限用户:

账户:RD-test004

密码:Fysltest03

在这里插入图片描述

3.7、创建上线sql/回滚

创建测试表

create table test(
  id int unsigned not null auto_increment primary key comment 'id',
  t2_name varchar(10) not null default 'a' comment 'a:有效,x:无效',
  cun varchar(10) not null default 'y' comment 'y:可用,n:不可用',
  email varchar(254)  NOT NULL default ' ' comment '账户邮箱'
) comment 'table';

在这里插入图片描述

提交后根据审批流程,依次登录相关的测试账户审批

测试提交回滚SQL,这里省略(回滚步骤跟SQL上线步骤是一样的)

3.8、申请查询权限

3.9、申请归档权限

归档是将数据归档成sql文件或者csv文件,本步骤详情操作省略

3.10、数据脱敏

创建上线SQL,插入测试数据

INSERT INTO
  test(id, t2_name, cun, email)
VALUES
  (1, 'a', 'y', 'zhangsan@gmail.com');
INSERT INTO
  test(id, t2_name, cun, email)
VALUES
  (2, 'a', 'y', 'chensi@gmail.com');
INSERT INTO
  test(id, t2_name, cun, email)
VALUES
  (3, 'a', 'y', 'wangwu@gmail.com');

配置数据脱敏字段

在这里插入图片描述

在这里插入图片描述

脱敏规则配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

测试数据脱敏效果

在这里插入图片描述

四、升级

升级分为两步, 数据库变更和服务更新, 以 Release v1.3.8 升级为 Release v1.5.0 为例

4.1、执行数据库变更脚本(请注意数据备份)

脚本文件地址: init_sql
需要执行当前版本至目标版本之间的所有数据库变更脚本

v1.3.8_v1.4.0.sql
v1.4.2_v1.4.3.sql
v1.4.3_v1.4.5.sql
v1.4.5_v1.5.0.sql

4.2、更新服务

1.使用 docker-compose -f docker-compose.yml down 停止旧版本服务, 删除旧版本服务使用的所有 docker 镜像

2.下载对应 Release 版本的压缩包: Releases

3.对比 src/docker-compose 文件夹, 按照最新配置进行调整, 注意务必更新 settings.py 文件, 否则可能无法启动, 确认配置没问题后使用 docker-compose -f docker-compose.yml up -d 启动新版本服务

4.执行数据库升级脚本, 跨多版本升级时需要执行当前版本至目标版本之间的所有数据库变更脚本(实际升级时注意替换文件名)

docker exec -it archery /bin/bash
source /opt/venv4archery/bin/activate
python manage.py dbshell < src/init_sql/v1.3.8_v1.4.0.sql
python manage.py dbshell < src/init_sql/v1.4.2_v1.4.3.sql
python manage.py dbshell < src/init_sql/v1.4.3_v1.4.5.sql
python manage.py dbshell < src/init_sql/v1.4.5_v1.5.0.sql

5.应用数据库变更 python manage.py migrate

6.使用 docker-compose -f docker-compose.yml restart 重新启动服务

五、踩坑记录

5.1.执行上线sql时报错 lookup mysql on 127.0.0.11:53: no such host

在这里插入图片描述

登录服务器查看容器 goinception日志

# docker  logs -f goinception
################################################
Warning: The following parameters will be deprecated and replaced with disable_types:
        enable_blob_type
        enable_json_type
        enable_enum_set_bit
        enable_timestamp_type
https://github.com/hanchuanchuan/goInception/pull/418
################################################
time="2023/01/15 10:36:34.468" level=error msg="con:14 解析失败! line 5 column 2 near \") comment 'table'\" " file=session_inception.go func=executeInc line=220
time="2023/01/15 10:36:34.469" level=error msg="                            create table test(\n  id int unsigned not null auto_increment primary key comment 'id',\n  t2_name varchar(10) not null default 'a' comment 'a:有效,x:无效',\n  cun varchar(10) not null default 'y' comment 'y:可用,n:不可用',\n) comment 'table'" file=session_inception.go func=executeInc line=221
time="2023/01/15 10:38:53.933" level=error msg="con:17 con:17 dial tcp: lookup mysql on 127.0.0.11:53: no such host" file=session_inception.go func=parseOptions line=2134

在这里插入图片描述

可以看到goinception的备份数据库地址不正确,还是默认的127.0.0.1

解决方案:

修改goinception配置文件,将备份数据库信息修改

# pwd
/opt/Archery/inception

# ls
config.toml

# vim config.toml
...
##修改备份数据库信息
backup_host = "192.168.0.213"
backup_port = 3366
backup_user = "root"
backup_password = "Archeryweb%123"


# cd ../
# pwd
/opt/Archery


# docker-compose down

# docker-compose up -d

再次提交SQL上线

可以看到执行正常结束

在这里插入图片描述

查看回滚SQL

在这里插入图片描述

执行上线SQL报错 lookup mysql on 127.0.0.11:53: no such host问题解决

5.2、执行上线SQL报错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信息.

在这里插入图片描述

登录服务器查看容器 goinception日志

# docker  logs -f goinception
is operation" file=session_inception.go func=mysqlFetchMasterBinlogPosition line=1570
time="2020/09/03 15:50:48.804" level=error msg="con:8 Error 1227: Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation" file=conn.go func=raw line=68
time="2020/09/03 15:50:48.804" level=error msg="con:8 Error 1227: Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation" file=session_inception.go func=mysqlFetchMasterBinlogPosition line=1570

解决方案:

去连接每个实例的账户需要同时授予Replication Client、Replication Slave、Process和Select权限,缺一不可

GRANT REPLICATION SLAVE,REPLICATION CLIENT,Select,Process,Create,Update,Insert,Drop,DELETE ON *.*
TO 'archery'@'%';

# 特别注意Drop,DELETE权限,生产不允许授这个权限,但是没有Drop,DELETE权限不能执行一些回滚sql,请联系管理员手动执行回滚sql

flush privileges;

关于这个权限,官方文档并没有说明,此处需注意。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos7.8安装oralce11g

文章目录环境安装文件准备添加用户操作系统环境配置解压安装问题解决创建用户远程连接为了熟悉rman备份操作&#xff0c;参照大神的博客在centos中安装了一套oracle11g&#xff0c;将安装步骤记录如下环境安装文件准备 这里准备一台centos7.8 虚拟机 配置ip 192.168.18.100 主…

【Linux】软件安装(三分钟教会你如何在linux下安装软件)

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️博客专栏&#xff1a;✈️Linux之路       &#x1f6f0;️社区&#xff1a;✈️进步学堂 目录&…

MySQL中对于单表和多表的操作

一、单表查询素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等显示所有职工的基本信息。mysql8.0 [chap03]>select * from worker;查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。mysql8.0 [cha…

C++100-C++拓展001-异常平方根计时功能

文章目录C100-C拓展-异常平方根计时功能摘要C异常实现C异常简介C异常捕获捕获异常捕获指定异常 std::out_of_range e捕获throw的异常抛出int异常并捕获除数为0的异常捕获C实现求平方和平方根利用math.h的pow求平方和平方根利用math.h求开根号自定义pow函数实现求平方完成循环计…

NSSCTF Round#8 web专项赛

文章目录MyPage方法一&#xff1a; pearcmd.php方法二&#xff1a;多级连接绕过方法三&#xff1a; PHP Base64 Filter 宽松解析MyDoorUpload_gogoggoez_nodeMyPage Where is my page&#xff1f; 拿到题目就是这个样子 感觉就是文件包含 可以读取&#xff0c;可以用filter协议…

AXI-Stream 学习笔记

参考 https://wuzhikai.blog.csdn.net/article/details/121326701 https://zhuanlan.zhihu.com/p/152283168 AXI4 介绍 AXI4 是ARM公司提出的一种片内总线&#xff0c;描述了主从设备之间的数据传输方式。主要有AXI4_LITE、AXI4_FULL、AXI4_STREAM三种。 AXI4_LITE&#xff1…

Vue3.0文档整理:一、简介

1.1:什么是vue&#xff1f; Vue是一款用于构建用户界面的javascript框架&#xff1b;它基于标准HTML、CSS和Javascript构建&#xff0c;并提供了一套声明式、组件化的编程模型&#xff0c;帮助你高效的开发用户界面。 1.2&#xff1a;MVVM工作原理 MVVM指的是model、view和vie…

TCP协议原理一

文章目录一、TCP协议二、TCP工作机制1.确认应答2.超时重传3.连接管理三次握手四次挥手一、TCP协议 我们的TCP协议相比于UDP协议复杂不少&#xff0c;今天我们就来一起学习一下TCP协议报文和原理 首先我们报头第一行里的端口号和UDP的端口号是一致的&#xff0c;都是用两个字节…

进大厂必备的Java面试八股文大全(2023最新精简易懂版,八股文中的八股文)

为什么同样是跳槽&#xff0c;有些人薪资能翻三倍&#xff1f;” 最近一个粉丝发出了灵魂拷问&#xff0c;类似的问题我收到过很多次&#xff0c;身边也确实有认识的同事、朋友们有非常成功的跳槽经历和收益&#xff0c;先说一个典型例子&#xff1a; 学弟小 A 工作一年半&am…

智云通CRM:买对了吗——大客户采购的方案实施

一旦采购合同签署后&#xff0c;供应商就要履行合同&#xff0c;按时交付产品进场使用&#xff0c;或实施服务方案。不过&#xff0c;无论对供应商还是客户来说&#xff0c;双方的合作并没有就此结束。 在这个阶段&#xff0c;客户会评估此次合作的供应商做事是否靠谱&#x…

Spring面试重点(四)——Spring事务

Spring事务 事务的方式 spring中使用事务有两种方式&#xff0c;一种是编程式事务&#xff0c;一种是声明式事务。编程式事务推荐使用TransactionTemplate&#xff0c;实现TransactionCallback接口&#xff0c;需要编码实现&#xff1b;声明式事务只需要在函数增加注解Transa…

【项目设计】—— 基于Boost库的搜索引擎

目录 前言 一、项目的相关背景 1. 什么是Boost库 2. 什么是搜索引擎 3. 为什么要做Boost搜索引擎 二、搜索引擎的宏观原理 三、搜索引擎技术栈和项目环境 四、正排索引 VS 倒排索引 —— 搜索引擎的具体原理 1. 正排索引&#xff08;forword index&#xff09; 2. 倒…

Linux tcpdump

tcpdump - 转储网络上的数据流 是不是感觉很懵&#xff1f;全方位描述tcpdump: 通俗&#xff1a;tcpdump是一个抓包工具&#xff0c;用于抓取网络中传输的数据包形象&#xff1a;tcpdump如同国家海关&#xff0c;凡是入境和出境的货物&#xff0c;海关都要抽样检查&#xff0…

新瑞鹏“狂飙”,宠物医疗是门好生意吗?

宠物看病比人还贵&#xff0c;正在让不少年轻一族陷入尴尬境地。在知乎上&#xff0c;有个高赞提问叫“你愿意花光积蓄&#xff0c;给宠物治病吗”&#xff0c;这个在老一辈人看来不可思议的魔幻选择&#xff0c;真实地发生在当下的年轻人身上。提问底下&#xff0c;有人表示自…

虹科分享 | 流浪地球背后:运载火箭行业的高性能计算!

当长征系列运载火箭直冲云霄时&#xff0c;你想到的是什么&#xff1f; 是嫦娥奔月&#xff0c;是技术革新&#xff0c;是一望无际的星空&#xff0c;是伟大的航天员 还是流浪地球中用火箭推进太空天梯的科幻场景 我 想到的是运载火箭行业背后的高性能计算 …… 是无数次的计算…

从写下第1个脚本到年薪30W,我的自动化测试心路历程

我希望我的故事能够激励现在的软件测试人&#xff0c;尤其是还坚持在做“点点点”的测试人。 你可能会有疑问&#xff1a;“我也能做到这一点的可能性有多大&#xff1f;”因此&#xff0c;我会尽量把自己做决定和思考的过程讲得更具体一些&#xff0c;并尽量体现更多细节。 …

vue3.0 响应式数据

目录1.什么是响应式2. 选项式 API 的响应式数据3.组合式 API 的响应式数据3.1 reactive() 函数3.2 toref() 函数3.3 toRefs() 函数3.4ref() 函数总结1.什么是响应式 这个术语在今天的各种编程讨论中经常出现&#xff0c;但人们说它的时候究竟是想表达什么意思呢&#xff1f;本质…

spark03-读取文件数据分区数量个数原理

代码val conf: SparkConf new SparkConf().setMaster("local").setAppName("wordcount")val sc: SparkContext new SparkContext(conf)val rdd: RDD[String] sc.textFile("datas/1.txt",2)rdd.saveAsTextFile("output")数据格式 &a…

Docker 部署微服务项目

目录 一、前言 二、环境准备 1、安装 Docker 2、Docker 安装 MySQL 3、Docker 安装 Redis 4、Docker 安装 Nacos 5、Docker 安装 Nginx 三、部署后端服务 四、部署前端服务 感谢观看&#xff01;&#xff01; 一、前言 以谷粒学苑为例&#xff0c;使用 Docker 部署后…

【SpringBoot3.0源码】启动流程源码解析 • 上

文章目录初始化SpringBoot启动类&#xff1a; SpringBootApplication public class AppRun {public static void main(String[] args) {SpringApplication.run(AppRun.class, args);} }步入SpringApplication.run(AppRun.class, args)方法&#xff1a; 这里分为两步&#xff1…