歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> 學習Linux

Mysql主從復制,讀寫分離(mysql-proxy),雙主結構完整構建過程,mysqlmysql-proxy

Mysql主從復制,讀寫分離(mysql-proxy),雙主結構完整構建過程,mysqlmysql-proxy

Mysql主從復制,讀寫分離(mysql-proxy),雙主結構完整構建過程,mysqlmysql-proxy


下面介紹MySQL主從復制,讀寫分離,雙主結構完整構建過程,不涉及過多理論,只有實驗和配置的過程。 
Mysql主從復制(轉載請注明出處,博文地址:) 
原理是master將改變記錄到二進制日志(binary log),slave將master的binary log拷貝到中繼日志(relay log),slave通過中繼日志同步master的操作。 
1,實驗環境,實驗有2台Ubutu server 14都安裝了mysql服務器,在相同的IP段 
172.16.34.212(主), 
172.16.34.156(從).

2,將這兩台IP授權,允許其它IP通過賬號密碼進行訪問(如添加個euht賬號允許所有外部IP以密碼123456訪問),分別登錄進兩台機子的mysql執行如下語句 
Grant all privileges on . to ‘euht’@’%’ identified by ‘123456’ with grant option; 
Flush privileges; 
這裡寫圖片描述

注: 
①上述代碼的意思是創建一個euht用戶,host=%,允許所有IP通過用戶名euht進行訪問。添加完刷新權限。 
②此時兩台機子的mysql應該是可以相互訪問的,如果不可以,導致的原因有很多,最常見的是防火牆沒關,mysql服務器綁定了本地地址。通過如下方法一般可解決問題 
關閉防火牆,或開放3306端口 
這裡寫圖片描述 
更改my.cnf文件,把bind-address注釋掉 
vi /etc/mysql/my.cnf 
這裡寫圖片描述 
3,找到主服務器172.16.34.212MySQL安裝文件夾修改my.cnf(etc/mysql/my.cnf)文件,在[mysqld]下面增加下面幾行代碼 
server-id=1 
log-bin=master-bin 
log-bin-index=master-bin.index 
保存後重啟mysql(service mysql restart;) 
注:如果只需要同步特定的庫,如上添加代碼,binlog-do-db =euht ,用於master-slave的具體數據庫 
4,進入mysql後,查看主服務器mysql master狀態,日志File為master-bin.000001,Position為107(記下這兩個值,後面進行從服務器操作的時候需要用到) 
這裡寫圖片描述 
5,配置從服務器(172.16.34.156) 
同樣配置從服務器允許外部IP訪問(參考第2點)

配置日志文件

找到從服務器172.16.34.156MySQL安裝文件夾修改my.cnf(etc/mysql/my.cnf)文件,在[mysqld]下面增加下面幾行代碼(server-id跟主服務器不要相同了) 
server-id=10 
log-bin=master-bin 
log-bin-index=master-bin.index

6,連接到主服務器(連接上156的mysql執行以下語句,更改相應的內容) 
change master to 
master_host=’172.16.34.212’, 
master_user=’euht’, 
master_password=’123456’, 
master_log_file=’master-bin.000001’, 
master_log_pos=107;

7,啟動slave 
mysql> start slave;

8,查看slave狀態 
mysql> show slave status\G 
其中Slave_IO_Running 與 Slave_SQL_Running 的值都必須為YES,才表明狀態正常。 
這裡寫圖片描述 
以上已經可以實現172.16.34.162主服務器的庫的所有變化同步到從服務器172.16.34.156

測試如下: 
1,如圖兩台服務器都沒自定義數據庫 
這裡寫圖片描述

2,創建一個數據庫到主庫(172.16.34.212),然後刷新從庫觀察情況(172.16.34.156) 
這裡寫圖片描述

觀察得出212的所有操作都同步到從156從庫了。至此主從復制完成。 
注意以下幾點: 
1,做主從復制時,首先確定兩台服務器的mysql沒任何自定義庫(否則只可以配置完後之前的東西沒法同步,或者兩個庫都有完全相同的庫應該也是可以同步)
2,server_id必須配置不一樣 
3,防火牆不能把mysql服務端口給攔截了(默認3306) 
4,確保兩台mysql可以相互訪問(即需要第二步操作) 
5,重置master,slave。Reset master;reset slave;開啟關閉slave,start slave;stop slave; 
Mysql讀寫分離

