1. 程式人生 > 資料庫 >Proxysql主從讀寫分離安裝配置例子

Proxysql主從讀寫分離安裝配置例子

       Proxysql安裝配置  

1.ProxySQL 介紹
ProxySQL 是基於 MySQL 的一款開源的中介軟體的產品(類似MYCAT),是一個靈活的 MySQL 代理層,可以實現讀寫分離,支援 Query 路由功能,支援動態指定某個 SQL 進行快取,支援動態載入(無需重啟 ProxySQL 服務),故障切換和一些 SQL 的過濾功能。

1.安裝架構
IP Server-id 資料庫版本 備註
192.168.2.153 1 MySQL 客戶端 ProxySQL2.0.15
192.168.2.103 2 MySQL 8.0.18服務 Master(主庫)
192.168.2.169 3 MySQL 8.0.18服務 Slave1(從庫)

192.168.2.251 4 MySQL 8.0.18服務 Slave1(從庫)

2.安裝部署方法
步驟1:192.168.2.153上安裝依賴包
作業系統環境為centos 6.5

為下載好的依賴包要依次按順序安裝,用root使用者執行
rpm -ivh perl-DBI-1.616-1.el6.rfx.x86_64.rpm
rpm -ivh perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
rpm -ivh proxysql-2.0.15-1-centos67.x86_64.rpm

2.驗證安裝是否正常
執行命令rpm -ql proxysql

圖上屬於安裝正常
vi /etc/proxysql.cnf

修改這2個值,第一個執行緒數32,第二個是MYSQL的版本這個要對應你伺服器安裝MYSQL的版本。

3.啟動代理服務
service proxysql start
驗證啟動成功

4.所有資料庫建立代理MYSQL賬號
192.168.2.103,192.168.2.169,192.168.2.251分離建立代理使用者

使用者名稱:proxysql
密碼設定為:pwproxysql
賦予全部許可權(因為監管程式有一些建索引需求)
建完使用者之後
ALTER USER ‘proxysql’@’%’ IDENTIFIED WITH mysql_native_password BY ‘pwproxysql’;

FLUSH PRIVILEGES;
然後再其他電腦上能通過賬號聯入即可,用Navicat for MySQL在其他電腦上驗證,能查詢!
或者用mysql -u -p -h 命令其他伺服器上測試!
然後每個MYSQL伺服器執行
set global max_connect_errors = 900000000000;
show variables like ‘max_connect_errors’;
flush hosts;

5.建立監控賬號
192.168.2.103,192.168.2.169,192.168.2.251分離建立監控使用者

使用者名稱:monitor
密碼設定為:monitor
賦予全部許可權建完使用者之後
ALTER USER monitor@’%’ IDENTIFIED WITH mysql_native_password BY ‘monitor’;
FLUSH PRIVILEGES;
然後再其他電腦上能通過賬號聯入即可,用Navicat for MySQL在其他電腦上驗證,能查詢!
或者用mysql -u -p -h 命令其他伺服器上測試!

6.進入到192.168.2.153(6032埠跟6033埠需要開啟防火牆)
mysql -h 127.0.0.1 -P 6032 -u admin -padmin

如果該伺服器沒有安裝過MYSQL,則需要安裝MYSQL客戶端

rpm -Uvh mysql-community-common-8.0.16-2.el6.x86_64.rpm
rpm -Uvh mysql-community-libs-8.0.16-2.el6.x86_64.rpm
rpm -Uvh mysql-community-libs-compat-8.0.16-2.el6.x86_64.rpm
rpm -Uvh mysql-community-client-8.0.16-2.el6.x86_64.rpm

安裝完成之後,成功登入代理管理端埠6032

執行下面:
set mysql-default_charset=‘utf8mb4’;
set mysql-default_sql_mode=‘NO_ENGINE_SUBSTITUTION’;
set mysql-mysql-max_allowed_packet=67108864;
set mysql-ping_interval_server_msec=300000; #sleep會話保持時長300s
set mysql-max_connections=4000; #ProxySQL能處理的和前端客戶端的最大連線
set mysql-server_version=‘8.0.16’; #proxysql響應給客戶端的MySQL版本號

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

執行
insert into mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup,comment) values(1,2,‘高可用’);

insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(1,‘192.168.2.103’,3306,1,‘Write Group’);
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(2,‘192.168.2.169’,3306,1,‘Read Group’);
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(2,‘192.168.2.251’,3306,1,‘Read Group2’);

Insert into mysql_users (username,password,default_hostgroup) values (‘proxysql’,‘pwproxysql’,1);

Insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (1,1,’^select.*for update$’,1,1);
 
Insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (2,1,’^select’,2,1);

驗證是不是各個MYSQL是不是正常通的
select * from mysql_server_ping_log;

null就代表是正常的,如果不正常會有異常報錯資訊!

//載入到記憶體
load mysql users to runtime;
load mysql servers to runtime;
load mysql query rules to runtime;
load mysql variables to runtime;
load admin variables to runtime;
//永久生效

save mysql users to disk;
save mysql servers to disk;
save mysql query rules to disk;
save mysql variables to disk;
save admin variables to disk;

驗證成功
mysql -uproxysql -ppwproxysql -P6033 -h127.0.0.1 -e “select @@datadir”;

mysql -uproxysql -ppwproxysql -P 6033 -h 127.0.0.1 -e “select @@server_id;”
每個SELECT每次執行都分開查不同的資料庫例項!