MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构
什么是MySQL主從架構
首先,大家來看一張圖
master-slave
從上圖中,可以看出,MySQL主從架構利用的是MySQL的主從復制原理,它主要分三個過程
1.master 主機將操作記錄到二進制日志(binary log)。這些記錄過程叫做二進制日志事件,binary log events
slave 將 master 的 binary log events 拷貝到它的中繼日志(relay log)
slave 重做中繼日志中的事件,將改變應用到自己的數據庫中。 MySQL 復制是異步的且串行化的
簡單的來說就是 slave 節點會從 master 讀取 bin-log 來進行數據同步。
問題:從服務器永遠會比主服務器慢一點?
回答:是的,因為在一個事務處理中,往數據庫寫的速度比較快,但是產生的二進制文件是先存在緩存空間中的,當事務結束之后,再一條一條的同步到二進制文件中,再一條一條發給從服務器,從服務器再一條條執行,所以會慢很多。
問題:從服務器需不需要二進制日志
回答:一般的主從復制是不需要的,從服務器只需要讀取主服務器的日志就可以了。如果是有做主從切換或者多級復制的話,就需要用到從服務器的二進制日志了。
問題:有哪些使用場景?
回答:MySQL可用性備份,高可用,讀寫分離,異地容災,分攤負載等
下面我們就開始簡單地配置一下 MySQL 的主從復制架構。
MySQL配置文件: Windows下為my.ini,Linux下為my.cnf
把192.168.1.1作為主庫服務器,把192.168.1.2作為從庫服務器,在主庫上給從庫創建一個可以讀取主庫 bin-log 的賬號
mysql> grant replication slave on *.* to 'slaveroot'@'192.168.1.2' identified by '123456';
mysql> flush privileges;
2.修改主庫的配置信息,在配置文件中 [mysqld] 后面配置上下面的內容
# 編輯配置文件 添加相關配置
log-bin = /home/binlog/demo/master-binlog
# 選擇一個唯一的server-id
serve-id = 1
#需要同步的數據庫
binlog-do-db=demo
#忽略的庫
binlog-ignore-db=mysql
binlog-ignore-db=test
修改配置文件后,重啟服務
> service mysqld restart
如果啟動失敗,通過cat /var/log/mysqld.log | tail -30 查看 mysql 啟動失敗的日志,從日志內容尋找解決方案
查看主服務器當前二進制日志名和偏移量,這個操作的目的是為了在從數據庫啟動后,從這個點開始進行數據的恢復
mysql> show master status;
主庫配置完成后,下面我們開始操作從庫的配置
修改從庫的配置文件
server-id=2
master-host=192.168.1.1
master-user=slaveroot
master-password=123456
master-port=3306
replicate-do-db=demo
配置完成后進行重啟數據庫。如果重啟失敗,報錯。則直接在從庫上執行下面的 SQL 語句來操作。
mysql> change master to master_host=‘192.168.1.1’,
master_user=‘slaveroot’,
master_password=‘123456’,
master_log_file=‘mysql-bin.000001’,
master_log_pos=‘1304’;
# 后面兩個參數要和主庫保持一致
mysql> show slave status;
mysql> slave start;
slave start
當結果中 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 都顯示為 YES,則表明搭建成功。
注意:為了保證搭建成功,不受防火墻影響,大家可以把主從兩臺服務器上的防火墻都給關了。
復制過程中的相關線程
master:dump線程
slave:IO線程 和 sql線程
說明:
salve的I線程是連接到master的dump線程的,如果主服務器宕機的 那么IO線程就無法工作了,但是sql線程還是可以繼續工作的,因其主要是監控中繼日志的變化的,中繼日志沒變化,它也只是變為空閑而已。所以 當master重啟之后,從服務器只需要重連IO線程 而sql線程不需要重啟。
如果主服務在運行過程中宕機,日志還在緩存空間沒有同步到二進制日志文件中怎么辦?從服務器得不到事件。讓主服務器事務已提交必須立即寫到二進制日志中, 配置主服務器同步二進制文件 用于事務安全.
mysql> sync_binlog = on;
db快速回滾恢復,防止發生刪庫跑路
問:一旦發生刪庫或其他危險性操作, 比如update不帶條件式的修改(你又沒開update保護),應該如何補救?
答:從庫延遲一小時
#一小時間隔后重新連上主機把所有的數據全部同步過來,然后立馬斷開,這個從庫會與主庫保持1個小時的數據差距.從庫的服務器上執行:
mysql> stop slave;
mysql> change master to master_delay = 1800; #1800s后才同步
mysql> start slave;
※說明:
這個方法有個缺點就是: 從庫在連上主庫進行同步的一小段時間內剛好發生了刪庫事故或其他update不帶條件的災難,這個時候根本無法恢復. 因此最好開設雙從庫的1小時延遲同步: 即對第一臺從庫執行一次延時1小時的命令change master to master_delay=3600;
過過半小時后再對另一臺從機執行change master to master_delay=3600;
那么現在這兩臺從機就有半小時的同步間隔時間,即使事故發生在第一臺從機連接的時候,仍舊有半小時的補救時間
總結
好了,以上及時MySQL簡單的主從架構搭建,以后可以繼續分享工作中用到的場景。
總結
以上是生活随笔為你收集整理的MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: layui导入模板数据_layui表格-
- 下一篇: zabbix mysql版本号_zabb