1. 程式人生 > 其它 >基於proxysql實現MySQL讀寫分離

基於proxysql實現MySQL讀寫分離

基於proxysql+主從複製實現MySQL讀寫分離

前言

環境:

  • 系統版本:CentOS 7
  • MySQL版本:5.7.35

MySQL主從配置略過。

安裝

# 安裝
yum localinstall -y ./proxysql-2.2.0-1-centos7.x86_64.rpm
# 啟動
systemctl start proxysql

配置

客戶埠號: 6033。代理 mysql 服務的埠,也就是應用連線使用的

管理埠號: 6032。管理 proxysql配置 的埠,只能本地登入

# 1. 登入管理端
mysql -uadmin -padmin -h127.0.0.1 -P6032

# 2. 配置主從庫
use main;
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(1,'192.168.0.10',3306,1,'master1');
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(2,'192.168.0.11',3306,1,'slave1');
# 2.2 檢查新增結果
select * from main.mysql_servers;
# 2.3 載入配置到RUNTIME
load mysql servers to runtime;
# 2.4 寫盤儲存
save mysql servers to disk;

# 3. 配置proxysql客戶端賬戶密碼。
# 設定所有請求預設到hostgroupid為1的例項然後再根據路由分發
# transaction_persistent為1開啟事務支援
insert into mysql_users(username,password,default_hostgroup,transaction_persistent)values('root','123456',1,1);
# 3.2 查詢賬戶新增結果
select * from mysql_users;
# 3.3 儲存
load mysql users to runtime;
save mysql users to disk;

# 4. 配置健康檢測賬號
# 4.1 登入後端master的mysql控制檯
GRANT replication client ON *.* TO 'monitor'@'%' IDENTIFIED BY '123456';
flush privileges;
# 4.2 切換回proxy的控制檯
set mysql-monitor_username='monitor';
set mysql-monitor_password='123456';
load mysql variables to runtime;
save mysql variables to disk;

# 5. 配置讀寫分離路由
# 將select語句全部路由至hostgroup_id=2的組,也就是從節點
# select * from tb for update這樣的語句是修改資料的,所以需要單獨定義,將它路由至hostgroup_id=1的組(也就是主節點)
# 其他沒有被規則匹配到的組將會被路由至使用者預設的組(mysql_users表中的default_hostgroup)
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,'^SELECT.*FOR UPDATE$',1,1);
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,'^SELECT',2,1);

load mysql query rules to runtime;
load admin variables to runtime;
save mysql query rules to disk;
save admin variables to disk;

測試讀寫分離

  1. 登入客戶端
mysql -uroot -p'123456' -P6033 -h 127.0.0.1
# 隨便執行點sql語句
  1. proxysql有個類似審計的功能,可以看到各類sql的執行情況。在proxysql管理端執行:
select * from stats.stats_mysql_query_digest;
-- 或者 select hostgroup,schemaname,digest_text,count_star,sum_time,min_time,max_time,sum_rows_affected,sum_rows_sent from stats.stats_mysql_query_digest;

其它

  • 修改proxysql後臺處理MySQL流量的後臺執行緒數。預設為4
set mysql-threads=16;
-- 檢視
show variables like '%mysql-threads%';

參考文章