Mysql中復制詳細解析
發表時間:2023-07-16 來源:明輝站整理相關軟件相關文章人氣:
[摘要]本文主要介紹了Mysql中復制詳細解析,從基本概念、用途、實現方法以及集中模式進行了介紹,然后分享了具體實現代碼,具有一定參考價值,需要的朋友可以了解下。1.mysql復制概念 指將主數據庫的DD...
本文主要介紹了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='',
>master_user='',
>master_password='',
>master_log_file='binary_log.000007',
>master_log_pos=120;
輸入:show slave status\G用于提供有關從服務器線程的關鍵參數信息。
常用命令如下
選項 | 功能 |
Slave start | 啟動復制線程 |
Slave stop | 停止復制線程 |
Reset slave | 重置復制線程 |
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中文網其它相關文章!
學習教程快速掌握從入門到精通的SQL知識。