Mysql-Proxy
Mysql-Proxy是mysql官方提供的Mysql中間件服務,上游可接入若干個Mysql-client,後端可連接若干個Mysql-server
它使用Mysql協議,任何使用Mysql-client的上游無需修改任何代碼,即可遷移至Mysql-Proxy上
Mysql-Proxy可以分析與修改請求;攔截查詢和修改結果則需要通過編寫Lua腳本來完成
Mysql-Proxy允許用戶指定Lua腳本對請求進行攔截,對請求進行分析與修改,它還允許用戶指定Lua腳本對服務器的返回結果
進行修改,加入一些結果集或者去除一些結果集均可
特點
1、 sql攔截與修改
2、 性能分析與監控
3、讀寫分離
4、請求路由
操作流程
首先搭建基於 Gtid
的主從複製
server1(master)–rw
ip:172.25.30.1/24
yum install -y mysql-*.rpm
vim /etc/my.cnf
server_id=1
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=true
systemctl start mysqld
cd /var/lib/mysql
grep password /var/log/mysql.log
mysql -uroot -p
alter user root@localhost identified by 'Wps+123ld';
grant replication slave on *.* to repl@'172.25.30.%' identified by 'Wps+123ld';
show master status;
server2(slave)=r
ip:172.25.30.2/24
yum install -y mysql-*.rpm
vim /etc/my.cnf
server_id=2
gtid_mode=ON
enforce_gtid_consistency=true
systemctl start mysqld
cd /var/lib/mysql
grep password /var/log/mysql.log
mysql -uroot -p
alter user root@localhost identified by 'Wps+123ld';
change master to master_host='172.25.30.1',master_user='repl',master_password='Wps+123ld'',master_auto_position=1;
start slave;
show slave status\G;
Slave_IO_Running: Yes
IO線程已正常運行
Slave_SQL_Running: Yes
SQL線程已正常運行
show tables;
gtid_executed
是否添加
server3(proxy)–代理
ip:172.25.30.3/24
yum install -y mysql-*.rpm
tar xf mysql-proxy-*.tar.gz -C /usr/local
cd /usr/local
mv mysql-proxy-* mysql-proxy
cd mysql-proxy/bin
./mysql-proxy --help
./mysql-proxy --help-proxy
mkdir conf
cd conf
vim mysql-proxy.conf
1 [mysql-proxy]
2 proxy-address=0.0.0.0:3306
mysql-proxy運行的端口
3 proxy-read-only-backend-addresses=172.25.30.2:3306
slave節點:只讀
4 proxy-backend-addresses=172.25.30.1:3306
master節點:可讀可寫
5 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
lua腳本的路徑
6 pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid
進程pid的位置
7 log-file=/usr/local/mysql-proxy/log/mysql-proxy.log
日誌位置
8 plugins=proxy
9 log-level=debug
定義日誌級別
10 keepalive=true
mysql-proxy崩潰時嘗試重啓
11 daemon=true
打入後臺
find . -name *.lua
cd share/doc/mysql-proxy
pwd
/usr/local/mysql-proxy/share/doc/mysql-proxy
vim rw-splitting.lua
修改主機數量
40 min_idle_connections = 1,
最小連接數
41 max_idle_connections = 2,
最大連接數
cd /usr/local/mysql-proxy/
mkdir log
建立目錄,存放進程pid和日誌
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
修改配置文件的權限
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
netstat -ntlp
3306 mysql-proxy
cd /usr/local/mysql-proxy/log
cat mysql-proxy.log
查看日誌
測試
server1
mysql -uroot -pWps+123ld
grant insert,update,select on *.* to leon@'%' identified by 'Wps+123ld';
flush privileges;
create database test;
use test;
create table usertb (
-> username varchar(20) not null,
-> password varchar(20) not null);
insert into usertb values ('user1','111');
select * from usertb;
server2
select * from usertb;
數據同步
server3
yum install -y lsof
lsof -i 3306
真實主機1次
mysql -h 172.25.30.3 -uleon -pWps+123ld
show databases;
server3
lsof -i 3306
listen server1
真實主機2次
mysql -h 172.25.30.3 -uleon -pWps+123ld
show databases;
server3
lsof -i 3306
listen server1
真實主機3次
mysql -h 172.25.30.3 -uleon -pWps+123ld
show databases;
server3
lsof -i 3306
listen server2
用戶數量很多的時候,數據庫的代理就會把後端的數據庫實現讀寫分離
server1是寫的數據庫
server2是讀的數據庫
server1和server2滿足gtid的異步複製的時候,真機往數據庫寫入的東西其實是寫入了server1,並沒有寫入server2,server2上面的數據是複製過去的
因此客戶在server1、server2上面都能查到剛剛寫進去的數據
當關閉server1和server2的異步複製的時候,真機往數據庫寫入數據的東西只寫進了server1,沒有寫進去server2,server2也沒有複製一份
因爲server1可以查看到,server2和用戶都查不到剛剛寫進去的數據,此時的客戶讀的是server2