MySQL是開源的關係型數據庫系統。
複製(Replication)是從一臺MySQL數據庫服務器(主服務器master)複製數據到另一個服務器(從服務器slave)的一個進程
MySQL Proxy有一項強大功能是實現“讀寫分離”,基本原理是讓主數據庫處理寫方面事務,讓從庫處理SELECT查詢。
實驗環境
CentOS6.8_x64
mysql_master 192.168.1.109
mysql_slave 192.168.1.111
mysql_proxy 192.168.1.117
實驗軟件
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
軟件安裝
sed -i 's/^mirrorlist=https/mirrorlist=http/' /etc/yum.repos.d/*.repo
yum install -y mysql mysql-libs mysql-server lua
service mysqld restart
mysqladmin -uroot password 數據庫密碼
mysql --version
mysql Ver 14.14 Distrib 5.1.73
mysql -uroot -p 數據庫密碼
mysql> 以上操作master slave端都是一致
cp -pv /etc/my.cnf /etc/my.cnf.bak
[mysqld]
server-id=1 master端配置
log-bin=mysql-bin master/slave端配置
service mysqld restart
chkconfig --level 35 mysqld on
cp -pv /etc/my.cnf /etc/my.cnf.bak
scp /etc/my.cnf [email protected]:/etc/my.cnf
sed -i "s/server_id = 1/server_id = 2/g" /etc/my.cnf
service mysqld restart slave端配置
chkconfig --level 35 mysqld on
mysql -uroot -p
mysql> grant replication slave on *.* to 'root'@'192.168.1.111' identified by '123456'; 192.168.1.111爲slave ip
mysql> grant all on *.* to 'proxy'@'192.168.1.181' identified by '123.com'; 創建proxy共享賬號
mysql> flush privileges;
mysql> show master status;
| mysql-bin.000001 | 323 | master端操作
mysql -uroot -p slave端操作
mysql> stop slave;
mysql> reset slave;
mysql> change master to
-> master_host='192.168.1.109', master端ip
-> master_user='root', master端數據庫用戶名
-> master_password='123456', master端數據庫密碼
-> master_log_file='mysql-bin.000001',
-> master_log_pos=323; 這兩個文件按照master端實際情況而定,次操作爲slave端
mysql> start slave;
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 這兩行必須是yes實現主從複製
測試主從同步
mysql> create database test_1 master端操作
mysql> show databases;
| test_1 | master端
mysql> show databases;
| test_1 | slave端
tar zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
mkdir -pv /usr/local/mysql-proxy/{lua,logs}
touch /usr/local/mysql-proxy/logs/mysql-proxy.log
cp -pv /usr/local/mysql-proxy/share/doc/mysql-proxy/{rw-splitting.lua,admin-sql.lua} /etc/lua
cp -pv /usr/local/mysql-proxy/share/doc/mysql-proxy/{rw-splitting.lua,admin-sql.lua} /usr/local/mysql-proxy/lua/
cat > /etc/mysql-proxy.cnf << EOF 默認沒有配置文件需要手動創建
> [mysql-proxy]
> user=root 運行mysql-proxy用戶
> admin-username=proxy 主從mysql共享用戶
> admin-password=123.com mysql共享用戶密碼
> proxy-address=192.168.1.117:4040 mysql-proxy server ip 端口號默認4040
> proxy-read-only-backend-addresses=192.168.1.111 mysql_slave端 ip
> proxy-backend-addresses=192.168.1.109 mysql_master端ip
> proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua 指定讀寫分離腳本位置
> admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua 指定管理腳本
> log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log 指定日誌文件位置
> log-level=info log日誌級別,由高到低分別有(error|warning|info|message|debug)
> daemon=true 以守護進程方式運行
> keeplive=true mysql-proxy 崩潰時,嘗試重啓
> EOF
chmod 660 /etc/mysql-proxy.cnf
chown -R root:root /usr/local/mysql-proxy/
cp -pv /usr/local/mysql-proxy/lua/rw-splitting.lua /usr/local/mysql-proxy/lua/rw-splitting.lua.bak
sed -i "s/min_idle_connections = 4,/min_idle_connections = 1,/g" /usr/local/mysql-proxy/lua/rw-splitting.lua
sed -i "s/max_idle_connections = 8,/max_idle_connections = 1,/g" /usr/local/mysql-proxy/lua/rw-splitting.lua
ln -s /usr/local/mysql-proxy/bin/mysql-proxy /usr/bin/mysql-proxy
mysql-proxy --daemon --defaults-file=/etc/mysql-proxy.cnf & 啓動服務
killall -9 mysql-proxy
cp -pv /etc/rc.d/rc.local /etc/rc.d/rc.local.bak
echo "mysql-proxy --daemon --defaults-file=/etc/mysql-proxy.cnf &" >> /etc/rc.d/rc.local 設置開機啓動
netstat -tuplna | grep 4040
tcp 0 0 192.168.10.181:4040 0.0.0.0:* LISTEN 47402/mysql-proxy
netstat -tuplna | grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 22233/mysqld
tcp 0 0 192.168.1.109:3306 192.168.1.111:41406 ESTABLISHED 22233/mysqld
tail -f /usr/local/mysql-proxy/logs/mysql-proxy.log
2019-01-22 11:02:24: (critical) plugin proxy 0.8.5 started
2019-01-22 11:02:24: (message) proxy listening on port 192.168.1.117.:4040
2019-01-22 11:02:24: (message) added read/write backend: 192.168.1.111
2019-01-22 11:02:24: (message) added read-only backend: 192.168.10.109
mysql -uproxy -h192.168.1.109 -p4040 -p123.com proxy代理服務器用戶名 -h master_mysql ip -p proxy密碼,測試如果可以連接說明配置成功
root用戶用於實驗,生產環境不可做此操作。如果有3-5臺mysql可以使用MHA mysql高可用解決方案