MySQL主從資料庫配置
Mysql 的複製有:
1.一主一從
2.一主多從
3.級聯複製(A->B->C)
4.多主多從(環形複製 A->B->C->A)
5.multi-master(多主一從 5.7版本後才支援)
一、MYSQL主從配置(一主一從,一主多從)
1.建立主資料庫用於資料同步使用者
Create user 'master'@'%' IDENTIFIED BY 'master';
2.分配同步許可權
同步帳號必須要有 REPLICATION SLAVE 許可權才能完成同步(複製許可權)
GRANT REPLICATION SLAVE ON .
TO 'master'@'%' ;
(1,2步合併簡寫 GRANT REPLICATION SLAVE ON . TO 'master'@'%' IDENTIFIED BY 'master' ;)
3.配置master資料庫
編輯my.cnf 在 [mysqld]下新增以下程式碼
server-id=1 //給資料庫服務的唯一標識,一般為大家設定伺服器Ip的末尾號
log-bin=mysql-bin
#log-bin-index=mysql-bin.index
read-only=0
#binlog-do-db=test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
auto-increment-offset=1
auto-increment-increment=2
4.重啟master資料庫並檢視master 狀態
Service mysql restart
Mysql -uroot -proot
Show master status;
從狀態中檢視到如下資訊
File|Position| Binlog_Do_DB | Binlog_Ignore_DB|Executed_Gtid_Set |
+-------+----------+--------------+-----------------+-------------------+
| mysql-bin.000001 |1753 | | mysql,information_schema,performance_schema |
File :當前正在記錄的二進位制日誌檔案
Position :記錄偏移量,日誌 mysql-bin.000006 所記錄到的位置。
Binlog_Do_DB :要記錄日誌的資料庫
Binlog_Ignore_DB :不記錄日誌的資料庫
Executed_Gtid_Set :已執行的事務ID
File 和Position 資訊在配置從資料庫連線主資料庫的的時候需要
5.配置從資料庫(slave)
server-id=2
#relay-log-index=slave-relay-bin.index
#relay-log=slave-relay-bin
binlog_format = mixed
read-only=0
#replicate-do-db=test
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
relay_log=mysql-relay-bin
log-slave-updates=on
#auto-increment-offset=2
#auto-increment-increment=2
6.重啟從資料庫 並連線主資料庫
Service mysql restart
下面連線Master
Mysql -uroot -proot
change master to master_host='192.168.0.104', //Master 伺服器Ip
master_port=3306,
master_user='repl',
master_password='mysql',
master_log_file='master-bin.000001',//Master伺服器產生的日誌
master_log_pos=0;
7.啟動從資料庫複製
Start slave;
配置引數說明:
log-bin :需要啟用二進位制日誌
server_id : 用於標識不同的資料庫伺服器
binlog-do-db : 需要記錄到二進位制日誌的資料庫
binlog-ignore-db : 忽略記錄二進位制日誌的資料庫
auto-increment-offset :該伺服器自增列的初始值。
auto-increment-increment :該伺服器自增列增量。
replicate-do-db :指定複製的資料庫
replicate-ignore-db :不復制的資料庫
relay_log :從庫的中繼日誌,主庫日誌寫到中繼日誌,中繼日誌再重做到從庫。
log-slave-updates :該從庫是否寫入二進位制日誌,如果需要成為多主則可啟用。只讀可以不需要。
如果為多主的話注意設定 auto-increment-offset 和 auto-increment-increment
如上面為雙主的設定:
伺服器 152 自增列顯示為:1,3,5,7,……(offset=1,increment=2)
伺服器 153 自增列顯示為:2,4,6,8,……(offset=2,increment=2)
注意:自己搭建的虛擬主機中 mysql的 auto.cnf中的uuid會重複,請刪除auto.cnf(/var/lib/mysql/auto.cnf),然後重啟mysql
二、兩個主機mysql 互相
1.同時修改兩個資料庫配置資訊(my.cnf)
server_id=176
log-bin=mysql-bin
binlog_format = mixedbinlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#binlog-do-db=test#replicate-do-db=test
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schemalog-slave-updates #必加(兩個資料庫都加,將從伺服器從主伺服器收到的更新記入到從伺服器自己的二進位制日誌檔案中)
slave-skip-errors=all
skip-name-resolve
sync_binlog=1 #必加(兩個資料庫都加)
auto-increment-offset=2(兩個伺服器值設定不同)
auto-increment-increment=2
2.重啟資料庫伺服器
見 一主一從 配置步驟說明
3.分別為兩臺伺服器資料庫建立同步使用者,並設定好許可權
見 一主一從 配置步驟說明
4.同步資料庫資料
見 一主一從 配置步驟說明
5.分別檢視兩臺伺服器資料庫的master資訊
見 一主一從 配置步驟說明
6.分別設定master連線資訊
見 一主一從 配置步驟說明
7.分別啟動slave;
見 一主一從 配置步驟說明
可能出現的問題
1.同步失敗,通過show slave status; 看到 Could not find first log file name in binary log index file資訊
解決方法:
(1)先進入slave中執行:"stop slave;"來停止從庫同步;
(2)進入master資料庫中執行 flush logs;
(3)在master資料庫中檢視日誌資訊
show master status;
(4)在slave資料庫中修改同步日誌名稱和位置 ,從新啟動同步;
2.不重要的錯誤導致同步失敗,並停止同步
解決方法:
設定跳過同步錯誤方法:每個錯誤都有對應的錯誤code,可以通過show slave status;檢視
修改slave資料庫的my.cnf 在[mysqd]中新增
slave_skip_errors=1032,1064 #1032和1064就是兩個同步錯誤的code
如果設定為all 則所 有錯誤都將跳過
3.start slave;時出現
Slave failed to initialize relay log info structure from the repository
解決方法:
reset slave all清空所有的複製資訊,然後重置gtid_purged和master.infor