Mysql讀寫分離實驗
需要三臺服務器
192.168.254.11 Mysql master ---read/write
192.168.254.12 Mysql slave ---read
192.168.254.13 Mysql Proxy
預安裝mysql
準備工作
要做讀寫分離,先做主從同步
在master上
Vi /etc/mysql/my.cnf
如果有註銷:
bind-address127.0.0.1
如果沒有添加:
Log-bin
Server-id=1
重啓mysql服務
/etc/init.d/mysqld restart
登錄mysql
Mysql –uroot –p
創建一共享賬號
Grant all on *.* to ‘root’@’%’ identified by ‘root113’
查看並記錄當前二進制日誌狀態
Show master status;
在slave上
Vi /etc/mysql/my.cnf
如果有註銷:
bind-address127.0.0.1
如果沒有添加:
Log-bin
Server-id=10##這個值需要比master大,沒有其他的機器使用
重啓mysql服務
/etc/init.d/mysqld restart
登錄mysql執行同步語句
Msyql –uroot –p
Change master to
Master_host=’192.168.254.11’,
Master_user=’root’,
Master_password=’root113’,
Master_log_file=’mysql-bin.000021’,
Master_log_pos=106;
Start slave
Show slave status\G
Slave_IO_Runningyes
Slave_SQL_Runningyes
創建一個共享賬號,這裏不需要主要是後面讀寫分離時用到
Grant all on *.* to ‘root’@’%’ identified by ‘root113’
Quit
如果主數據庫有數據:
取消主數據庫表鎖定
Flush tables with read lock;
查看主數據庫狀態
Show master status
記錄file和positon值
複製主數據庫的數據文件/var/lib/mysql到從服務器
取消表鎖定
Unlock tables;
到這裏mysql主從同步就完成了
可以在master上隨便做點操作試試,看slave是否有同步
做讀寫分離
在proxy主機上
需要軟件mysql-proxy,下載地址:
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/
這裏下載源碼的安裝了幾次不成功,emerge也沒法安裝,只能下在編譯好的數據包了
Tar zxvf mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz –C /usr/local
Mv mysql-proxy-0.8.4-linux-glibc2.3-x86-32 mysql-proxy
Export PATH=$PATH:/usr/local/mysql-proxy/bin
Echo “PATH=$PATH:/usr/local/mysql-proxy/bin” >> /etc/profile
啓動mysql-proxy
mysql-proxy --daemon --log-level=debug --user=mysql-proxy --keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy"
--proxy-backend-addresses="192.168.254.11:3306"
--proxy-read-only-backend-addresses="192.168.254.12:3306"
--proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"
--plugins=admin --admin-username="admin"
--admin-password="admin"
--admin-lua-script="/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua"
這裏我們看到已經啓動,端口4040(4041是管理端口)
測試
開臺測試機器
通過mysql proxy連接
Mysql –uroot –proot113 –h 192.168.254.13 –port=4040
登錄管理端口
Mysql –uadmin –padmin –h 192.168.254.13 –port=4041
## 這個用戶名密碼是mysql-proxy啓動時設置的
正常狀態
備註:剛開始測試時會遇到下圖情況,這個是正常的,主要是默認mysql-proxy做分離的最小值是4個鏈接,所以測試時沒有轉到slave機器上
修改方法
vi /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
修改min_idle_connections值和max_idle_connections值
Mysql-proxy啓動參數
--help-all :獲取全部幫助信息;
--proxy-address=host:port :代理服務監聽的地址和端口;
--admin-address=host:port :管理模塊監聽的地址和端口;
--proxy-backend-addresses=host:port :後端mysql服務器的地址和端口;
--proxy-read-only-backend-addresses=host:port :後端只讀mysql服務器的地址和端口;
--proxy-lua-script=file_name :完成mysql代理功能的Lua腳本;
--daemon :以守護進程模式啓動mysql-proxy;
--keepalive :在mysql-proxy崩潰時嘗試重啓之;
--log-file=/path/to/log_file_name :日誌文件名稱;
--log-level=level :日誌級別;
--log-use-syslog :基於syslog記錄日誌;
--plugins=plugin:在mysql-proxy啓動時加載的插件;
--user=user_name :運行mysql-proxy進程的用戶;
--defaults-file=/path/to/conf_file_name : 默認使用的配置文件路徑;其配置段使用[mysql-proxy]標識;
--proxy-skip-profiling : 禁用profile;
--pid-file=/path/to/pid_file_name :進程文件名;