centos7安装部署proxysql

centos7安装部署proxysql

主机:

192.168.208.39(主)

192.168.208.40(从)

下载地址:

https://repo.proxysql.com/ProxySQL/

参考文献:

https://proxysql.com/documentation/ProxySQL-Configuration/

主机proxysql安装部署

若需要部署高可用,可使用keepalive+proxysql架构

##安装步骤
cd /usr/local/src/
yum -y install proxysql-2.2.0-1-centos7.x86_64.rpm

##启动proxysql并设置开机启动
systemctl start proxysql
systemctl enable proxysql

mysql5.6安装半同步主从复制

mysql安装过程略

主机安装半同步插件

mysql >  INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so'; 
mysql > select * from mysql.plugin;
+----------------------+--------------------+
| name                 | dl                 |
+----------------------+--------------------+
| rpl_semi_sync_master | semisync_master.so |
+----------------------+--------------------+
1 row in set (0.00 sec)
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1; 
#等待多长时间(单位毫秒),如果还不能成功推送到从库,则自动调整为异步模式,事务正常返回给客户端
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 3000; 
##创建主从同步复制用户
mysql> grant replication slave on *.* to 'sla'@'%' identified by '!QAZ@wsx' with grant option;

主机修改配置文件/etc/my.cnf(需写在[mysqld]模块下)

server-id = 1
log-bin=mysql-bin
#二进制日志的格式,有row、statement和mixed几种类型;需要注意的是:当设置隔离级别为读提交READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致
binlog_format=row
#开启GTID模式
gtid_mode=ON
# slave更新是否记入日志
log-slave-updates=1
#强制gtid一致性
enforce-gtid-consistency=1
#以上是必选项
#以下是可选项
#以表形式(而不是文件形式)记录master-info和relay-log-info
master-info-repository=TABLE
relay-log-info-repository=TABLE
#当设置了master_info_repository = TABLE,那么如果sync_master_info的值大于0,从站会在sync_master_info的每个事件之后,更新它自己的master info表
sync-master-info=1
#设置当该服务器作为从服务器时,应用接收到的复制事件的并发线程数。设置为0将会关闭多线程从服务器功能。如果该机器拥有多核,并且使用了多个数据库,可以增加该值以更好地利用多线程功能
slave-parallel-workers=4
#用于启用所有的复制校验
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
#使用基于行的复制时启用二进制日志中的信息日志事件(尤其是原始SQL查询),简化故障排除
binlog-rows-query-log_events=1
#提供复制报告端口
report-port=3306
##这两个参数需要先安装半同步插件,否则重启数据库会报错
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=3000
#binlog日志过期时间
expire_logs_days = 30

主机重启数据库

systemctl restart mysqld

主机导出数据库

/usr/local/mysql/bin/mysqldump -u root -pcndatacom --all-databases --triggers --routines --events > /tmp/all.sql

从机修改配置文件/etc/my.cnf(需写在[mysqld]模块下)

### 主从配置 ###
log-bin=mysql-bin
binlog_format=row
#innodb_autoinc_lock_mode = 2
expire_logs_days = 30

### Mysql5.6 主从配置:基于事务的复制###
gtid_mode=ON
log-slave-updates=1
enforce-gtid-consistency=1
master-info-repository=TABLE 
relay-log-info-repository=TABLE 
sync-master-info=1 
slave-parallel-workers=8
binlog-checksum=CRC32 
master-verify-checksum=1 
slave-sql-verify-checksum=1 
binlog-rows-query-log_events=1 
report-port=3306

### semi ###
#rpl_semi_sync_slave_enabled = 1

### slave ###
server-id = 2
relay_log_recovery = 1
#以下5个为可选项
#replicate-do-db=db1
#replicate-do-db=db2
#replicate-ignore-db = mysql
##replicate-ignore-table=dbname.tablename
##read-only = 1

从机重启数据库

systemctl restart mysqld

从机导入数据库

/usr/local/mysql/bin/mysql -uroot -pcndatacom < /tmp/all.sql &
#若出现ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
#则在导出文件时加入参数--set-gtid-purged=off

