1. 程式人生 > 其它 >搭建MySQL主從模式和雙主模式

搭建MySQL主從模式和雙主模式

技術標籤:資料庫

背景

已經搭建好了多臺伺服器的mysql環境,詳情見https://blog.csdn.net/qq_41488523/article/details/112723759

搭建MySQL主從

主庫

編輯my.cnf檔案,windows下是my.ini

vi /etc/my.cnf

新增以下內容

#logbin
log_bin=mysql-bin #開啟binlog
server-id=1 #設定ID全域性唯一
sync-binlog=1 #寫入操作就與磁碟同步
binlog-ignore-db=information_schema #設定不同步的庫
binlog-ignore-db=performance_schema 
binlog-ignore-db=sys
#binlog-do-db=test #設定同步的庫

重啟mysql服務

systemctl restart mysqld

登入mysql並授權(Admin123!是MySQL的密碼)

grant replication slave on *.* to 'root'@'%' identified by 'Admin123!';
grant all privileges on *.* to 'root'@'%' identified by 'Admin123!';
flush privileges;

檢視並記住中繼日誌的名字和當前位置(File和Position)

show master status;

從庫

vi /etc/my.cnf
#logbin
server-id=2 #設定ID全域性唯一
relay_log=mysql-relay-bin#設定中繼日誌名字
read_only=1#只讀
systemctl restart mysqld

檢視從庫狀態(第一次應該是Empty set,如果不是,可以呼叫stop slave停止之前的主從資訊)

show slave status;

制定主庫資訊(上面看到File和Position會在這裡用到)

change master to master_host='192.168.1.101',master_port=3306,master_user='root',master_password='Admin123!',master_log_file='mysql-bin.000001',master_log_pos=869;

開啟

start slave;

檢視資訊

show slave status \G;

如果檢視到一下資訊,則說明配置正常

Slave_IO_Running:Connection
Slave_SQL_Running:Yes

異常

但我第一次配的時候出現了:Slave_IO_Running:No。調查之後才發現是mysql 有個uuid , 而uuid 是唯一標識的。

因為我之前是直接伺服器克隆過來了,所以mysql的的uuid的值是一樣的,只要刪除那個檔案就行了:

如果是使用yum安裝的話,記錄uuid的檔案應該在這個路徑

vi /var/lib/mysql/auto.cnf

這裡不刪除了給他留個備份

systemctl stop mysqld
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
systemctl start mysqld

雙主模式

備份主庫所有資料到當前目錄下(這一步沒有什麼用,就是以後主庫資料量大的時候要新增從庫的話從庫可以先和這個檔案同步再和主庫同步,節省一點主庫主機的資源)

mysqldump --all-databases > mysql_backup_all.sql -uroot -p

這裡是根據原先配的主從新增一個新的主庫

主庫1

vi /etc/my.cnf

追加以下資訊

relay_log=mysql-relay-bin
log_slave_updates=1#更新操作要不要寫到bin裡面去
auto_increment_offset=1#主鍵遞增基本值,雙主雙寫要錯開1,3,5,7,...
auto_increment_increment=2#主鍵遞增跳躍偏移量

登入,記住File和Position

show master status;

主庫2

#logbin
log_bin=mysql-bin #開啟binlog
server-id=4 #設定ID全域性唯一
sync-binlog=1 #寫入操作就與磁碟同步
binlog-ignore-db=information_schema #設定不同步的庫
binlog-ignore-db=performance_schema 
binlog-ignore-db=sys
#binlog-do-db=test #設定同步的庫
#雙主模式
relay_log=mysql-relay-bin
log_slave_updates=1#更新操作要不要寫到bin裡面去
auto_increment_offset=2#主鍵遞增基本值,雙主雙寫要錯開2,4,6,8,.....
auto_increment_increment=2#主鍵遞增跳躍偏移量
systemctl restart mysqld

登入後授權

grant replication slave on *.* to 'root'@'%' identified by 'Admin123!';
grant all privileges on *.* to 'root'@'%' identified by 'Admin123!';
flush privileges;

檢視主庫2的中繼日誌的Position和File資訊

show master status;

把主庫2作為主庫1的從庫

change master to master_host='192.168.1.101',master_port=3306,master_user='root',master_password='Admin123!',master_log_file='mysql-bin.000002',master_log_pos=154;
start slave;
show slave status \G;

主庫1

把主庫1作為主庫2的從庫

change master to master_host='192.168.1.104',master_port=3306,master_user='root',master_password='Admin123!',master_log_file='mysql-bin.000001',master_log_pos=884;
start slave;
show slave status \G;