本文主要介紹了Mysql中複製詳細解析,從基本概念、用途、實現方法以及集中模式進行了介紹,然後分享了具體實現代碼,具有一定參考價值,需要的朋友可以了解下。
1.mysql複製概念
指將主資料庫的DDL和DML作業透過二進位日誌傳送到複製伺服器上,然後在複製伺服器上將這些日誌檔案重新執行,從而使複製伺服器和主伺服器的資料保持同步。複製過程中一個伺服器充當主伺服器(master),而一個或多個其它伺服器充當從伺服器(slaves)。主伺服器將更新重新寫入二進位日誌文件,並維護文件的一個索引以追蹤日誌循環。這些日誌可以記錄傳送到從伺服器的更新。當一個從伺服器連接主伺服器時,它會通知主伺服器、從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接受從那時起發生的任何更新,然後封鎖並等待主伺服器通知新的更新。
2.複製的用途
透過主從複製(master-slave)的方式來同步數據,再透過讀寫分離( mysql-proxy)來提升資料庫的並發負載能力,或是用來作為主備機的設計,確保在主機停止回應之後在很短的時間內就可以將應用程式切換到備機上繼續運作。
優點:
(1)資料庫叢集系統具有多個資料庫節點,在單一節點發生故障的情況下,其他正常節點可繼續提供服務。
(2)如果主伺服器上出現了問題可以切換到從伺服器上
(3)透過複製可以在從伺服器上執行查詢操作,降低了主伺服器的存取壓力,實現資料分佈和負載平衡
(4)可以在從伺服器上備份,以避免備份期間影響主伺服器的服務。
3.複製的實作(3種方法)
#(1)DRBD是一種用軟體實現的、無共享的、伺服器之間鏡像區塊設備內容的儲存複製解決方案。
(2)Mysql cluster(又稱mysql簇)。 Mysql replicaion(複製)本身就是一個比較簡單的結構,即一台從伺服器(slave)從一台主伺服器(master)讀取二進位日誌然後再解析並應用到自身。
(3)一個簡單複製環境只需要兩台運行mysql的主機即可,甚至可以在一台實體伺服器主機上啟動兩個mysqld實例。一個作為master而另一個作為slave來完成複製環境的搭配。但在實際應用環境中,可以根據實際的業務需求利用mysql複製的功能自行建構出其他多種更利於擴充的複製架構,例如最常用的主從架構。
主從架構指的是使用一台mysql伺服器作為master,一台或多台mysql伺服器作為slave,將master的資料複製到slave上。在實際應用場合,主從架構模式是mysql複製最常用的。一般在這種架構下,系統的寫入操作都是在master中進行,而讀取操作則分散到各個slave中進行,因此這種架構特別適合現在互聯網高讀寫的問題。
Mysql資料庫複製作業大概分成以下幾個步驟:
(1)master啟用二進位日誌。啟用二進位日誌的操作在日誌管理中有詳細的介紹。
(2)slave上面的I/O程序連接上master,並請求從指定日誌檔案的指定位置(或從最開始的日誌)之後的日誌內容。
(3)master接受到來自slave的I/O程序請求後,透過負責複製的I/O程序根據請求資訊讀取指定日誌指定位置之後的日誌訊息,傳回給slave的I/O。傳回資訊中除了日誌所包含的資訊之外,還包括本次傳回的資訊已經到master端的bin-log檔案的名稱以及bin-log的位置。
(4)Slave的I/O程序接收到訊息後,將接收到的日誌內容依序加入slave端的relay-log檔的最末端,並將讀取到的master端的bin-log的檔名和位置記錄到master-info檔案。
(5)Slave的sql程序偵測到relay-log中新增的內容後,會馬上解析relay-log的內容,並在自身執行。
4.mysql複製的集中模式
mysql5.1之後的版本中,在複製上的改進就是引進了新的複製技術——基於行的複製。這種技術就是關注表中發生變化的記錄,而非以前的照抄binlog模式。從mysql5.1.12開始,可以用以下3種模式來實現。
(1)基於sql語句的複製(statement-base replication,sbr)
(2)基於行的複製(rbr)
(3)混合模式複製(mbr)
對應的,binlog的格式也有3種:statement、row、mixed。 Mbr模式中,sbr模式是預設的。在運行時可以動態地改變binlog的格式。設定主從複製模式的方法非常簡單,只要在先前設定複製配置的基礎上,再新增一個參數,如下:
##
binlog_format=”statement” #binlog_format=”row” #binlog_format=”mixed”
Mysql> set session binlog_format=”statement”
#5.控制主伺服器操作
Slave:192.168.11.130
#(1)主伺服器:
#
mysql> show variables like '%datadir%'; +---------------+--------------------------+ | Variable_name | Value | +---------------+--------------------------+ | datadir | /application/mysql/data/ | +---------------+--------------------------+
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | OFF | +---------------+-------+ row in set (0.00 sec)
開啟日誌3步驟:
②找到[mysqld]這個標籤,在此標籤下面一行,加入語句如下:
#
Binlog-do-db=db_name(数据库名称)
Binlog-ignore-db-db_name(数据库名称)
Server-id=1 Binlog-do-db=xscj Binlog-ignore-db=mysql Server-id=1:每一个数据库服务器都要指定一个唯一的server-id,通常主服务器为1,master和slave的server-id不能相同。 Binlog-do-db:表示需要复制的数据库,这里以xscj为例 Binlog-ignore-db:表示不需要复制的数据库
mysql> grant replication slave on *.* to rep_user@'%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec mysql> show master status\G *************************** 1. row *************************** File: binary_log.000001 Position: 303 Binlog_Do_DB: Binlog_Ignore_DB: row in set (0.00 sec)
[root@localhost bin]# mysqldump -h localhost>/data/binary_dump.txt
(2 )控制從伺服器操作
##
Server-id=2 ##设置从服务器id Master-host=192.168.11.129 Master-user=rep_user Master-password= ##设置连接主服务器的密码 Replicate-do-db ##设置你要同步的数据库,可以设置多个 Master-port=<port> ##配置端口号 重启slave,在slave主机的mysql重新执行如下命令,关闭slave服务 Mysql>stop slave; 设置slave实现复制相关的信息,执行如下命令 Mysql>change master to >master_host='', >master_user='', >master_password='', >master_log_file='binary_log.000007', >master_log_pos=120; 输入:show slave status\G用于提供有关从服务器线程的关键参数信息。
##功能 | |
Slave start | 啟動複製執行緒 |
停止複製執行緒 | |
重設複製執行緒 | |
Show slave status | 顯示複製執行緒狀態 |
Show slave status\g | #顯示複製執行緒狀態(分行顯示) |
Show master status\G | 顯示主資料庫的狀態(分行顯示) |
Show master logs | 顯示主資料庫日誌 |
Change master to
以上是Mysql中複製詳細解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!