mysql主從複製 讀寫分離

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高可用解決方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章