您好,登錄后才能下訂單哦!
本篇內容主要講解“Replication主從復制機制原理是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Replication主從復制機制原理是什么”吧!
Replication復制是指將主數據庫的DDL和DML操作通過二進制日志傳到從庫服務器中,然后在從庫上對這些日志重新執行(也叫重做),從而使得從庫和主庫的數據保持同步。
MySQL支持一臺主庫同時向多臺從庫進行復制, 從庫同時也可以作為其他從服務器的主庫,實現鏈狀復制。
MySQL 的主從復制原理如下:
從上層來看,復制分成三步:
Master主庫在事務提交時,會把數據的更新記錄作為時間Events記錄在二進制日志文件Binlog中。(Dump線程 - 主庫線程)
Master主庫推送二進制日志文件Binlog中的日志事件到從庫的并且通過寫入中繼日志Relay Log(I/O線程 - 從庫線程)。
Slave從庫 讀取且重做(重放)中繼日志(Relay Log) 中的事件,將改變反映它自己的數據。(SQL線程 - 從庫線程)
MySQL復制的有點主要包含以下三個方面:
主庫出現問題,可以快速切換到從庫提供服務(提供故障切換機制)。
從庫上執行查詢操作,從主庫中更新,實現讀寫分離,降低主庫的訪問壓力(提高讀寫分離并且提高高可用和負載以及吞吐)。
從庫中執行備份,以避免備份期間影響主庫的服務(提高數據的安全性)。
在master 的配置文件(/usr/my.cnf)中,配置如下內容:
mysql 服務ID,保證整個集群環境中唯一
server-id=1
mysql binlog 日志的存儲路徑和文件名
log-bin=/var/lib/mysql/mysqlbin
log-bin-index = mysql-bin.index(設置二進制日志索引文件名)
binlog_format = mixed (binlog的模式)
STATEMENT:語句復制
ROW:行復制
MIXED:混和復制,默認選項
sync-binlog = 1(是否開啟同步方式): 默認為0,為保證不會丟失數據,需設置為1,用于強制每次提交事務時,同步二進制日志到磁盤上。
character-set-server = utf8(字符串編碼)
錯誤日志,默認已經開啟
log-err
mysql的安裝目錄
basedir
mysql的臨時目錄
tmpdir
mysql的數據存放目錄
datadir
是否只讀,1 代表只讀, 0 代表讀寫
read-only=0
忽略的數據, 指不需要同步的數據庫(逗號分割)
binlog-ignore-db=mysql
指定同步的數據庫
binlog-do-db=db01
執行完畢之后,需要重啟Mysql:
service mysql restart;
創建同步數據的賬戶,并且進行授權操作:
grant replication slave on . to 'itcast'@'192.168.192.131' identified by 'itcast'; flush privileges;
為了獲取一個一致性的快照,需對所有表設置讀鎖:
flush tables with read lock;
備份主數據庫數據
主庫可以停機,則直接拷貝所有數據庫文件。
主庫是在線生產庫,可采用mysqldump備份數據,它對所有存儲引擎均可使用。
mysqldump -uroot -ptiger --all-database -e --single-transaction --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql
mysqldump -uroot --all-database -e -l --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql
主從數據庫都是數據都是一致的,直接執行 show master status 查看日志坐標。
show master status;
File : 從哪個日志文件開始推送日志文件
Position : 從哪個位置開始推送日志
Binlog_Ignore_DB : 指定不需要同步的數據庫
恢復主庫的寫操作:
unlock tables;
導入備份數據
mysql -uroot -p < /data/all_db.sql
在 slave 端配置文件中,配置如下內容:
mysql服務端ID,唯一
server-id=2
指定binlog日志
log-bin=/var/lib/mysql/mysqlbin
binlog_format = mixed
log-slave-updates = 0(控制 slave 上的更新是否寫入二進制日志,默認為0;若 slave 只作為從服務器,則不必啟用;若 slave 作為其他服務器的 master,則需啟用,啟用時需和 log-bin、binlog-format 一起使用,這樣 slave 從主庫讀取日志并重做,然后記錄到自己的二進制日志中;)
relay-log = mysql-relay-bin(設置中繼日志文件基本名)
relay-log-index = mysql-relay-bin.index(設置中繼日志索引文件名)
read-only = 1(設置 slave 為只讀,但具有super權限的用戶仍然可寫)
slave_net_timeout = 10(設置網絡超時時間,即多長時間測試一下主從是否連接,默認為3600秒,即1小時,這個值在生產環境過大,我們將其修改為10秒,即若主從中斷10秒,則觸發重新連接動作。)
執行完畢之后,需要重啟Mysql:
service mysql restart;
執行如下指令 :
change master to master_host='192.168.2.21', master_user='repl', master_password='repl', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=120;
指定當前從庫對應的主庫的IP地址,用戶名,密碼,從哪個日志文件開始的那個位置開始同步推送日志。
開啟同步操作
start slave;
show slave status;
可以看到圖中顯示出來的:IO線程和SQL線程都處于運行狀態:
Slave_IO_Running:此進程負責 slave 從 master 上讀取 binlog 日志,并寫入 slave 上的中繼日志。
Slave_SQL_Running:此進程負責讀取并執行中繼日志中的 binlog 日志。
這兩個進程的狀態需全部為 YES,只要有一個為 NO,則復制就會停止。當 Relay_Master_Log_File = Master_Log_File 且 Read_Master_Log_Pos = Exec_Master_Log_Pos 時,則表明 slave 和 master 處于完全同步的狀態。
停止同步操作
stop slave;
在主庫中創建數據庫,創建表,并插入數據 :
create database db01; user db01; create table user ( id int(11) not null auto_increment, name varchar(50) not null, sex varchar(1), primary key (id) ) engine = innodb default charset = utf8; insert into user(id, name, sex) values (null, 'Tom', '1'); insert into user(id, name, sex) values (null, 'Trigger', '0'); insert into user(id, name, sex) values (null, 'Dawn', '1');
在從庫中查詢數據,進行驗證 :
在從庫中,可以查看到剛才創建的數據庫:
在該數據庫中,查詢user表中的數據:
到此,相信大家對“Replication主從復制機制原理是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。