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、下一步就是slave將master的binary log拷貝到它自己的中繼日誌。首先,slave開始一個工作線程——
3、 SQL slave thread(SQL從線程)處理該過程的最後一步。SQL線程從中繼日誌讀取事件,並重放其中的事件而更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,中繼日誌通常會位於OS的緩存中,所以中繼日誌的開銷很小。
實驗環境:
centos 系統服務器
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的表,在主服務器上可以查看到,如果在從服務器上也可以查看到,說明數據已同步,實現成功。
主服務器:
從服務器:
主主復制
主主實際上也是互為主從,互為主從:兩個節點各自都要開啟binlog和relay 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數據庫的主從復制和主主復制