从机安装半同步插件

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

再次修改配置配置文件并重启

#以下配置去掉注释
rpl_semi_sync_slave_enabled = 1
read-only = 1

#重启数据库
systemctl restart mysqld

从机开启主从同步

mysql > CHANGE MASTER TO MASTER_HOST='192.168.208.39',MASTER_PORT=3306,MASTER_USER='sla',MASTER_PASSWORD='!QAZ2wsx',MASTER_AUTO_POSITION=1;
mysql > start slave;
mysql > show slave status\G 

主机查看是否为半同步复制

mysql > show global status like 'rpl%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 7591  |
| Rpl_semi_sync_master_net_wait_time         | 15182 |
| Rpl_semi_sync_master_net_waits             | 2     |
| Rpl_semi_sync_master_no_times              | 1     |
| Rpl_semi_sync_master_no_tx                 | 1     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 7567  |
| Rpl_semi_sync_master_tx_wait_time          | 7567  |
| Rpl_semi_sync_master_tx_waits              | 1     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 1     |
+--------------------------------------------+-------+
14 rows in set (0.00 sec)
##查看Rpl_semi_sync_master_clients是否不为0,Rpl_semi_sync_master_status是否为ON

proxysql配置

##6032为proxysql管理端口,只允许本地访问,6033为转发端口
mysql -uadmin -padmin -h127.0.0.1 -P6032 --prompt 'ProxySQL Admin> '

#通过检查mysql_servers、mysql_replication_hostgroups和mysql_query_rules表中没有条目来验证配置是否为空。
ProxySQL Admin> SELECT * FROM mysql_servers;
Empty set (0.00 sec)

ProxySQL Admin> SELECT * from mysql_replication_hostgroups;
Empty set (0.00 sec)

ProxySQL Admin> SELECT * from mysql_query_rules;
Empty set (0.00 sec)

添加后端mysql服务器

##添加后端mysql服务器,即39和40
ProxySQL Admin>  INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'192.168.208.39',3306);
Query OK, 1 row affected (0.00 sec)

ProxySQL Admin>  INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'192.168.208.40',3306);
Query OK, 1 row affected (0.00 sec)

ProxySQL Admin> SELECT * FROM mysql_servers;
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname       | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 1            | 192.168.208.39 | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
| 1            | 192.168.208.40 | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
2 rows in set (0.00 sec)

##配置生效
ProxySQL Admin> load mysql servers to runtime;
ProxySQL Admin> save mysql servers to disk;

配置监控

##需要先在后端服务器创建用作监控的服务器
mysql> grant select on *.* to monitor@'192.168.208.%' identified by 'Id1#Bi6HbQ';


##proxysql添加监控帐密信息
ProxySQL Admin> UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';

ProxySQL Admin> UPDATE global_variables SET variable_value='Id1#Bi6HbQ' WHERE variable_name='mysql-monitor_password';

##配置各种监控间隔
ProxySQL Admin> UPDATE global_variables SET variable_value='2000' WHERE variable_name IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');

