mysql8.0 主從復制安裝及配置


原理:主庫的所有變更操作(寫入更新)都會視為事件,寫入二進制日志文件中。從庫通過讀取主庫的二進制日志文件,並在從庫中執行這些事件,達到主從同步。

准備兩台服務器,分別在兩台服務器進行以下配置:

cd /etc/my.cnf.d
vim mysql-server.conf

主數據庫配置核心部分

#設置同步的binary log二進制日志文件名前綴,默認為binlog
log-bin=mysql-bin
#服務器唯一id,默認為1  主數據庫和從數據庫的server-id不能重復
server-id=1      

#需要復制的數據庫
binlog-do-db=test
#過濾,也就是指定哪個數據庫不用同步
binlog-ignore-db=mysql
#為每個session分配的內存,在事務過程中用來存儲二進制日志的緩存
binlog_cache_size=1M
#主從復制的格式(mixed,statement,row,默認格式是statement。建議是設置為row,主從復制時數據更加能夠統一)
binlog_format=row
#設置二進制日志自動刪除/過期的天數,避免占用磁盤空間。默認值為0,表示不自動刪除。
expire_logs_days=7
#跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。
#如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致
slave_skip_errors=1062

重啟數據庫

service mysqld restart

執行mysql語句

create user 'root'@'%' identified by '123456';
grant replication slave on *.* to 'root'@'%';
flush privileges;
show master status \G
*__將File及Position復制下來,從庫配置會用到上面的信息__*

cd /etc/my.cnf.d
vim mysql-server.conf

從庫數據庫配置核心部分

# 設置同步的binary log二進制日志文件名前綴,默認是binlog
log-bin=mysql-bin
# 服務器唯一ID  主數據庫和從數據庫的server-id不能重復
server-id=2

###可選配置
# 需要主從復制的數據庫 
replicate-do-db=test
# 復制過濾:也就是指定哪個數據庫不用同步(mysql庫一般不同步) 
binlog-ignore-db=mysql
# 為每個session分配的內存,在事務過程中用來存儲二進制日志的緩存 
binlog_cache_size=1M
# 主從復制的格式(mixed,statement,row,默認格式是statement。建議是設置為row,主從復制時數據更加能夠統一) 
binlog_format=row
# 設置二進制日志自動刪除/過期的天數,避免占用磁盤空間。默認值為0,表示不自動刪除。 
expire_logs_days=7
# 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。 
# 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致 
slave_skip_errors=1062
# relay_log配置中繼日志,默認采用 主機名-relay-bin 的方式保存日志文件 
relay_log=replicas-mysql-relay-bin
# log_slave_updates表示slave將復制事件寫進自己的二進制日志
log_slave_updates=1
# 防止改變數據(只讀操作,除了特殊的線程)
read_only=1

重啟數據庫

service mysqld restart

執行mysql語句

mysql:

change master to MASTER_HOST='192.168.0.23',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='tw369.com',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=156;
flush privileges;
start slave;/stop slave;
show slave status \G

確認結果

如果 Slave_IO_Running=YES、Slave_SQL_Running=Yes、Slave_IO_State=Waiting for master to send event 則表示成功

常見問題處理

show slave status \G

檢查Last_Error的信息,在Master檢索日志

mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000001 | grep -A '10' 55154294

手工干預處理后,忽略掉錯誤的一致性問題,重新開啟同步

stop slave;set global sql_slave_skip_counter=1;start slave;show slave status\G;

如反復出現,類似於常見BUG,則忽略掉相關的錯誤

vim /etc/my.cnf

slave-skip-errors = 1032,xxxx,xxxx ....

重啟服務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM