Mysql中複製詳細解析

小云云
發布: 2017-12-08 11:59:57
原創
1284 人瀏覽過

本文主要介紹了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”
登入後複製


#當然了,也可以在運行時動態修改binlog的格式


Mysql> set session binlog_format=”statement”
登入後複製


#5.控制主伺服器操作

Master:192.168.11.139

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)
登入後複製


OFF表示二進位日誌是關閉的


開啟日誌3步驟:

①開啟mysql安裝目錄/my.cnf

②找到[mysqld]這個標籤,在此標籤下面一行,加入語句如下:

log_bin[filename]


在該語句中,log- bin說明要開啟二進位檔案;filename是二進位日誌的名字。如果沒有指定,預設為主機名後面跟著-bin作為檔案名,預設存放在datadir目錄中。這裡指定binary_log如果只對指定資料庫產生二進位文件,則需要新增如下語句


#

Binlog-do-db=db_name(数据库名称)
登入後複製


如果不對指定資料庫產生二進位文件日誌,則需要加入下列語句


Binlog-ignore-db-db_name(数据库名称)
登入後複製


#③重啟mysql服務。可以在mysql安裝目錄/data資料夾下看到「binary_log.數字編號」文件,如binary_log.00001.以後每重啟一次mysql服務,都會重新產生二進位文件,文件名中的數字編號一次增加。


開機成功後,修改mysql的設定檔my.cnf,設定server-id,程式碼如下


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:表示不需要复制的数据库
登入後複製


在master上建立複製所需的使用者


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)
登入後複製


#將master主機的資料備份出來,儲存在/data /binary_dump.txt檔案中,然後匯入slave從機去,具體執行語句如下


[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=&#39;&#39;,
>master_user=&#39;&#39;,
>master_password=&#39;&#39;,
>master_log_file=&#39;binary_log.000007&#39;,
>master_log_pos=120;

输入:show slave status\G用于提供有关从服务器线程的关键参数信息。
登入後複製


常用指令如下


##Slave stop停止複製執行緒Reset slave

##功能

Slave start

啟動複製執行緒

重設複製執行緒

Show slave status

顯示複製執行緒狀態

Show slave status\g

#顯示複製執行緒狀態(分行顯示)

Show master status\G

顯示主資料庫的狀態(分行顯示)

Show master logs

顯示主資料庫日誌


Change master to

動態改變到主資料庫的設定

Show processlistv

顯示有哪些執行緒正在執行

# ##############大家學會了嗎?趕快動手嘗試。 #########相關推薦:#########mysql複製表結構的方法小結_MySQL############MySQL中複製資料表中的資料到新表中的操作教學_MySQL############MySQL複製的概述、安裝、故障、技巧、工具(火丁分享)######

以上是Mysql中複製詳細解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!