前言:本文將介紹主從複製的作用,原理以及實戰等內容
一,主從複製作用
MYSQL主從複製有利於數據庫架構的健壯性,提升訪問速度和易於管理
健壯性:
當主服務器出現問題,可以立刻切換到從服務器提供服務
1.主從服務器互爲備份
但是異步同步,有時還是不能數據完全一樣,當主掛了,只能把主的binlog拉到從庫上,讓從庫不丟失數據
2.讀寫分離分擔網站壓力(讀寫分離數據庫結構)
把更新數據操作交給主服務器,查詢交給從服務器,如果網站以瀏覽爲主的業務,這時多個從服務器的負載均衡就很有效了
中大型公司:通過程序(php,java)
測試環境:代理軟件(mysql-proxy,amoeda)
二,主從複製原理
1.是異步方式同步,邏輯同步,通過SQL語句執行,主庫通過記錄BINLOG實現對從庫的同步
2.從庫有兩個線程IO和SQL,主庫有一個線程IO
3.從庫IO會向主庫IO要BIN-lOG的文件裏的數據和下一個位置點,放在relay-log中繼日誌下,然後master.info文件會根據relaylog更新自己上面記錄bin-log文件的下一個位置
4.從庫SQL線程會根據relay-log裏的日誌,把數據寫到從庫數據文件裏
三,主從複製實戰之一主多從
1,主庫打開binlog,修改server id,創建連接賬號
vim /etc/my.cnf log_bin=mysql-bin server_id=1 GRANT REPLICATION SLAVE ON *.* TO 'rep'@'%' IDENTIFIED BY '456'; flush privileges;
2,全備
mysqldump -uroot -A --events --master-data=2 > /opt/backup.sql
3,從庫關閉binlog,修改id,設置只讀,導入全備數據
vim /etc/my.cnf #log_bin=mysql-bin server_id=2 read-only mysql -uroot < /opt/backup.sql
4,從庫配置連接,根據/opt/backup.sql裏記錄的時刻點,我的是mysql-bin.000006,417
CHANGE MASTER TO MASTER_HOST='11.2.0.75', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='456', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=417; 如果--master-data=1,這兩個不用寫 start slave; show slave status\G; 看到兩個YES表示成功
四,主從複製實戰之雙主互備
1,我們已經是一主一叢的狀態了,數據同步完整,修改主庫配置文件
auto_increment_increment=2 auto_increment_offset=1 log-slave-updates=true log-bin=mysql-bin
2,配置從庫配置文件,把read-only去掉
auto_increment_increment=2 auto_increment_offset=2 log-slave-updates=true log-bin=mysql-bin
3,重啓數據庫
server mysqld restart
4,將原先的主庫當成從庫,做一次同樣的配置,我用的是多實例,所以只改了一下port
CHANGE MASTER TO MASTER_HOST='11.2.0.75', MASTER_PORT=3307 MASTER_USER='rep', MASTER_PASSWORD='456', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=417; 如果--master-data=1,這兩個不用寫 start slave; show slave status\G; 看到兩個YES表示成功