ProxySQL Admin>  SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor_%';
+--------------------------------------------------------------+----------------+
| variable_name                                                | variable_value |
+--------------------------------------------------------------+----------------+
| mysql-monitor_enabled                                        | true           |
| mysql-monitor_connect_timeout                                | 600            |
| mysql-monitor_ping_max_failures                              | 3              |
| mysql-monitor_ping_timeout                                   | 1000           |
| mysql-monitor_read_only_max_timeout_count                    | 3              |
| mysql-monitor_replication_lag_interval                       | 10000          |
| mysql-monitor_replication_lag_timeout                        | 1000           |
| mysql-monitor_replication_lag_count                          | 1              |
| mysql-monitor_groupreplication_healthcheck_interval          | 5000           |
| mysql-monitor_groupreplication_healthcheck_timeout           | 800            |
| mysql-monitor_groupreplication_healthcheck_max_timeout_count | 3              |
| mysql-monitor_groupreplication_max_transactions_behind_count | 3              |
| mysql-monitor_galera_healthcheck_interval                    | 5000           |
| mysql-monitor_galera_healthcheck_timeout                     | 800            |
| mysql-monitor_galera_healthcheck_max_timeout_count           | 3              |
| mysql-monitor_replication_lag_use_percona_heartbeat          |                |
| mysql-monitor_query_interval                                 | 60000          |
| mysql-monitor_query_timeout                                  | 100            |
| mysql-monitor_slave_lag_when_null                            | 60             |
| mysql-monitor_threads_min                                    | 8              |
| mysql-monitor_threads_max                                    | 128            |
| mysql-monitor_threads_queue_maxsize                          | 128            |
| mysql-monitor_wait_timeout                                   | true           |
| mysql-monitor_writer_is_also_reader                          | true           |
| mysql-monitor_username                                       | monitor        |
| mysql-monitor_password                                       | Id1#Bi6HbQ   |
| mysql-monitor_history                                        | 600000         |
| mysql-monitor_connect_interval                               | 2000           |
| mysql-monitor_ping_interval                                  | 2000           |
| mysql-monitor_read_only_interval                             | 2000           |
| mysql-monitor_read_only_timeout                              | 500            |
+--------------------------------------------------------------+----------------+
31 rows in set (0.00 sec)

##保存配置信息
ProxySQL Admin> LOAD MYSQL VARIABLES TO RUNTIME;

ProxySQL Admin> SAVE MYSQL VARIABLES TO DISK;

后台健康检查

##查看涉及到监控的几个表
ProxySQL Admin> SHOW TABLES FROM monitor;
+--------------------------------------+
| tables                               |
+--------------------------------------+
| mysql_server_aws_aurora_check_status |
| mysql_server_aws_aurora_failovers    |
| mysql_server_aws_aurora_log          |
| mysql_server_connect_log             |
| mysql_server_galera_log              |
| mysql_server_group_replication_log   |
| mysql_server_ping_log                |
| mysql_server_read_only_log           |
| mysql_server_replication_lag_log     |
+--------------------------------------+
9 rows in set (0.00 sec)

##查看连接成功日志表
ProxySQL Admin>  SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC limit 10;
+----------------+------+------------------+-------------------------+---------------+
| hostname       | port | time_start_us    | connect_success_time_us | connect_error |
+----------------+------+------------------+-------------------------+---------------+
| 192.168.208.39 | 3306 | 1626852388933700 | 967                     | NULL          |
| 192.168.208.40 | 3306 | 1626852388898454 | 1841                    | NULL          |
| 192.168.208.39 | 3306 | 1626852386920268 | 910                     | NULL          |
| 192.168.208.40 | 3306 | 1626852386898514 | 1764                    | NULL          |
| 192.168.208.40 | 3306 | 1626852384937959 | 1625                    | NULL          |
| 192.168.208.39 | 3306 | 1626852384897957 | 498                     | NULL          |
| 192.168.208.39 | 3306 | 1626852382918612 | 745                     | NULL          |
| 192.168.208.40 | 3306 | 1626852382898057 | 1815                    | NULL          |
| 192.168.208.40 | 3306 | 1626852380925378 | 1874                    | NULL          |
| 192.168.208.39 | 3306 | 1626852380898444 | 1049                    | NULL          |
+----------------+------+------------------+-------------------------+---------------+

设置MYSQL复制主机组

#ProxySQL 通过监视read_only配置在主机组中的服务器上的值来了解复制拓扑mysql_replication_hostgroups。
ProxySQL Admin> INSERT INTO mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup,comment) VALUES (1,2,'cluster1');
Query OK, 1 row affected (0.00 sec)

ProxySQL Admin> select * from mysql_replication_hostgroups;
+------------------+------------------+------------+----------+
| writer_hostgroup | reader_hostgroup | check_type | comment  |
+------------------+------------------+------------+----------+
| 1                | 2                | read_only  | cluster1 |
+------------------+------------------+------------+----------+
##现在,所有在主机组 1 或 2 中配置的 MySQL 后端服务器将根据它们的 read_only 值放置到各自的主机组中:
#如果有read_only=0,它们将被移动到主机组 1
#如果有read_only=1,它们将被移动到主机组 2

