MySQL主從(MySQL Replication),主要用于MySQL的時時備份或者讀寫分離。在配置之前先做一下準備工作,配置兩台 mysql 伺服器,如果你的機器不能同時跑兩台 Linux 虛拟機,那可以考慮在同一個機器上跑兩個 mysql 服務。
一、原理
1、每個從僅可以設定一個主。
2、主在執行 sql 之後,記錄二進制 log 檔案(bin-log)。
3、從連接配接主,并從主擷取 binlog,存于本地 relay-log,并從上次記住的位置起執行 sql,一旦遇到錯誤則停止同步。
二、推論
1、主從間的資料庫不是實時同步,就算網絡連接配接正常,也存在瞬間,主從資料不一緻。
2、如果主從的網絡斷開,從會在網絡正常後,批量同步。
3、如果對從進行修改資料,那麼很可能從在執行主的 bin-log 時出現錯誤而停止同步,這個是很危險的操作。是以一般情況下,非常小心的修改從上的資料。
4、一個衍生的配置是雙主,互為主從配置,隻要雙方的修改不沖突,可以工作良好。
5、如果需要多主的話,可以用環形配置,這樣任意一個節點的修改都可以同步到所有節點。
6、可以應用在讀寫分離的場景中,用以降低單台 MySQL 伺服器的 I/O。
7、可以實作 MySQL 服務的 HA 叢集。
8、可以是 1 主多從,也可以是互相主從(主主)。
三、主從配置
說明:主庫IP:192.168.0.109 從庫IP:192.168.0.104
1、安裝MySQL
2、主庫的配置
首先建立一個資料庫db1
注:資料庫安裝完成後預設會生成兩個庫:mysql庫與test庫;為了做友善試驗,我們直接把mysql庫複制給db1庫(下面采用備份恢複方法來實作),你也可以自己在db1庫裡建立表。
如圖:
<a href="http://s3.51cto.com/wyfs02/M00/73/92/wKioL1YBTW-x9sDFAADhTb_b_7E268.jpg" target="_blank"></a>
接着退出,編輯配置檔案
如圖:
<a href="http://s3.51cto.com/wyfs02/M02/73/92/wKioL1YBWzvh7HiUAAF8o-qNdNA217.jpg" target="_blank"></a>
參數說明:
然後重新開機mysql服務
在/data/mysql/目錄(即MySQL安裝目錄)下可以看到生成了以mysql-bin開頭的一些檔案,如下圖:
<a href="http://s3.51cto.com/wyfs02/M02/73/92/wKioL1YBXA-DEX2_AAEkIroFjWc366.jpg" target="_blank"></a>
最後我們添加一個用于主從同步的使用者:repl,密碼為:123456
<a href="http://s3.51cto.com/wyfs02/M02/73/92/wKioL1YBWQqgyhC5AAEjErXgwZ8162.jpg" target="_blank"></a>
3、從庫的配置
首先建立一個和主資料庫一樣的db1庫。我同樣是複制之前的123.sql資料庫到bd1庫,這個是通過主伺服器中的vsftpd檔案服務下載下傳到本地,然後恢複到db1庫。
下載下傳在本地
複制123.sql庫到db1庫
接着編輯配置檔案
儲存退出。重新開機下mysql服務
同步資料庫
mysql> slave start;
顯示出現了錯誤:從資料庫無法同步
這個問題很有可能就是密碼不對,而我的問題是因為沒有關閉防火牆,關閉防火牆後我再show下,發現問題解決了。
<a href="http://s3.51cto.com/wyfs02/M01/73/94/wKioL1YBbOzCotZvAAKARTELygI033.jpg" target="_blank"></a>
4、測試主從是否同步
首先在主資料庫上解鎖,檢視表内容
<a href="http://s3.51cto.com/wyfs02/M02/73/95/wKioL1YBfhXx1gliAAFCSh_4y-Y782.jpg" target="_blank"></a>
然後檢視下從資料庫是否生成了db1資料庫,這裡可以看到表的内容和主資料庫中db1庫是一樣的。
測試下:
在主資料庫上執行下面的指令删除event表
接着在從資料庫上可以發現該表也被同步的删除了
<a href="http://s3.51cto.com/wyfs02/M02/73/98/wKiom1YBfvHyjmaYAACxPVY_s2U936.jpg" target="_blank"></a>
這樣就實作了主從資料同步。
實作輕松部署 MySQL 主從複制:參考 mysqldump 的 --master-data 參數。
mysqldump導出資料時,當這個參數的值為1的時候,mysqldump出來的檔案就會包括CHANGE MASTER TO這個語句,CHANGE MASTER TO後面緊接着就是file和position的記錄,在slave上導入資料時就會執行這個語句,salve就會根據指定這個檔案位置從master端複制binlog。預設情況下這個值是1;當這個值是2的時候,chang master to也是會寫到dump檔案裡面去的,但是這個語句是被注釋的狀态。
3步即可:
1、主上導出資料庫:mysqldump 帶--master-data=1參數
2、從上導入資料庫:mysql 導入資料指令
3、start slave;
本文轉自 M四月天 51CTO部落格,原文連結:http://blog.51cto.com/msiyuetian/1697288,如需轉載請自行聯系原作者