【数据库】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-node3/conf
mkdir -p /opt/osdba/mysql-node3/data
mkdir -p /opt/osdba/mysql-node3/log
mkdir -p /opt/osdba/mysql-node3/mysqld
mkdir -p /opt/osdba/mysql-node3/mysql-file

主库 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=mysql-bin
#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 = 1innodb_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.*# 设置 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 = 1innodb_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.*# 设置 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 = 1innodb_flush_log_at_trx_commit=1
sync_binlog=1
gtid_mode=ON
enforce_gtid_consistency=ON
EOF

docker启动mysql

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=utf8mb4docker 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=utf8mb4docker 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 84129fe42edb 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 - GPLCopyright (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 eventMaster_Host: 192.168.0.49Master_User: replMaster_Port: 33061Connect_Retry: 60Master_Log_File: mysql-bin.000004Read_Master_Log_Pos: 5067Relay_Log_File: 4d0d56dc58a0-relay-bin.000002Relay_Log_Pos: 1992Relay_Master_Log_File: mysql-bin.000004Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table: mysql.*Last_Errno: 1050Last_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: 0Exec_Master_Log_Pos: 1822Relay_Log_Space: 5455Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_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: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 1050Last_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: 1Master_UUID: 477442c1-0ad2-11ef-9efe-0242ac110002Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State:Master_Retry_Count: 10Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp: 240505 14:37:23Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:Master_public_key_path:Get_master_public_key: 0Network_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 secThreads: 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

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

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

相关文章

测试用例执行的结果pass_fail_block_skip

pass fail block skip 测试用例的执行结果通常包括以下几个方面&#xff1a; 1. **测试结果状态**&#xff1a;通常分为“通过”、“失败”、“阻塞”和“跳过”等状态。 - **通过**&#xff1a;测试用例执行完毕&#xff0c;预期结果与实际结果一致。 - **失败**&am…

【MySQL】——用户和权限管理(二)

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

大模型争霸的下一站:不仅是超越GPT-4,更是寻求模型之间的平衡应用

文 | 智能相对论 作者 | 沈浪 知名科学杂志《Nature》发表了一篇关于大模型规模参数大小争议的文章《In Al, is bigger always better?》——AI大模型&#xff0c;越大越好吗&#xff1f;随着大模型应用走向实践&#xff0c;这一问题不可避免地成为了当前AI行业发展的焦点与…

OpenGL 入门(二)—— 渲染摄像头采集的预览画面

本篇主要内容&#xff1a; 将摄像头采集到的图像通过 OpenGL 绘制到屏幕上FBO 离屏渲染 在开始上述流程前&#xff0c;我们有必要对 SurfaceTexture 做一个简单了解&#xff0c;因为 OpenGL 需要通过它获取要绘制的图像。 1、认识 SurfaceTexture SurfaceTexture 是 Androi…

(论文阅读-优化器)Selectivity Estimation using Probabilistic Models

目录 摘要 一、简介 二、单表估计 2.1 条件独立Condition Independence 2.2 贝叶斯网络Bayesian Networks 2.3 查询评估中的贝叶斯网络 三、Join选择性估计 3.1 两表Join 3.2 概率关系模型 3.3 使用PRMs的选择性估计 四、PRM构建 4.1 评分标准 4.2 参数估计 4.3 结…

堡垒机——网络技术手段

目录 一、简介 1.什么是跳板机 2.跳板机缺陷 3.什么是堡垒机 4.为什么要使用堡垒机 4.1堡垒机设计理念 4.2堡垒机的建设目标 4.3堡垒机的价值 4.4总结 5.堡垒机的分类 6.堡垒机的原理 7.堡垒机的身份认证 8.堡垒机的运维方式常见有以下几种 9.堡垒机其他常见功能…

基于springboot+vue+Mysql的在线动漫信息平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

大数据分析入门之10分钟掌握GROUP BY语法

前言 书接上回大数据分析入门10分钟快速了解SQL。 本篇将会进一步介绍group by语法。 基本语法 SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name HAVING condition假设我们有students表&#xff0c;其中有id,grade_number,class…

网络文件共享

存储类型分三类 直连式存储&#xff1a;DAS存储区域网络&#xff1a;SAN网络附加存储&#xff1a;NAS 三种存储架构的应用场景 DAS虽然比较古老了&#xff0c;但是还是很适用于那些数据量不大&#xff0c;对磁盘访问速度要求较高的中小企业SAN多适用于文件服务器&#xff0c…

C/C++ BM33 二叉树的镜像

文章目录 前言题目解决方案一1.1 思路阐述1.2 源码 总结 前言 镜像说的好听&#xff0c;无非就是换下节点。 题目 操作给定的二叉树&#xff0c;将其变换为源二叉树的镜像。 数据范围&#xff1a;二叉树的节点数 0 ≤ n ≤ 1000 0≤n≤1000 0≤n≤1000&#xff0c; 二叉树每…

华为ensp中USG6000V防火墙双机热备VRRP+HRP原理及配置

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月6日20点26分 华为防火墙双机热备是一种高可用性解决方案&#xff0c;可以将两台防火墙设备组成一个双机热备组&#xff0c;实现主备切换。当主用防火墙出现故障时&…

景源畅信:抖音运营做什么工作内容?

在如今这个信息爆炸的时代&#xff0c;抖音已经成为了人们生活中不可或缺的一部分。无论是消磨时间、获取信息还是展示自我&#xff0c;抖音都扮演着重要的角色。那么&#xff0c;作为抖音运营&#xff0c;他们需要做些什么呢? 一、内容策划与制作 抖音运营的首要任务就是内容…

【动态规划】路径问题

1.不同路径 不同路径 思路&#xff1a; 状态表示 状态转移方程 class Solution { public:int uniquePaths(int m, int n) {// 创建dp表// 初始化// 填表// 返回值vector<vector<int>> dp(m 1, vector<int>(n 1));dp[0][1] 1;for(int i 1; i < m; i…

【数据结构】C++语言实现栈(详细解读)

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

AI预测体彩排3第3套算法实战化赚米验证第2弹2024年5月6日第2次测试

由于今天白天事情比较多&#xff0c;回来比较晚了&#xff0c;趁着还未开奖&#xff0c;赶紧把预测结果发出来吧~今天是第2次测试~ 2024年5月6日排列3预测结果 6-7码定位方案如下&#xff1a; 百位&#xff1a;2、3、1、5、0、6 十位&#xff1a;4、3、6、8、0、9 个位&#xf…

4.任务创建和删除的API函数

一、简介 二、动态创建任务函数:xTaskCreate() 此函数用于使用动态的方式创建任务&#xff0c;任务的任务控制块以及任务的栈空间所需的内存&#xff0c;均由 FreeRTOS 从 FreeRTOS 管理的堆中分配&#xff0c;若使用此函数&#xff0c;需要在 FreeRTOSConfig.h 文件 中将宏 c…

【智能算法】PID搜索算法(PSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年&#xff0c;Y Gao受到PID控制理论启发&#xff0c;提出了PID搜索算法&#xff08;PID-based Search Algorithm, PSA&#xff09;。 2.算法原理 2.1算法思想 PID算法是控制领域的…

安卓应用开发(一):工具与环境

开发工具 Android Studio&#xff0c;用于开发 Android 应用的官方集成开发环境 (IDE)。包括以下功能&#xff1a; 基于Gradle的构建系统 gradle是一个项目构建工具&#xff0c;将源工程打包构建为apk 安卓模拟器统一环境代码编辑模拟器实时更新Github集成Lint功能&#xff0…

4+1视图,注意区分类图与对象图

注意区分类图和对象图。对象图标记的是对象名&#xff0c;命名形式 对象名:类名&#xff0c;或者:类名。这里没有出现冒号&#xff0c;表示的是类图。 对象图(object diagram)。 对象图描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照。和类图一…

数据结构十一:数组相关经典面试题

本篇博客详细介绍分析数组/顺序表常见的面试题&#xff0c;对于前面所学知识进行一个巩固&#xff0c;同时介绍一些力扣刷题中的一些概念&#xff1a;如&#xff1a;输出型参数等&#xff0c;在刷题中培养自己的编程思维&#xff0c;掌握常见的编程套路&#xff0c;形成题感&am…