ProxySQL Admin> LOAD MYSQL SERVERS TO RUNTIME;

##监控各节点是否为只读的日志monitor.mysql_server_read_only_log
ProxySQL Admin> SELECT * FROM monitor.mysql_server_read_only_log ORDER BY time_start_us DESC LIMIT 3;
+----------------+------+------------------+-----------------+-----------+-------+
| hostname       | port | time_start_us    | success_time_us | read_only | error |
+----------------+------+------------------+-----------------+-----------+-------+
| 192.168.208.40 | 3306 | 1626853525013946 | 754             | 1         | NULL  |
| 192.168.208.39 | 3306 | 1626853524973692 | 412             | 0         | NULL  |
| 192.168.208.39 | 3306 | 1626853523001607 | 208             | 0         | NULL  |
+----------------+------+------------------+-----------------+-----------+-------+

##查看主机是否通过readonly的值分配到写组和读组
ProxySQL Admin>  SELECT * FROM mysql_servers;
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname       | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 1            | 192.168.208.39 | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
| 2            | 192.168.208.40 | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+

##保存配置
ProxySQL Admin> SAVE MYSQL SERVERS TO DISK;
ProxySQL Admin>  SAVE MYSQL VARIABLES TO DISK;

配置MYSQL用户

ProxySQL Admin>  INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('root','cndatacom',1);
ProxySQL Admin> INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('yjq','!QAZ2wsx',1);
ProxySQL Admin> SELECT * FROM mysql_users;
+----------+--------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+------------+---------+
| username | password     | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | attributes | comment |
+----------+--------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+------------+---------+
| root     | cndatacom    | 1      | 0       | 1                 | NULL           | 0             | 1                      | 0            | 1       | 1        | 10000           |            |         |
| yjq      | !QAZ2wsx | 1      | 0       | 1                 | NULL           | 0             | 1                      | 0            | 1       | 1        | 10000           |            |         |
+----------+--------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+------------+---------+
#通过定义default_hostgroup我们指定用户应该默认连接到哪些后端服务器(即这将是来自特定用户的流量的默认路由,可以配置额外的规则来重新路由,但是在它们缺席的情况下,所有查询都将转到特定的主机组)。
#生效配置
ProxySQL Admin> LOAD MYSQL USERS TO RUNTIME;
ProxySQL Admin> SAVE MYSQL USERS TO DISK;

#ProxySQL 现在已准备好在端口6603上提供流量
[updater@localhost ~]$ mysql -uyjq -p'!QAZ2wsx' -h 192.168.208.39 -P6033 -e"SELECT @@port"
Warning: Using a password on the command line interface can be insecure.
+--------+
| @@port |
+--------+
|   3306 |
+--------+

查询状态日志

##使用mysqlslap工具测试读写
##说明:测试100个并发线程,测试次数1次,自动生成SQL测试脚本,读、写、更新混合测试,自增长字段,测试引擎为innodb,共运行5000次查询
mysqlslap -h192.168.208.39 -uyjq -p'!QAZ2wsx' -P6033 --concurrency=100 --iterations=1 --auto-generate-sql --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=5000
Benchmark
	Running for engine innodb
	Average number of seconds to run all queries: 15.971 seconds ##100个客户端(并发)同时运行这些SQL语句平均要花15.971秒
	Minimum number of seconds to run all queries: 15.971 seconds
	Maximum number of seconds to run all queries: 15.971 seconds
	Number of clients running queries: 100 #总共100个客户端(并发)运行这些sql查询
	Average number of queries per client: 50 #每个客户端(并发)平均运行50次查询(对应--concurrency=100,--number-of-queries=5000;5000/100=50)


