您好,登錄后才能下訂單哦!
MySQL主從復制怎樣實現高可用,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
80%都是查詢
緩存來保護數據庫:Redis、ElasticSearch
數據庫系統要有一定的容災能力
數據狀態化明顯
MTTF:平均無故障時間
MTTR:平均維護時間
HA=MTTF/(MTTF+MTTR)* 100% (這就是常說的99.95%)
主從(非對稱)
master-slave,熱數據備份,從庫一般是用來實時備份,從機可以快速切換為主庫,讀寫分離(數據的一致性),從庫一般設置為只讀
前端應用走緩存,后端應用Report走從庫查
對稱方式
兩個節點,互為主從,雙主模式(兩個數據庫的主鍵如果是自動生成需要初始設置成不一樣的)
A-1001,1003,1005,B-1002,1004,1006
雙主下數據同步一定要實時
多機方式
MHA
MMM
MyCat(可以實現雙主機熱切)
資源:兩臺數據庫
Master會將修改記錄進binlog
Slave從主庫binlog讀取數據寫入relaylog
relaylog和binlog的格式一樣,可以用mysqlbinlog讀取relaylog
mysql> show relaylog events in 'relay-bin.000001';
binlog的postition方式
GTID方式:MySQL版本>=5.7
Master服務器配置
# 慢查詢開關 slow_query_log=ON slow_query_log_file=/usr/local/slowlog/slow.log slow_launch_time=4 long_query_time=3 # chown -R mysql:mysql /usr/local/slowlog/
binlog設置
server_id=213 log_bin=/usr/local/binlog/mysql-bin # 只需要給名字前綴 binlog_format=row expire_logs_days=3 max_binlog_size=200m
Slave服務器配置
# 慢查詢開關 slow_query_log=ON slow_query_log_file=/usr/local/slowlog/slow.log slow_launch_time=4 long_query_time=3 # chown -R mysql:mysql /usr/local/slowlog/
從庫的主從設置
server_id=214 relay_log=/usr/local/relaylog/relay-bin relay_log_recovery=1 #確保完整性 read_only=on #從服務器只讀 skip_slave_start=on #slave重啟后不會自己啟動復制鏈路,需要手動啟動,建議手動啟動,好處是檢查無誤后啟動 master_info_repository=TABLE # 將主從服務的信息保存進表 relay_log_info_repository=TABLE # 將主從服務的信息保存進表
主從指明不同步的數據庫
# Master # 不同步數據庫 binlog-ignore-db=mysql binlog-ignore-db=information_schema # 只同步某一些數據庫 binlog-do-db=icoding_admin # Slave # 復制哪些數據庫 replicate-do-db=icoding_admin replicate-do-db=game # 不復制哪些數據庫 replicate-ignore-db=mysql replicate-ignore-db=information_schema
先Master上建立授權賬號
# Master授權給slave mysql> use mysql; mysql> grant replication slave on *.* to 'synuser'@'192.168.0.214' identified by '123456'; mysql> flush privileges;
初始化Slave數據
# Master和Slave的數據庫版本要一致,Master<=Slave mysqldump -uroot -p123456 -h227.0.0.1 --flush-logs --master-data=2 --routines --triggers --events --single-transaction --databases icoding_admin > mydb.sql #CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=154; 就用導出的日志pos
啟動復制鏈路
# 在slave上執行 mysql> change master to master_host='192.168.0.213', master_port=3306, master_user='synuser', master_password='123456', master_log_file='mysql-bin.000004', master_log_pos=154;
注意事項
主從復制的時候主從數據庫的UUID不能一樣,如果是鏡像方式,啟動前將UUID文件刪除,會重新創建 cd /var/lib/mysql cat auto.cnf # 將他刪除 server-uuid=890980d9-b072-11ea-8ab8-00163e03668d
啟動主從復制
# show slave status \G 可以查看主從復制的狀態和日志錯誤 # 啟動slave mysql> start slave; # 停止slave mysql> stop slave;
作業1:搭建一個雙主的結構
使用GTID方式進行復制鏈路
# 默認GTID是不開啟的 # 如果開啟以下操作不可用 # create table ..... select * from xxx; 不可用 # 在一個事務里不能創建和刪除表 # 在一個事務里更新innodb引擎和myisam不可用
無意中刪除了一個數據,可以做延時從庫
# 從庫做備份就無法做到數據的及時恢復 # 讓我的從庫做到延時同步 mysql> stop slave; mysql> change master to master_delay=10; # 延時10秒 mysql> start slave; mysql> show slave status \G;
master(實時slave,延時slave)
看完上述內容,你們掌握MySQL主從復制怎樣實現高可用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。