1. 程式人生 > >基於mysql-proxy配置mysql讀寫分離

基於mysql-proxy配置mysql讀寫分離

原理圖

在這裡插入圖片描述

環境說明

  • 已關閉防火牆、selinux;
  • 已二進位制安裝mysql-5.7.22版本;
  • 已配置好mysql主從,配置詳情請參照mysql主從配置
  • 所用主機所用IP地址如下:
IP地址 角色 安裝
192.168.91.128 mysql-proxy中介軟體 mysql-proxy、mariadb
192.168.91.135 master(write) mysql-5.7.22
192.168.91.136 salve(read) mysql-5.7.22

配置步驟

  • 在192.168.91.128主機上,下載mysql-proxy(點選下載),並解壓
[[email protected] ~]# tar -xf mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz -C /usr/local/
[[email protected] ~]# ln -s /usr/local/mysql-proxy-0.8.4-linux-el6-x86-64bit/ /usr/local/mysql-proxy
[
[email protected]
~]# ll /usr/local/ lrwxrwxrwx. 1 root root 49 Nov 26 16:53 mysql-proxy -> /usr/local/mysql-proxy-0.8.4-linux-el6-x86-64bit/
  • 備份配置檔案,並新增主配置檔案,並將主配置檔案許可權修改為660
[[email protected] ~]# cd /usr/local/mysql-proxy
## 備份讀寫分離配置檔案 ##
[[email protected] mysql-proxy]# cp share/doc/mysql-proxy/rw-splitting.lua{,.bak}
## 備份管理指令碼 ##
[
[email protected]
mysql-proxy]# cp share/doc/mysql-proxy/admin-sql.lua{,.bak} ## 建立主配置檔案目錄 ## [[email protected] mysql-proxy]# mkdir /etc/mysql-proxy [[email protected] mysql-proxy]# vim /etc/mysql-proxy/mysql-proxy.conf [mysql-proxy] user=root ##執行mysql-proxy使用者 admin-username=sepa ##主從mysql共有使用者 admin-password=123456 ##使用者密碼 proxy-address=192.168.91.128:4040 ##mysql-proxy執行ip和埠,不加埠,預設4040 proxy-read-only-backend-addresses=192.168.91.136 ##指定後端從slave讀取資料 proxy-backend-addresses=192.168.91.135 ##指定後端主master寫入資料 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua ##指定讀寫分離配置檔案位置 admin-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/admin-sql.lua ##指定管理指令碼 log-file=/tmp/mysql-proxy.log ##日誌檔案位置,目錄必須存在 log-level=info ##定義log日誌級別,由高到低分別有{error|warning|info|message|debug} daemon=true ##已守護程序方式執行,不能掉 keepalive=true ##mysql-proxy崩潰時,嘗試重啟 [[email protected] mysql-proxy]# chmod 660 /etc/mysql-proxy/mysql-proxy.conf
  • 修改讀寫分離配置檔案
[[email protected] mysql-proxy]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua 
......
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1,
                max_idle_connections = 1,

                is_debug = false
        }
end
......
  • 啟動mysql-proxy
[[email protected] mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy/mysql-proxy.conf
[[email protected] mysql-proxy]# ss -ntl
State      Recv-Q Send-Q                    Local Address:Port                      Peer Address:Port   
LISTEN     0      128                      192.168.91.128:4040                                 *:*     
  • 在192.168.91.35主機上(master),建立管理使用者並授權,從伺服器同步相應的操作
mysql> grant all on *.* to 'sepa'@'192.168.91.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
  • 在192.168.91.128主機上使用授權使用者登入資料庫
[[email protected] mysql-proxy]# yum -y install mariadb
[[email protected] mysql-proxy]# mysql -usepa -p123456 -h192.168.91.128 -P4040
Welcome to the MariaDB monitor.  Commands end with ; or \g.

MySQL [(none)]> show  databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)
  • 在192.168.91.136主機上,將從同步功能停止掉;在192.168.91.128主機上建立資料庫並查詢資料庫來驗證讀寫分離是否成功
## 在192.168.91.128主機上執行 ##
MySQL [(none)]> create database test;
Query OK, 1 row affected (0.00 sec)

## 在192.168.91.136主機上執行 ##
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

## 在192.168.91.128主機上執行 ##
MySQL [(none)]> create table mysql.haha(id int not null,name char not null);
Query OK, 0 rows affected (0.02 sec)

MySQL [(none)]> show tables from test;
Empty set (0.00 sec)
注:查不到表則說明寫是在192.168.91.135(master)主機上執行的,讀則在192.168.91.136(slave)主機上執行