##stats库下的表
ProxySQL Admin> SHOW TABLES FROM stats;
+--------------------------------------+
| tables                               |
+--------------------------------------+
| global_variables                     |
| stats_memory_metrics                 |
| stats_mysql_commands_counters        |
| stats_mysql_connection_pool          |
| stats_mysql_connection_pool_reset    |
| stats_mysql_errors                   |
| stats_mysql_errors_reset             |
| stats_mysql_free_connections         |
| stats_mysql_global                   |
| stats_mysql_gtid_executed            |
| stats_mysql_prepared_statements_info |
| stats_mysql_processlist              |
| stats_mysql_query_digest             |
| stats_mysql_query_digest_reset       |
| stats_mysql_query_rules              |
| stats_mysql_users                    |
| stats_proxysql_servers_checksums     |
| stats_proxysql_servers_metrics       |
| stats_proxysql_servers_status        |
+--------------------------------------+
19 rows in set (0.00 sec)

##查看刚刚mysqlslap的查询在哪台机执行,由于没有设置路由规则,所以全都是在39执行
ProxySQL Admin> SELECT * FROM stats.stats_mysql_connection_pool;
+-----------+----------------+----------+--------+----------+----------+--------+---------+-------------+---------+-------------------+-----------------+-----------------+------------+
| hostgroup | srv_host       | srv_port | status | ConnUsed | ConnFree | ConnOK | ConnERR | MaxConnUsed | Queries | Queries_GTID_sync | Bytes_data_sent | Bytes_data_recv | Latency_us |
+-----------+----------------+----------+--------+----------+----------+--------+---------+-------------+---------+-------------------+-----------------+-----------------+------------+
| 1         | 192.168.208.39 | 3306     | ONLINE | 0        | 100      | 101    | 0       | 101         | 5106    | 0                 | 578780          | 325857          | 283        |
| 2         | 192.168.208.40 | 3306     | ONLINE | 0        | 0        | 0      | 0       | 0           | 0       | 0                 | 0               | 0               | 592        |
+-----------+----------------+----------+--------+----------+----------+--------+---------+-------------+---------+-------------------+-----------------+-----------------+------------+

##查看查询类型统计
ProxySQL Admin> select Command,Total_Time_us,Total_cnt from stats_mysql_commands_counters;
+--------------------+---------------+-----------+
| Command            | Total_Time_us | Total_cnt |
+--------------------+---------------+-----------+
| ALTER_TABLE        | 0             | 0         |
| ALTER_VIEW         | 0             | 0         |
| ANALYZE_TABLE      | 0             | 0         |
| BEGIN              | 0             | 0         |
| CALL               | 0             | 0         |
| CHANGE_MASTER      | 0             | 0         |
| COMMIT             | 0             | 0         |
| CREATE_DATABASE    | 2253          | 1         |
| CREATE_INDEX       | 0             | 0         |
| CREATE_TABLE       | 11522         | 1         |
| CREATE_TEMPORARY   | 0             | 0         |
| CREATE_TRIGGER     | 0             | 0         |
| CREATE_USER        | 0             | 0         |
| CREATE_VIEW        | 0             | 0         |
| DEALLOCATE         | 0             | 0         |
| DELETE             | 0             | 0         |
| DESCRIBE           | 0             | 0         |
| DROP_DATABASE      | 0             | 0         |
| DROP_INDEX         | 0             | 0         |
| DROP_TABLE         | 0             | 0         |
| DROP_TRIGGER       | 0             | 0         |
| DROP_USER          | 0             | 0         |
| DROP_VIEW          | 0             | 0         |
| GRANT              | 0             | 0         |
| EXECUTE            | 0             | 0         |
| EXPLAIN            | 0             | 0         |
| FLUSH              | 0             | 0         |
| INSERT             | 1560551997    | 2799      |
| KILL               | 0             | 0         |
| LOAD               | 0             | 0         |
| LOCK_TABLE         | 0             | 0         |
| OPTIMIZE           | 0             | 0         |
| PREPARE            | 0             | 0         |
| PURGE              | 0             | 0         |
| RELEASE_SAVEPOINT  | 0             | 0         |
| RENAME_TABLE       | 0             | 0         |
| RESET_MASTER       | 0             | 0         |
| RESET_SLAVE        | 0             | 0         |
| REPLACE            | 0             | 0         |
| REVOKE             | 0             | 0         |
| ROLLBACK           | 0             | 0         |
| ROLLBACK_SAVEPOINT | 0             | 0         |
| SAVEPOINT          | 0             | 0         |
| SELECT             | 4811469       | 2303      |
| SELECT_FOR_UPDATE  | 0             | 0         |
| SET                | 988           | 1         |
| SHOW_TABLE_STATUS  | 0             | 0         |
| START_TRANSACTION  | 0             | 0         |
| TRUNCATE_TABLE     | 0             | 0         |
| UNLOCK_TABLES      | 0             | 0         |
| UPDATE             | 0             | 0         |
| USE                | 0             | 0         |
| SHOW               | 0             | 0         |
| UNKNOWN            | 84112         | 2         |
+--------------------+---------------+-----------+

