MySQL數據庫(五)——主從複製與讀寫分離

主從複製與讀寫分離

一、數據庫主從複製

主從複製就是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從服務器:

測試數據同步成功

二、數據庫讀寫分離

讀寫分離離不開主從複製,是要在主從複製的基礎上進行

好處:可以減輕緩解主服務器的工作壓力

實現讀寫分離的兩款軟件:AmoebaMySQL-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.6mv 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-proxymkdir logsmkdir 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

登錄數據庫讀寫操作測試

 

 

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