主從複製與讀寫分離
一、數據庫主從複製
主從複製就是MySQL主服務器和MySQL從服務器進行數據同步(從服務器同步主服務器的數據)
原理:1.Master在每個事務更新數據完成前,在二進制日誌中記錄這些變化,寫入二進制文件完成後通知存儲引擎提交事務
2.Slave從服務器將Master的Binary log複製到其中繼日誌,開啓一個I/O線程,在Master主服務器上建立一個普通連接,從Master主服務器的二進制日誌上讀取事件,並記錄到自己的中繼日誌上(會不斷等待隨着主服務器更新)
3.SQL slave thread(SQL從線程)從中繼日誌上讀取事件,重放這些事件,實現與Master主服務器同步
主從複製配置
1.實現主從服務器時間同步,3臺服務器上安裝mysql(查看之前的mysql安裝筆記)
2.主服務器配置
配置修改mysql配置文件(記得重啓mysql服務):vim /etc/my.cnf
給從服務器授權
grant replication slave on *.* to 'myslave'@'192.168.0.%' identified by '123456';
3.配置Slave從服務器(兩臺從服務器一致)
配置修改mysql配置文件(記得重啓mysql服務):vim /etc/my.cnf
登錄數據庫:mysql -uroot -p123456
同步Master主服務器(同步之後記得重啓數據庫):
mysql>change master to master_host='192.168.0.101',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=572;
master_log_file:Master主服務器二進制日誌名
master_log_pos:二進制日誌位置變量
查看master_log_file和master_log_pos的值(在主服務器上查看,下圖所示)
mysql> show master status;
補充:master_log_pos設置爲0會自動獲取master_log_pos的值
查看數據同步Slave的狀態(下圖所示)
mysql> show slave status\G
確保紅線圈起來的兩個值都是Yes
4.測試
在Master主服務器上創建一個庫創建一個表添加數據,在從服務器上查看是否同步
Master主服務器:
Slave從服務器:
測試數據同步成功
二、數據庫讀寫分離
讀寫分離離不開主從複製,是要在主從複製的基礎上進行
好處:可以減輕緩解主服務器的工作壓力
實現讀寫分離的兩款軟件:Amoeba和MySQL-Proxy
配置環境如下圖所示
Amoeba配置安裝
Amoeba需要JDK的支持,是基於jdk1.5開發,建議最好使用jdk1.5或jdk1.6的版本
1.下載安裝jdk
./jdk-6u14-linux-x64.bin
2.創建文件夾,把解壓出來的文件移動到/usr/local/jdk1.6下
mkdir /usr/local/jdk1.6》mv jdk1.6.0_14 /usr/local/jdk1.6
3.在/etc/profile文件裏配置添加環境變量,運行該文件
vim /etc/profile
然後source /etc/profile
4.安裝amoeba
解壓到新建的amoeba文件夾下給予權限
tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
啓動(顯示下圖結果爲安裝成功)
5.三臺數據庫服務器上給予授權
mysql>grant all on *.* to test@'192.168.0.%' identified by '123456';
6.配置amoeba.xml配置文件
vim /usr/local/amoeba/conf/amoeba.xml
7.配置dbServers.xml配置文件
vim /usr/local/amoeba/conf/dbServers.xml
8.啓動服務測試
/usr/local/amoeba/bin/amoeba start
測試在測試機上登錄數據庫
測試讀寫分離功能
Master主服務器創建一個庫關閉兩個Slave從服務器的slave功能,然後對兩個從服務器寫入不同的數據,去查看這個數據看是否實現讀從服務器的功能,再寫入數據,測試機會查詢不到這條消息,因爲關閉了slave從服務器的slave功能,沒有同步
從服務器192.168.0.103
從服務器192.168.0.104
Master主服務器192.168.0.101
測試機測試
發現只能查詢兩個從服務器上的數據,只有在主服務器本機才能查詢本機上的數據則成功
MySQL-Proxy安裝與配置(源碼包安裝)
1.下載解壓安裝包
tar zxf 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
2.創建存放配置文件和日誌的目錄
cd /usr/local/mysql-proxy》mkdir logs》mkdir conf
3.創建修改配置文件和啓動腳本
vim /usr/local/mysql-proxy/conf/mysql-proxy.conf
[mysql-proxy]
user=root
proxy-address=0.0.0.0:3306 \\所有IP的3306端口
proxy-backend-addresses=192.168.0.101:3306 \\設置master的ip,寫數據
proxy-read-only-backend-addresses=192.168.0.103:3306 \\設置slave的ip,讀數據
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua \\腳本所在位置
log-file=/usr/local/mysql-proxy/logs/msyql-proxy.log \\日誌存放位置
log-level=debug \\日誌模式
daemon=true \\打入後臺
keepalive=true
4.修改管理進程的腳本
vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
min_idle_connections = 1,
max_idle_connections = 2,
5.設置配置文件權限並啓動服務
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
6.查看端口並測試
netstat -antlp | grep mysql-proxy
登錄數據庫讀寫操作測試