#查询信息在stats_mysql_query_digest提供每个后端的查询计数、每个查询的响应时间以及实际查询文本以及查询摘要中进行跟踪,查询摘要是每种查询类型的唯一标识符:

ProxySQL Admin>  SELECT hostgroup hg, sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;
+----+------------+------------+------------------------------------------------------------------+
| hg | sum_time   | count_star | digest_text                                                      |
+----+------------+------------+------------------------------------------------------------------+
| 1  | 1560551997 | 2799       | INSERT INTO t1 VALUES (NULL,?,?)                                 |
| 1  | 4809611    | 2300       | SELECT intcol1,charcol1 FROM t1 WHERE id = ?                     |
| 1  | 80356      | 1          | DROP SCHEMA IF EXISTS `mysqlslap`                                |
| 1  | 11522      | 1          | CREATE TABLE `t1` (id serial,intcol1 INT(?),charcol1 VARCHAR(?)) |
| 1  | 3756       | 1          | DROP SCHEMA IF EXISTS `mysqlslap`                                |
| 1  | 2253       | 1          | CREATE SCHEMA `mysqlslap`                                        |
| 1  | 1303       | 1          | SELECT @@port                                                    |
| 1  | 988        | 1          | set storage_engine=`innodb`                                      |
| 1  | 555        | 1          | SELECT id from t1                                                |
| 1  | 0          | 1          | select @@version_comment limit ?                                 |
+----+------------+------------+------------------------------------------------------------------+

查询路由规则配置

ProxySQL Admin> insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,'^SELECT.*FOR UPDATE$',1,1);

ProxySQL Admin> insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,'^SELECT',2,1);

ProxySQL Admin> load mysql query rules to runtime;

ProxySQL Admin> save mysql query rules to disk;

ProxySQL Admin> SELECT match_digest,destination_hostgroup FROM mysql_query_rules WHERE active=1;
+----------------------+-----------------------+
| match_digest         | destination_hostgroup |
+----------------------+-----------------------+
| ^SELECT.*FOR UPDATE$ | 1                     |
| ^SELECT              | 2                     |
+----------------------+-----------------------+

测试读写分离

##在任意节点执行以下插入sql
mysql -h192.168.208.39 -uyjq -p'!QAZ2wsx' -P6033 -e "insert into testdb.student values(6,'suse',32);"

##查看stats_mysql_query_digest
ProxySQL Admin> SELECT hostgroup hg, sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;
+----+----------+------------+------------------------------------------+
| hg | sum_time | count_star | digest_text                              |
+----+----------+------------+------------------------------------------+
| 1  | 7292     | 1          | insert into testdb.student values(?,?,?) |
| 1  | 0        | 1          | select @@version_comment limit ?         |
+----+----------+------------+------------------------------------------+

##在任意节点执行以下查询sql
mysql -h192.168.208.39 -uyjq -p'!QAZ2wsx' -P6033 -e "select * from testdb.student;"

##查看stats_mysql_query_digest
ProxySQL Admin> SELECT hostgroup hg, sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;
+----+----------+------------+------------------------------------------+
| hg | sum_time | count_star | digest_text                              |
+----+----------+------------+------------------------------------------+
| 1  | 7292     | 1          | insert into testdb.student values(?,?,?) |
| 2  | 669      | 1          | select * from testdb.student             |
| 1  | 0        | 2          | select @@version_comment limit ?         |
+----+----------+------------+------------------------------------------+

##可以看到insert和select语句在不同的组执行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值