【数据库】docker搭建mysql8一主两从节点,配置proxysql读写分离

docker搭建mysql8一主两从节点,配置proxysql读写分离

  • 一、docker 搭建 mysql8 一主两从节点
    • 1.1 相关配置文件与docker启动
    • 1.2 半同步复制
    • 1.3 主从同步异常处理
  • 二、mysql 中间件 ProxySql 配置读写分离
    • 2.1 在mysql服务里创建给proxySQL访问的用户
    • 2.2 安装ProxySql及mysql shell
    • 2.3 相关信息配置
    • 2.4 proxysql日志查看
    • 2.5 验证配置是否成功

一、docker 搭建 mysql8 一主两从节点

1.1 相关配置文件与docker启动

文件夹

# node1~3 同理
mkdir -p /opt/osdba/mysql-node1/{conf,data,log,mysqld,mysql-file}
mkdir -p /opt/osdba/mysql-node2/{conf,data,log,mysqld,mysql-file}
mkdir -p /opt/osdba/mysql-node3/{conf,data,log,mysqld,mysql-file}

# 删除数据,重新搭容器
rm -rf /opt/osdba/mysql-node1/*
rm -rf /opt/osdba/mysql-node2/*
rm -rf /opt/osdba/mysql-node3/*

主库 my.cnf

cat > /opt/osdba/mysql-node1/conf/my.cnf <<- 'EOF'
[client]
port=3306
socket=/var/run/mysqld/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysql.sock
character-set-server=UTF8MB4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# 主从配置
server-id=1
replicate-wild-ignore-table=mysql.*
log-bin=/var/log/mysql/mysql-bin
log-bin-index=/var/log/mysql/mysql-bin.index
#binlog_cache_size=2M
log_slave_updates=1
binlog_format=mixed

# 设置 MySQL 日志级别
log-error=/var/log/mysql/error.log
log_queries_not_using_indexes = 1
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

innodb_flush_log_at_trx_commit=1
sync_binlog=1
gtid_mode=ON
enforce_gtid_consistency=ON
EOF

从库 my.cnf

# node02
cat > /opt/osdba/mysql-node2/conf/my.cnf <<- 'EOF'
[client]
port=3306
socket=/var/run/mysqld/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysql.sock
character-set-server=UTF8MB4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# 主从配置
server-id=2
replicate-wild-ignore-table=mysql.*
log-bin=/var/log/mysql/mysql-bin
log-bin-index=/var/log/mysql/mysql-bin.index

# 设置 MySQL 日志级别
log-error=/var/log/mysql/error.log
log_queries_not_using_indexes = 1
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

innodb_flush_log_at_trx_commit=1
sync_binlog=1
gtid_mode=ON
enforce_gtid_consistency=ON
EOF

# node03
cat > /opt/osdba/mysql-node3/conf/my.cnf <<- 'EOF'
[client]
port=3306
socket=/var/run/mysqld/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysql.sock
character-set-server=UTF8MB4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 
# 主从配置
server-id=3
replicate-wild-ignore-table=mysql.*
log-bin=/var/log/mysql/mysql-bin
log-bin-index=/var/log/mysql/mysql-bin.index

# 设置 MySQL 日志级别
log-error=/var/log/mysql/error.log
log_queries_not_using_indexes = 1
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

innodb_flush_log_at_trx_commit=1
sync_binlog=1
gtid_mode=ON
enforce_gtid_consistency=ON
EOF

docker启动mysql

生产环境不要使用mysql最新版本!可能不稳定,而且相关工具例如xtrabackup可能还不支持

docker run -d -p 33061:3306 --name mysql-node1 \
  -e MYSQL_ROOT_PASSWORD='root' \
  -v /opt/osdba/mysql-node1/log:/var/log/mysql \
  -v /opt/osdba/mysql-node1/data:/var/lib/mysql \
  -v /opt/osdba/mysql-node1/conf/my.cnf:/etc/mysql/my.cnf \
  -v /opt/osdba/mysql-node1/mysql-files:/var/lib/mysql-files \
  -v /opt/osdba/mysql-node1/mysqld:/var/run/mysqld \
  mysql:latest --collation-server=utf8mb4_general_ci --character-set-server=utf8mb4

docker run -d -p 33062:3306 --name mysql-node2 \
  -e MYSQL_ROOT_PASSWORD='root' \
  -v /opt/osdba/mysql-node2/log:/var/log/mysql \
  -v /opt/osdba/mysql-node2/data:/var/lib/mysql \
  -v /opt/osdba/mysql-node2/conf/my.cnf:/etc/mysql/my.cnf \
  -v /opt/osdba/mysql-node2/mysql-files:/var/lib/mysql-files \
  -v /opt/osdba/mysql-node2/mysqld:/var/run/mysqld \
  mysql:latest --collation-server=utf8mb4_general_ci --character-set-server=utf8mb4
  
docker run -d -p 33063:3306 --name mysql-node3 \
  -e MYSQL_ROOT_PASSWORD='root' \
  -v /opt/osdba/mysql-node3/log:/var/log/mysql \
  -v /opt/osdba/mysql-node3/data:/var/lib/mysql \
  -v /opt/osdba/mysql-node3/conf/my.cnf:/etc/mysql/my.cnf \
  -v /opt/osdba/mysql-node3/mysql-files:/var/lib/mysql-files \
  -v /opt/osdba/mysql-node3/mysqld:/var/run/mysqld \
  mysql:latest --collation-server=utf8mb4_general_ci --character-set-server=utf8mb4

连接主库

[root@hecs-337984 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
240560130ca4        mysql:latest        "docker-entrypoint.s…"   20 hours ago        Up 37 minutes       33060/tcp, 0.0.0.0:33063->3306/tcp   mysql-node3
4d0d56dc58a0        mysql:latest        "docker-entrypoint.s…"   27 hours ago        Up 37 minutes       33060/tcp, 0.0.0.0:33062->3306/tcp   mysql-node2
84129fe42edb        mysql:latest        "docker-entrypoint.s…"   27 hours ago        Up 37 minutes       33060/tcp, 0.0.0.0:33061->3306/tcp   mysql-node1
[root@hecs-337984 ~]# docker exec -it mysql-node1 mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

并创建用户,查询状态

CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replpassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      661 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set, 1 warning (0.00 sec)

连接从库并设置主库连接

change master to master_host='172.17.0.1',master_user='repl',master_password='replpassword',master_log_file='mysql-bin.000003',master_log_pos=661,master_port=33061;

master_host :Master的地址。 由于这里使用docker容器部署,采用桥接模式,IP需要填写宿主机IP
master_port:Master的端口号
master_user:用于数据同步的用户,这里填我们新创建的用户主从同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上面主库中 File 字段的值
master_log_pos:从哪个 Position 开始读,即上面主库 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

启动主从同步,并设置从库只读

start slave;
SHOW slave status \G;
#SET GLOBAL read_only = ON; 
SET PERSIST read_only = ON;
#  如果要即使有SUPER权限的用户也无法修改数据,可以设置 super_read_only = ON
show variables like '%read_only%';

1.2 半同步复制

主库下载插件,开启半同步,并将主从错误连接超时时间改为3秒。

install plugin rpl_semi_sync_master soname 'semisync_master.so';
#set global rpl_semi_sync_master_enabled = 1;
set PERSIST rpl_semi_sync_master_enabled = 1;
#set global rpl_semi_sync_master_timeout = 3000;
set PERSIST rpl_semi_sync_master_timeout = 3000;
show global variables like '%semi%';

从库下载插件并配置,重启同步线程 必须重启从库的I/O线程,否则半同步复制不生效。重启I/O线程之后,从库会重新连接到主库,并注册为半同步的从库(如果是全新搭建的复制拓扑,可以忽略该步骤。但是,半同步复制的配置如果发生在异步复制的配置之后,则仍然需要此步骤)

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
#set global rpl_semi_sync_slave_enabled = 1;
set PERSIST rpl_semi_sync_slave_enabled = 1;
show global variables like '%semi%';
stop slave io_thread;
start slave io_thread;

1.3 主从同步异常处理

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.0.49
                  Master_User: repl
                  Master_Port: 33061
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 5067
               Relay_Log_File: 4d0d56dc58a0-relay-bin.000002
                Relay_Log_Pos: 1992
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table: mysql.*
                   Last_Errno: 1050
                   Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000004, end_log_pos 2043. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1822
              Relay_Log_Space: 5455
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1050
               Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000004, end_log_pos 2043. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 477442c1-0ad2-11ef-9efe-0242ac110002
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State:
           Master_Retry_Count: 10
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp: 240505 14:37:23
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
       Master_public_key_path:
        Get_master_public_key: 0
            Network_Namespace:
1 row in set, 1 warning (0.00 sec)

根据SHOW SLAVE STATUS \G输出信息,可以看出当前从库的复制遇到了问题,具体表现为Slave_SQL_Running: No,这意味着SQL线程没有运行,而原因在于最后的错误信息:

Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000004, end_log_pos 2043. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

这个错误说明在应用某个事务时发生了错误,导致复制停止。解决这个问题的步骤如下:

  1. 查看错误日志:首先查看MySQL的错误日志(通常位于MySQL的数据目录下,文件名可能为error.log或类似),错误日志会提供更多关于为何SQL线程失败的具体原因。

  2. 检查性能模式表:根据错误提示,也可以查询performance_schema.replication_applier_status_by_worker表来获取更详细的错误信息。执行如下SQL命令:

    SELECT * FROM performance_schema.replication_applier_status_by_worker \G;
    

    查看是否有更多关于失败事务的详细错误描述。

  3. 解决冲突或错误:根据错误信息,你可能需要在从库上手动修复问题。这可能包括但不限于:

    • 如果是因为数据冲突(如唯一键约束冲突),可能需要手动删除或更新冲突的记录。
    • 如果是由于对象不存在(如尝试应用的DDL在从库上不存在对应的表),可能需要手动创建缺失的对象。
    • 如果是其他类型的错误,需要针对性地解决。
  4. 清理并重启复制:一旦问题被解决,可以尝试清除错误状态并重启复制:

    STOP SLAVE;
    SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; -- 跳过导致错误的事务
    START SLAVE;
    

    注意,使用SQL_SLAVE_SKIP_COUNTER跳过错误事务是一种临时解决方法,应谨慎使用,因为它可能会导致数据不一致。确保理解其后果。

    命令若报错如下启用了GTID(全局事务标识符)主从同步

    --show slave status \G;
    Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction '477442c1-0ad2-11ef-9efe-0242ac110002:1' at source log mysql-bin.000013, end_log_pos 429. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
    
    --SELECT * FROM performance_schema.replication_applier_status_by_worker \G;
    LAST_ERROR_MESSAGE: Worker 1 failed executing transaction '477442c1-0ad2-11ef-9efe-0242ac110002:1' at source log mysql-bin.000013, end_log_pos 429; Could not execute Write_rows event on table test.t1; Duplicate entry '2' for key 't1.PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's source log mysql-bin.000013, end_log_pos 429
    

    可以换用如下命令,在session里设置gtid_next,即跳过这个GTID,并设置空事物,然后恢复GTID:

    STOP SLAVE;
    SET @@SESSION.GTID_NEXT= '477442c1-0ad2-11ef-9efe-0242ac110002:1' ;  
    BEGIN;  
    COMMIT;       
    SET SESSION GTID_NEXT = AUTOMATIC;     
    START SLAVE;
    
  5. 验证复制状态:最后,再次执行SHOW SLAVE STATUS \G来检查SQL线程是否已经正常启动,并且Seconds_Behind_Master是否在减少,表明复制正在追赶。

如果问题复杂或上述步骤不能解决,可能需要更深入的诊断,包括考虑主库上的操作历史、检查是否有不兼容的SQL语句被执行等因素。

二、mysql 中间件 ProxySql 配置读写分离

2.1 在mysql服务里创建给proxySQL访问的用户

创建主用户,用来暴露自己的api给proxysql

GRANT ALL PRIVILEGES ON *.* TO 'proxyadmin'@'%' identified WITH 'mysql_native_password' by 'proxyadminpassword'  WITH GRANT OPTION;

创建监控用户,该用户可以查看本机mysql服务的只读属性

create user proxymonitor@'%' identified by 'proxymonitorpassword';
grant replication client on *.* to proxymonitor@'%';

检查从库是否都为只读,不然后面更新的时候会更新失败,读库会注册到写库中去

-- SET GLOBAL read_only = ON;
SET PERSIST read_only = ON;
SHOW GLOBAL VARIABLES LIKE 'read_only';

2.2 安装ProxySql及mysql shell

看linux当前版本

cat /proc/version
cat /etc/os-release

下载对应rpm包
proxysql
https://github.com/sysown/proxysql/releases
mysql客户端(非服务端),红框内的
https://downloads.mysql.com/archives/community/
在这里插入图片描述

# 安装所需环境
yum install perl-DBD-MySQL
# 用rpm包安装
rpm -ivh ./proxysql-2.6.1-1-centos8.x86_64.rpm
rpm -ivh ./mysql-community-*
# 启动服务
systemctl start proxysql

2.3 相关信息配置

连接 proxysql 服务端

mysql -uadmin -padmin -h127.0.0.1 -P6032

切换库并配置数据库节点
mysql_servers表是ProxySQL中用于配置MySQL服务器信息的表。它存储了与每个MySQL服务器相关的详细信息,包括主机名、端口、用户名、密码、权重、状态等。

use main
insert into mysql_servers(hostgroup_id,hostname,port)  values(10,'172.17.0.1',33061);
insert into mysql_servers(hostgroup_id,hostname,port)  values(20,'172.17.0.1',33062);
insert into mysql_servers(hostgroup_id,hostname,port)  values(20,'172.17.0.1',33063);
select * from mysql_servers;
-- load,save 一下
load mysql servers to runtime;
save mysql servers to disk;

当你在ProxySQL中修改了配置,比如修改了mysql_usersmysql_serversmysql_query_rules表等,这些更改默认只会保存在内存中,而不会持久化到磁盘。如果不执行保存操作,ProxySQL在重启后将会丢失这些更改,重新加载默认的配置。
通过执行LOAD命令,ProxySQL将从磁盘加载配置更改到内存中,使其生效。然后,通过执行SAVE命令,ProxySQL将当前内存中的配置保存到磁盘文件中,以便在重启后可以恢复这些更改。

因此,为了确保你的配置更改在重启后仍然有效。在ProxySQL中,更改配置后需要执行LOADSAVE命令来加载和保存配置更改。

配置读写库组id
mysql_replication_hostgroups表是ProxySQL中用于配置MySQL主从复制的主机组信息的表。
在该表中,可以定义主机组(Hostgroup)及其相关的属性,如主机组ID、读写分离规则、复制延迟等。每个主机组代表了一组MySQL服务器,可以包含主服务器(Master)和一个或多个从服务器(Slave)。通过配置主机组,ProxySQL可以实现自动的读写分离和主从复制功能。

insert into mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup,check_type) values(10,20,'read_only');
select * from mysql_replication_hostgroups;
load mysql servers to runtime;
save mysql servers to disk;

配置用户表
在ProxySQL中,mysql_users表定义了在连接到MySQL服务器时使用的用户名和密码,以及该用户在ProxySQL中的权限和其他属性。通过在mysql_users表中配置用户信息,ProxySQL可以根据客户端的连接请求进行身份验证,并根据定义的权限规则控制对MySQL服务器的访问。

insert into mysql_users(username,password,default_hostgroup) values('proxyadmin','proxyadminpassword',10);
select * from mysql_users;
load mysql users to runtime;
save mysql users to disk;

注意,这个和上面的load语句不同,一个是users,一个是service

配置mysql监控用户
ProxySQL允许配置一个MySQL监控用户,用于与MySQL服务器建立监控连接并收集相关的性能统计信息。设置mysql-monitor_usernamemysql-monitor_password就是为了配置这个MySQL监控用户的用户名和密码。

当设置完用户名和密码后,ProxySQL将使用这些凭据建立与MySQL服务器的监控连接,并定期获取性能指标、查询统计和连接状态等信息。这些收集到的数据可以用于性能监控、故障排除和优化分析等用途。

set mysql-monitor_username='proxymonitor';
set mysql-monitor_password='proxymonitorpassword';
load mysql variables to runtime;
save mysql variables to disk;

配置proxysql读写分离规则

在ProxySQL中,查询规则决定了如何处理不同类型的查询语句。通过在mysql_query_rules表中定义查询规则,可以实现灵活的查询路由和行为控制。
以下是一些常见的使用情况和功能:

  1. 读写分离:通过定义查询规则,可以指定哪些查询语句应该路由到读库(从服务器)进行处理,哪些查询语句应该路由到写库(主服务器)进行处理。这样可以实现读写分离,提高系统的读取性能和可扩展性。
  2. 负载均衡:通过定义查询规则,可以指定多个读库(从服务器)之间的负载均衡策略,如轮询、最小连接数等。这样可以平衡读操作的负载,确保每个从服务器都得到合理的请求分发。
  3. 查询重写:通过定义查询规则,可以对特定类型的查询进行重写和改写。例如,可以将一些查询语句转换为优化的形式,以提高查询性能或满足特定的业务需求。
  4. 查询限制和过滤:通过定义查询规则,可以限制某些查询的执行权限、资源使用或返回结果集的大小。这样可以对系统进行保护,防止恶意查询或意外的大查询对系统造成影响。
INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup, apply)
VALUES (1, 1, '^SELECT.*', 20, 1), -- 将匹配以 SELECT 开头的查询语句路由到读库(hostgroup 20)
       (2, 1, '.*', 10, 1); -- 将匹配所有其他语句路由到写库(hostgroup 10)
select * from mysql_query_rules;
load mysql query rules to runtime;
save mysql query rules to disk;

在上述示例中,第一条规则使用正则表达式^SELECT.*匹配以SELECT开头的查询语句,并将其路由到hostgroup 20,这个hostgroup代表读库。第二条规则使用正则表达式.*匹配所有其他查询语句,并将其路由到hostgroup 10,这个hostgroup代表写库。

根据你的需求,你可以根据查询类型、关键字、表名等设置更复杂的规则。请注意,规则的顺序很重要,ProxySQL将按照规则列表的顺序逐条匹配,并在找到匹配项后停止匹配。

2.4 proxysql日志查看

  1. 查找日志文件位置:
    ProxySQL的日志文件位置可以在配置文件中指定,一般情况下,这个配置文件是/etc/proxysql.cnf/etc/proxysql/admin.cnf(取决于你的安装方式和配置)。在配置文件中,可以找到类似于admin_variables.logmysql_variables.log的配置,这些配置项指定了日志文件的路径。如果没有特别配置,默认的日志路径可能是/var/log/proxysql/

    你也可以通过ProxySQL的管理接口查询日志文件的路径,执行如下SQL命令:

    SELECT variable_value FROM global_variables WHERE variable_name = 'admin_log_file';
    SELECT variable_value FROM global_variables WHERE variable_name = 'mysql_log_file';
    

    这将分别告诉你Admin日志和MySQL日志的路径。

  2. 查看异常:

    • 使用文本编辑器:直接使用文本编辑器(如vimnano)打开日志文件查看,寻找错误或警告信息。
    • 使用命令行工具:在Linux终端使用taillessgrep等命令查看实时日志或搜索特定错误信息。例如,查看最近的日志条目:
      tail -100f /var/lib/proxysql/proxysql.log
      
      或者搜索特定错误:
      grep 'ERROR' /var/lib/proxysql/proxysql.log
      
    • 日志监控工具:对于生产环境,可以考虑使用日志管理工具(如Logstash、Fluentd、ELK Stack等)来收集、分析和监控ProxySQL日志,以便高效地识别和处理异常。

日志中通常会记录运行时错误、警告、连接问题、查询路由信息等,是诊断ProxySQL异常情况的首要资源。记得定期检查和维护日志文件的大小,以防它们占用过多磁盘空间。

2.5 验证配置是否成功

mysql -uproxyadmin -pproxyadminpassword -P6033 -h127.0.0.1
  1. 6032端口(管理端口):
    • 用于与ProxySQL的管理工具或客户端进行交互。
    • 通过6032端口,可以连接到ProxySQL的管理界面,执行管理操作,如配置ProxySQL的规则、查询和修改运行时参数等。
    • 这个端口通常用于管理员或运维人员对ProxySQL进行管理和监控。
  2. 6033端口(代理端口):
    • 用于应用程序与ProxySQL之间的通信。
    • 应用程序需要将其连接指向ProxySQL的6033端口,而不是直接连接到数据库后端。
    • ProxySQL会根据配置的规则和负载均衡算法将请求转发到后端的数据库服务器。
    • 这个端口通常用于应用程序与数据库之间的代理层,实现读写分离、负载均衡和故障转移等功能。

综上所述,6032端口用于管理ProxySQL本身,而6033端口用于应用程序与ProxySQL之间的通信,实现数据库代理的功能。

mysql> \s
--------------
mysql  Ver 8.3.0 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:          4
Current database:       testuser
Current user:           information_schema
SSL:                    Cipher in use is TLS_AES_128_GCM_SHA256
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.5.30 (ProxySQL)
Protocol version:       10
Connection:             127.0.0.1 via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:               6033
Binary data as:         Hexadecimal
Uptime:                 24 min 32 sec

Threads: 3  Questions: 62  Slow queries: 0
--------------

参考博文:
https://blog.csdn.net/huanghuozhiye/article/details/136001782
https://blog.csdn.net/csdnerM/article/details/131709627
https://blog.csdn.net/qq_43305367/article/details/135111068

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Reactor Netty TCP 服务器端-响应式编程-011

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform…

2024第八季完美童模 上海翎秀赛区 初赛 火热启动

第八季完美童模新篇启航&#xff0c;打响2024全明星联赛第三站的火热赛程&#xff01;本季全球赛亮点纷呈&#xff0c;带领全球选手体验暑期最高规格国民赛&#xff01;6季上榜CCTV新闻报道&#xff0c;稳坐行业赛事头把交椅&#xff1b;分赛区遍布全球各地&#xff0c;覆盖350…

【Linux】自动化构建工具make/Makefile和git介绍

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12625432.html 目录 前言 Linux项目自动化构建工具-make/Makefile 举例 .PHONY 常见符号 依赖关系…

前端报错 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse

问题描述​ 控制台提示 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse 问题原因​ 原因&#xff1a;JSON 数据格式错误&#xff0c;是否符合 JSON 格式。 解决方法​ 应为json格式数据 什么是json格式数据 JSON&#xff08;JavaScript Object …

使用sqlmodel实现唯一性校验2,插入之前检查是否已存在

虽然之前添加唯一性校验的方法能够解决数据唯一的问题&#xff0c;但是如果忘了处理异常&#xff0c;则可能会导致程序崩溃。 在此基础上&#xff0c;我们可以在插入数据之前检查该数据是否已存在。 原来的代码&#xff1a; from sqlmodel import Field, Session, SQLModel,…

基于Python实现蔬菜水果识别

蔬菜水果识别在农业生产、食品加工和市场销售等领域具有重要意义。随着计算机视觉和机器学习技术的发展,利用图像识别技术实现蔬菜水果的自动化识别已成为可能。 目录 引言研究背景问题陈述研究目标文献综述蔬菜水果识别的相关研究概述基于计算机视觉和机器学习的图像识别方法…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第20课-烟花插件

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第20课-烟花插件 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&am…

光纤VS紫外:如何选择最适合您生产线的激光打标机?

光纤激光打标机和紫外激光打标机在制造业中都有其独特的应用&#xff0c;但两者在原理、特点和应用范围上存在一些差异。 光纤激光打标机是一种采用光纤输出激光&#xff0c;并通过高速扫描振镜系统实现打标功能的新一代激光打标机系统。它电光转换效率高&#xff0c;达到30%以…

鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙的使用

gn是什么? gn 存在的意义是为了生成 ninja,如果熟悉前端开发,二者关系很像 Sass和CSS的关系. 为什么会有gn,说是有个叫even的谷歌负责构建系统的工程师在使用传统的makefile构建chrome时觉得太麻烦,不高效,所以设计了一套更简单,更高效新的构建工具gnninja,然后就被广泛的使用…

轻松掌握RAID级别

一、官方说明&#xff1a; RAID&#xff08;英文全称 Redundant Array of Independent Disks&#xff09;翻译成中文&#xff08;独立磁盘冗余阵列&#xff09;。 RAID 是一种将多块独立磁盘&#xff0c;组成一组逻辑磁盘的技术。RAID 级别分为 0、1、3、5、6等&#xff0c;可…

【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 容器类控件 | Tab Widget的使用及说明 文章编号&#xf…

健康行业CRM软件-保健行业CRM解决方案示例

Z公司面临客户信息管理和销售效率的挑战&#xff0c;提出使用ZohoCRM解决方案。ZohoCRM可集中管理客户信息、自动化销售流程并优化客户关系&#xff0c;提供数据分析和市场趋势洞察&#xff0c;帮助Z公司提升销售效率和客户满意度。 一、健康公司痛点 Z公司作为一家专注于特膳…

光数据传送器|光通讯传感器极速版OPT系列尺寸与安装步骤

光数据传送器|光通讯传感器极速版OPT系列是利用可见光及不可见光作为信息载体&#xff0c;无需光纤、网线等有线介质&#xff0c;在空中直接进行信息传输的无线方式通信。驱动光源以可见光及不可见光的高速明暗变化来传输数字信号&#xff0c;以极高光频率双向发射接收光信号&a…

CSRF漏洞原理攻击与防御

CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff1a;也被称为“One Click Attack”或者Session Riding&#xff0c; 通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&#xff08;XSS&#xff09;&#xff0c;但…

设计模式-工厂模式设计与详解

一、设计模式介绍 设计模式是我们开发中常常需要面对的核心概念&#xff0c;它们是解决特定问题的模板或者说是经验的总结。这些模式被设计出来是为了让软件设计更加清晰、代码更加可维护且能应对未来的变化。良好的设计模式不仅能解决重复代码的问题&#xff0c;还能使团队中…

408数据结构-哈夫曼树 自学知识点整理

前置知识&#xff1a;二叉树的概念、性质与存储结构 哈夫曼树 哈夫曼树的定义 首先需要明确几个概念。 路径&#xff1a;从树中的一个结点到另一个结点之间的分支构成这两个结点之间的路径。 路径长度&#xff1a;路径上的分支数目称为路径长度。 权(值)&#xff1a;树中结点…

实时追踪维修进度,报修管理小程序让你省心又省力!

随着生活、工作节奏的日益加快&#xff0c;日常的售后报修、故障报修处理流程给我们带来种种困扰。我们都知道大多数企业、个人用户还在使用传统报修方式&#xff0c;如电话报修、纸质报修单等方式&#xff0c;不仅效率低下&#xff0c;而且难以追踪维修进度&#xff0c;给我们…

无人机+自组网:空地点对点无人机通信解决方案

随着智能化技术的迅速发展, 无人化设备在战场上发挥的作用日益突显。在近期发生的多次局部战争中, 无人设备代替人类承担了多项危险且复杂的攻击任务, 达到 “兵不血刃” 的效果. 2020 年 1 月 3 日, 美军利用无人机执行了刺杀伊朗 “圣城旅” 指挥官苏莱曼尼行动. 纳戈尔诺 - …

48.乐理基础-音符的组合方式-休止符

休止符 音乐中总有一些停顿的地方&#xff0c;一次停顿多久是创作人固定好的&#xff0c;休止符就是用来表示每一次停顿多久 需要停顿的位置就用 0 来表示&#xff0c;数字 0 就是简谱中的休止符 音符有全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符等&…

海外静态IP购买:全面解析与购买指南

在当今这个信息化、网络化的时代&#xff0c;IP地址成为了网络世界中不可或缺的一部分。随着跨国业务的不断增多&#xff0c;海外静态IP的需求也日益增长。海外静态IP&#xff0c;作为一种稳定、可靠的网络资源&#xff0c;为企业在全球范围内的业务拓展提供了强有力的支持。本…