1. 程式人生 > >mysql數據庫的主從復制和主主復制

mysql數據庫的主從復制和主主復制

mysql 主從復制

Mysql主從架構技術說明

Mysql內建的復制功能是構建大型,高性能應用程序的基礎。將Mysql的數據分布到多個系統上去,這種分布的機制,是通過將Mysql的某一臺主機(Master)的數據復制到其它主機(slaves)上,並重新執行一遍來實現的。復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,這些日誌可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,然後封鎖並等待主服務器通知新的更新。

數據庫復制特性

MySQL復制技術有以下一些特點:

(1) 數據分布 (Datadistribution )

(2) 負載平衡(load balancing)

(3) 備份(Backups)

(4) 高可用性和容錯性 Highavailability and failover

Mysql復制如何工作

1、該過程的第一部分就是master記錄二進制日誌。在每個事務更新數據完成之前,master在二進制日誌記錄這些改變。MySQL將事務串行的寫入二進制日誌,在事件寫入二進制日誌完成後,master通知存儲引擎提交事務。此後可接收slave的請求

2、下一步就是slavemasterbinary log拷貝到它自己的中繼日誌。首先,slave開始一個工作線程——

I/O線程。I/O線程在master上打開一個普通的連接,然後開始在主節點上binlog dump process(二進制轉存線程)。Binlog dump processmaster的二進制日誌中讀取事件,如果已經跟上master,它會睡眠並等待master產生新的事件。I/O線程將這些事件寫入中繼日誌。

3 SQL slave threadSQL從線程)處理該過程的最後一步。SQL線程從中繼日誌讀取事件,並重放其中的事件而更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,中繼日誌通常會位於OS的緩存中,所以中繼日誌的開銷很小。


主從復制實驗


實驗環境:

centos 系統服務器

2 臺、一臺用戶做Mysql 主服務器,一臺用於做Mysql從服務器,配置好yum 源、防火墻關閉、各節點時鐘服務同步、各節點之間可以通過主機名互相通信。實驗中我用的是centos7。

Mysql主服務器:192.168.182.173

mysql從服務器: 192.168.182.174

實驗步驟:

一:配置主服務器

1.修改配置文件

vim /etc/my.cnf

server-id=1 #配置server-id,讓主服務器有唯一ID

log-bin=mysql-bin #打開Mysql日誌,日誌格式為二進制

skip-name-resolve #關閉名稱解析,(非必須)


2.查看主服務器狀態

Master的數據庫執行show master status,查看主服務器二進制日誌狀態

技術分享圖片

3.創建復制帳號

Master的數據庫中建立一個備份帳戶:每個slave使用標準的MySQL用戶名和密碼連接master。進行復制操作的用戶會授予replication slave權限。

grant replication slave on *.* to ‘slave‘@‘192.168.182.174‘identified by ‘magedu‘;


二:配置從服務器

1.修改配置文件

vim /etc/my.cnf

server-id=2 #配置server-id,讓從服務器有唯一ID號

relay_log = mysql-relay-bin #打開Mysql日誌,日誌格式為二進制

read_only = 1 #設置只讀權限

log_bin = mysql-bin #開啟從服務器二進制日誌

log_slave_updates = 1 #使得更新的數據寫進二進制日誌中

2.啟動從服務器復制線程

slave連接master,並開始重做master二進制日誌中的事件。

CHANGE MASTER TO MASTER_HOST=‘192.168.222.128‘,

MASTER_USER=‘slave‘,

MASTER_PASSWORD=‘magedu‘,

MASTER_LOG_FILE=‘mysql-bin.000001‘,

MASTER_LOG_POS=245;

執行start slave# 啟動復制線程。

3.查看從服務器狀態

可使用SHOW SLAVE STATUS\G查看從服務器狀態,如下所示,也可用show processlist \G查看當前復制狀態:

Slave_IO_Running: Yes #IO線程正常運行

Slave_SQL_Running: Yes #SQL線程正常運行

技術分享圖片

接下來就可以測試了

在主服務器上創建一個名為xiaomi的表,在主服務器上可以查看到,如果在從服務器上也可以查看到,說明數據已同步,實現成功。

主服務器:

技術分享圖片

從服務器:

技術分享圖片

主主復制

主主實際上也是互為主從,互為主從:兩個節點各自都要開啟binlogrelay log

1、數據不一致;

2、自動增長id

定義一個節點使用奇數id

auto_increment_increment=2#表示自增長字段每次遞增的量

auto_increment_offset=1#表示自增長字段從那個數開始

另一個節點使用偶數id

auto_increment_increment=2

auto_increment_offset=2


實驗:主主復制

在上面主從實驗的基礎上,實現主主復制。

主服務器:192.168.182.174

從服務器:192.168.136.173

一:配置主服務器

vim /etc/my.cnf

server-id=2 #配置server-id,讓主服務器有唯一ID

log-bin=mysql-bin #打開Mysql日誌,日誌格式為二進制

relay_log=mysql-relay-log

auto_increment_increment=2
auto_increment_increment=2

技術分享圖片

2.查看主服務器狀態

Master的數據庫執行show master status,查看主服務器二進制日誌狀態

3.創建復制帳號

Master的數據庫中建立一個備份帳戶:每個slave使用標準的MySQL用戶名和密碼連接master。進行復制操作的用戶會授予replication slave權限。

grant replication slave on *.* to ‘slave‘@‘192.168.182.174‘identified by ‘magedu‘;


二:修改從服務器配置文件

1.vim /etc/my.cnf

server-id=2 #配置server-id,讓主服務器有唯一ID號

log-bin=mysql-bin #打開Mysql日誌,日誌格式為二進制

relay_log=mysql-relay-log

auto_increment_increment=2
auto_increment_increment=2

2.啟動從服務器復制線程

slave連接master,並開始重做master二進制日誌中的事件。

CHANGE MASTER TO MASTER_HOST=‘192.168.182.174‘,

MASTER_USER=‘slave1‘,

MASTER_PASSWORD=‘magedu1‘,

MASTER_LOG_FILE=‘mysql-bin.000001‘,

MASTER_LOG_POS=245;

執行start slave# 啟動復制線程。

3.查看從服務器狀態

可使用SHOW SLAVE STATUS\G查看從服務器狀態,如下所示,也可用show processlist \G查看當前復制狀態:

Slave_IO_Running: Yes #IO線程正常運行

Slave_SQL_Running: Yes #SQL線程正常運行


測試:無論在哪個服務器的數據庫中創建數據,另一個都可以同步數據。




本文出自 “13162732” 博客,請務必保留此出處http://13172732.blog.51cto.com/13162732/1983889

mysql數據庫的主從復制和主主復制