以上工作做完後可以開始搭建讀寫分離,讀寫分離目前主要的幾種方式: 
1,MySQL Proxy(中間件) 
2,Amoeba for MySQL(中間件) 
3,Mycat(中間件) 
4,應用層實現 
下面介紹用MySQL Proxy實現讀寫分離。Mysql Proxy一般安裝到單獨的一台服務器來進行讀寫調度,以下添加一台IP來安裝mysql-proxy調度器,IP為172.16.34.236 
1,首先安裝mysql-proxy 
apt-get install mysql-proxy

2,實現讀寫分離是有lua腳本實現的,現在mysql-proxy裡面已經集成,無需再安裝。 
3,配置連接數達到多少才讀寫分離,此處改為1,1個連接就開始讀寫分離 
vim /usr/share/mysql-proxy/rw-splitting.lua

這裡寫圖片描述

4,啟動mysql-proxy,主庫用於寫172.16.34.212,從庫用於讀172.16.34.156 
sudo mysql-proxy –proxy-read-only-backend-addresses=172.16.34.156:3306 –proxy-backend-addresses=172.16.34.212:3306 –proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua –admin-username=euht 
–admin-password=123456 
–admin-lua-script=/usr/share/mysql-proxy/admin.lua 
5,啟動後默認占用端口4040和4041。4040用於SQL轉發,4041用於管理mysql-proxy。(netstat -tupln|grep mysql-proxy) 
這裡寫圖片描述

6,測試讀寫分離 
用主庫172.16.34.212的用戶euht在這台mysql-proxy服務器登錄進去(也可以單獨為這個代理創建一個用戶) 
現在從這台代理登錄進主mysql服務器插入一條數據到testtb,結果為主從兩台服務器都有數據了。 
這裡寫圖片描述

為了測試讀寫是否真的分離了,我們把這兩台服服務器的數據差異化

先登錄mysql-proxy代理(-P指定端口號,必須指定否則登錄進去的將是本地3306端口的那個,當然由於這台219服務器我沒配置讓外部機子可以訪問,所以執行下面的語句缺少端口號直接報錯。) 
mysql -ueuht -p -h172.16.34.219 -P4040 
登錄進去我們為了看到讀寫分離是否生效,先到從服務器156把slave給停掉。(stop slave;)然後在代理服務器219的mysql-proxy執行插入數據。先看原本的數據情況 
這裡寫圖片描述

插入數據和查看數據 
這裡寫圖片描述

發現插入數據成功,再select出來居然沒有剛才插入的數據。這時我們分別到兩台服務器去查看數據。 
172.16..34.156從服務器的數據還是原來的 
這裡寫圖片描述 
再看212的數據 
這裡寫圖片描述

看到這裡就看到效果了。主服務器已經有了剛才插入的數據,從服務器沒有。這是因為從服務器的主從復制已經關閉,所以從mysql-proxy代理端插入數據(實際上是用了主服務器212去插入)沒有復制到從服務器。從mysql-proxy讀取沒看到新插入的數據是因為代理端是去從服務器156讀取數據的。 
至此,mysql的主從復制和讀寫分離就結束了。下面簡單說一下雙主結構。

Mysql雙主結構

通過上面的介紹很容易看出,雙主結構其實就是兩台服務器相互數據復制。那麼做到雙主結構只需要把212主服務器變成156的從服務器即可。

在212服務器上執行(先到156查看日志位置,改對相應的東西即可show master status;) 
change master to 
master_host=’172.16.34.212’, 
master_user=’euht’, 
master_password=’123456’, 
master_log_file=’master-bin.000001’, 
master_log_pos=294;

開啟主從 
mysql> start slave;

156,212都start slave,而且配置互為slave,這就是雙主結構。

測試,212插入數據156會同步,156插入數據212會同步。經測試全部通過。(記得查看運行狀態,Slave_IO_Running 與 Slave_SQL_Running 的值都必須為YES,才表明狀態正常。Show slave status\G)

http://xxxxxx/Linuxjc/1175803.html TechArticle

Copyright © Linux教程網 All Rights Reserved