proxySQL是MySQL的中間件產品,是靈活強大的代理層,實現讀寫分離,支持Query路由功能,支持動態指定某個SQL進行緩存,支持動態加載配置,故障切換和一些SQLnode
過濾功能mysql
環境:git
192.168.139.152 proxy SQL中間件 server-id=1github
192.168.139.153 master mysql server-id=2sql
192.168.139.154 slave mysql server-id=3數據庫
proxy SQL更多信息能夠訪問 https://github.com/sysown/proxysql/wiki後端
要點:全部節點都安裝MySQL並修改/etc/my.cnf 中的server-idcentos
更新root密碼123qweASD!緩存
修改配置文件/etc/my.cnf服務器
[mysqld]
server-id=1
從節點read_only=on
yum install -y perl-DBD-MySQL perl-DBI perl-Time-HiRes perl-IO-Socket-SSL
cat <<EOF | tee /etc/yum.repos.d/proxysql.repo [proxysql_repo] name= ProxySQL YUM repository baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever gpgcheck=1 gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key EOF
安裝proxy SQL
yum install -y proxysql
proxysql配置文件的路徑爲 /etc/proxysql.cnf
啓動proxy SQL
service proxysql start
查看proxysql版本:
proxy SQL--version
proxy SQL 默認用戶名/密碼 admin/admin
proxysql 管理端口6032 對外服務端口6033
登錄proxysql :
mysql -u admin -padmin -h 127.0.0.1 -P 6032
MySQL>show databases; 顯示5個數據庫 main disk stats monitor stats_history
main 內存配置數據庫,即MEMORY ,表裏存放後端db實例,用戶驗證,路由規則等信息
主要表:mysql_servers 後端能夠鏈接MySQL服務器的列表
mysql_users 配置後端數據庫的帳戶和監控帳戶
mysql_query_rules 指定Query路由到後端不一樣服務器的規則列表
注:runtime 開頭的表,表示當前運行的配置,不可修改;其他表修改後,LOAD使其生效,SAVE使其存到硬盤以供下次重啓加載
master 節點建立proxy SQL監控帳戶:
create user 'monitor'@'192.168.139.%' identified by '123qweASD!';
grant all privileges on *.* to 'monitor'@'192.168.139.%' with grant option;
master節點建立對外訪問帳戶:
mysql> create user 'zs'@'192.168.139.%' identified by '123qweASD!';
mysql> grant all privileges on *.* to 'zs'@'192.168.139.%' with grant option;
proxy SQL節點:添加主服務器列表 將主從MySQL加進去,本身不加
mysql -uadmin -padmin -h 127.0.0.1 -P 6032
mysql>insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.139.153',3306);
mysql>insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.139.154',3306);
mysql>load mysql servers to runtime;
mysql>save mysql servers to disk;
機器的狀態都是online狀態
proxysql配置監控帳號
mysql> set mysql-monitor_username='monitor';
mysql> set mysql-monitor_password='123qweASD!'; ===》 /etc/proxysql.cnf 中的monitor_password也要修改
配置proxy SQL主從分組
mysql> insert into mysql_replication_hostgroups values(10,20,'proxy');
mysql> load mysql servers to runtime;
mysql> save mysql servers to disk;
![](http://static.javashuo.com/static/loading.gif)
配置對外訪問帳號,默認指定庫,並對該用戶開啓事務持久化保護
mysql> insert into mysql_users(username,password,default_hostgroup) values('zs','123qweASD!',10);
mysql> update mysql_users set transaction_persistent=1 where username='zs';
mysql> load mysql users to runtime;
mysql> save mysql users to disk;
驗證登錄服務器就:
是主庫
![](http://static.javashuo.com/static/loading.gif)
讀寫分離策略配置
mysql> insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,'^SELECT.*FOR UPDATE$',10,1); ===》寫
mysql> insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,'^SELECT',20,1); ===》讀
mysql> load mysql query rules to runtime;
mysql> save mysql query rules to disk;
讀寫分離測試:
mysql -u zs -p123qweASD! -h 192.168.139.152 -P 6033 登錄proxysql所在機器登錄數據庫
mysql> select * from mysql.user; 讀操做
mysql> create database zhangyu ; 寫操做
登錄proxysql管理帳戶
![](http://static.javashuo.com/static/loading.gif)
10 是寫庫組 20是讀庫組
調整權重,讓某個機器承受更多讀操做
mysql> update mysql_servers set weight=10 where hostname='192.168.139.154';
mysql> load mysql servers to runtime;
mysql> save mysql servers to disk;
![](http://static.javashuo.com/static/loading.gif)