mysql的兩種復制模式
阿新 • • 發佈:2019-03-03
shadow skip 內存 incr 二進制 啟動 hang 模式 set mysql的復制術語
擴展的方式: Scale up Scale Out 復制: 向外擴展 二進制日誌 單向 復制功用: 數據分布 負載均衡:讀操作,適用於讀密集型的應用 備份 高可用和故障切換 MySQL升級測試 主從復制: 從服務器: I/O線程:從master請求二進制日誌信息,並保存至中繼日誌; SQL線程:從relay log中讀取日誌信息,在本地完成重放; 異步模式:async 1、從服務器落後於主服務器; 2、主從數據不一致; 二進制日誌的格式:SET datetime = now() 1、基於行 2、基於語句 3、混合 雙主: 讀:負載均衡 寫:無法均衡 Perlcona-Galera Cluster
配置過程:
1、master (1) 啟用二進制日誌; (2) 設置一個在當前集群中惟一的server-id; (3) 創建一個有復制權限(REPLICATION SLAVE, REPLICATION CLIENT)賬號; 2、slave (1) 啟用中繼日誌; (2) 設置一個在當前集群中惟一的server-id; (3) 使用有復制權限用戶賬號連接至主服務器,並啟動復制線程; 傳統上:一主多從,但一從一主; 而今:一從多主; 服務器程序版本:最好相同;從高;
一、mysql的復制,主從模式
1.主服務器啟動二進制日誌,編輯/etc/my.cnf在其中增加如下兩行內容
server-id=1 mysqld的id號
log-bin=/var/lib/mysql/mysql-bin 指明二進制日誌的文件名,和路徑
innodb-file-per-table=1
2.主服務器創建一個有復制權限(REPLICATION SLAVE, REPLICATION CLIENT)賬號 GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO ‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;
3.從服務器啟動中繼日誌,編輯/etc/my.cnf在其中增加如下四行內容
server-id=2
relay-log=/var/lib/mysql/relay-log
relay-log-index=relay-log.index
innodb-file-per-table=1
4.從服務器配置從服務功能,首先查看主服務器的二進制pos位置
CHANGE MASTER TO MASTER_HOST=‘192.168.130.128‘,MASTER_USER=‘repluser‘,
MASTER_PMASTER_PASSWORD=‘replpass‘,
MASTER_LOG_FILE=‘mysql-bin.000004‘,MASTER_LOG_POS=187;
5.查看從服務器狀態,開啟IO與mysql進程,開啟後就可以在線復制了
SHOW SLAVE STATUS\G 查看狀態
START SLAVE 開啟進展
6.效果展示,在主服務器中創建一個庫CREATE DATABASE mydb2;
在從服務器中查看SLAVE 狀態,可以看到從服務器已經讀取
到pos=272的位置,證明從服務器可以復制
7.作為從服務器,應該不允許被寫入數據,即限制從服務器只讀
a.在從服務器啟動read_only;但僅對非具有SUPER權限的用戶有效;
b.阻止所有用戶 :MariaDB> FLUSH TABLES WITH READ LOCK;
8.保證復制事務安全
在master節點啟用參數:
sync_binlog = on 將內存中的二進制同步到硬盤
如果用到的為InnoDB存儲引擎:
innodb_flush_logs_at_trx_commit
innodb_support_xa=on
在slave節點:
skip_slave_start 不讓slave線程自動啟動,需手動啟動
二、mysql的復制,雙主模式
雙主:
讀:負載均衡
寫:無法均衡
互為主從:
1.數據不一致;
2.自動增長id
定義一個節點使用奇數id
auto_increment_offset=1
auto_increment_increment=2
定義另一個節點使用偶數id
auto_increment_offset=2
auto_increment_increment=2
(1) 各自使用不同的server id
(2) 都啟用binlog和relay log
(3) 定義自動增長的id字段的增長方式
(4) 都授權有復制權限的用戶賬號
(5) 各自把對方指定為主服務器
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
‘repluser‘@‘172.16.%.%‘ IDENTIFIED BY ‘replpass‘;
3.在上面的基礎上,兩臺主機的配置文件/etc/my.cnf
192.168.130.128
配置:server-id=1
log-bin=/var/lib/mysql/mysql-bin
relay-log=/var/lib/mysql/relay-log
relay-log-index=relay-log.index
innodb-file-per-table=1
auto_increment_offset=1
auto_increment_increment=2
192.168.130.129
配置:server-id=5
log-bin=/var/lib/mysql/mysql-bin
relay-log=/var/lib/mysql/relay-log
relay-log-index=relay-log.index
innodb-file-per-table=1
auto_increment_offset=2
auto_increment_increment=2
4.在每個主機的mysqld上都創建一個有復制權限的用戶
192.168.130.128
配置:
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;
192.168.130.128
配置:
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;
5.查看每個主機的二進制日誌pos位置,然後按照該位置,啟動每個主機的slave服務
192.168.130.128
配置:
CHANGE MASTER TO MASTER_HOST=‘192.168.130.129‘,
MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘replpass‘,
MASTER_LOG_FILE=‘mysql-bin.000002‘,MASTER_LOG_POS=288;
192.168.130.12
配置:
CHANGE MASTER TO MASTER_HOST=‘192.168.130.128‘,
MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘replpass‘,
MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=106;
6.用START SLAVE;開啟兩臺機的slave功能便可完成雙主模型
7.效果展示
當128主機創建一個庫時129的讀取進度見圖,
當129主機創建一個庫時128的讀取進度見圖,
mysql的兩種復制模式