2023-02-02
master mysql
主主復制介紹
MySQL的主從復制架構下,可以實現讀寫分離、業務分流,來降低單個數據庫的壓力。但是這種模式下會存在單點故障的問題,即如果主庫節點宕機的情況下,對從庫進行的操作并不會同步到主庫中。這個數據庫也就無效了。因此有的時候我們會搭建主主復制的架構,也叫做雙主架構。
雙主架構的實現,是在主從架構的基礎之上的。將兩臺MySQL之間護衛彼此的主庫,同時又互為對方的從庫。這樣的實施方案下,既能做到分流,也能解決單點故障的問題。因為任何的一臺節點故障,另外的一臺都可以繼續提供服務。
主庫1配置
我們需要編輯MySQL配置文件,這個配置文件在不同的操作系統中的位置和名字都不同,需要根據自己的操作系統來查找這個文件:
Windows: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Linux: /etc/my.cnf
macOS:
dmg安裝: /etc/my.cnf
homebrew安裝:
Intel CPU: /usr/local/homebrew/etc/my.cnf
AppleSilicon CPU: /opt/homebrew/etc/my.cnf
# 在[mysqld]的下方添加或修改如下屬性:
# 服務節點的唯一標識,需要給集群中的每個服務分配一個單獨的ID
server-id=101
# 打開binlog日志,并指定文件名
log_bin=master-101-bin
# binlog日志文件
log_bin-index=master-101-bin.index
# 打開relaylog日志
relay_log=master-101-relay-bin
relay_log-index=master-101-relay-bin.index
skip-slave-start
# 防止兩個主庫中同時操作自增的字段導致字段沖突
auto_increment_increment=2 # 自增步長,一般有幾個MySQL就設置為幾
auto_increment_offset=1 # 自增起始值
修改完成之后,需要重啟MySQL服務。
為root用戶分配replication slave的權限:
# 登錄到主庫
mysql -uroot -p
# 為root用戶分配權限
# MySQL8中,需要先添加 'root'@'%' 這個用戶
# create user 'root'@'%' identified by '123456'
mysql> grant replication slave on *.* to 'root'@'%';
mysql> flush privileges;
主庫2配置
我們需要編輯MySQL配置文件,這個配置文件在不同的操作系統中的位置和名字都不同,需要根據自己的操作系統來查找這個文件:
Windows: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Linux: /etc/my.cnf
macOS:
dmg安裝: /etc/my.cnf
homebrew安裝:
Intel CPU: /usr/local/homebrew/etc/my.cnf
AppleSilicon CPU: /opt/homebrew/etc/my.cnf
# 在[mysqld]的下方添加或修改如下屬性:
# 服務節點的唯一標識,需要給集群中的每個服務分配一個單獨的ID
server-id=102
# 打開binlog日志,并指定文件名
log_bin=master-102-bin
# binlog日志文件
log_bin-index=master-102-bin.index
# 打開relaylog日志
relay_log=master-102-relay-bin
relay_log-index=master-102-relay-bin.index
skip-slave-start
# 防止兩個主庫中同時操作自增的字段導致字段沖突
auto_increment_increment=2 # 自增步長,一般有幾個MySQL就設置為幾
auto_increment_offset=2 # 自增起始值
修改完成之后,需要重啟MySQL服務。
為root用戶分配replication slave的權限:
# 登錄到主庫
mysql -uroot -p
# 為root用戶分配權限
# MySQL8中,需要先添加 'root'@'%' 這個用戶
# create user 'root'@'%' identified by '123456'
mysql> grant replication slave on *.* to 'root'@'%';
mysql> flush privileges;
設置同步
查看master1的binlog
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| master-101-bin.000001 | 156 | | | |
+-----------------------+----------+--------------+------------------+-------------------+
設置master2同步master1
# 登錄從庫
mysql -uroot -p
# 設置同步主節點
change master to
master_host='192.168.10.101',
master_port=3306,
master_user='root',
master_password='123456',
master_log_file='master-101-bin.000001',
master_log_pos=156;
查看master2的binlog
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| master-102-bin.000001 | 553 | | | |
+-----------------------+----------+--------------+------------------+-------------------+
設置master1同步master2
# 登錄從庫
mysql -uroot -p
# 設置同步主節點
change master to
master_host='192.168.10.102',
master_port=3306,
master_user='root',
master_password='123456',
master_log_file='master-102-bin.000001',
master_log_pos=553;
開啟同步
# 分別啟動兩個數據庫的slave
start slave
# 如果出現錯誤:Slave failed to initialize relay log info structure from the repository
# 說明之前存在主從模式下的relay log,使用reset slave命令清除即可
開班時間:2021-04-12(深圳)
開班盛況開班時間:2021-05-17(北京)
開班盛況開班時間:2021-03-22(杭州)
開班盛況開班時間:2021-04-26(北京)
開班盛況開班時間:2021-05-10(北京)
開班盛況開班時間:2021-02-22(北京)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2020-09-21(上海)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2019-07-22(北京)
開班盛況Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號