資料庫學習--主從複製
阿新 • • 發佈:2018-12-29
在實際生產環境中,單臺mysql資料庫是完全不能滿足實際需求,無論安全,高可用性,高併發等各個方面的要求。mysql主從複製是滿足這些要求的基礎,主要用於實時備份,高可用,讀寫分離的場景
原理
- master伺服器將資料的改變記錄二進位制日誌,當master上的資料發生改變時,則將其改變寫入二進位制日誌中。
- salve伺服器會在一定時間間隔內對master二進位制日誌進行探測其是否發生改變,如果發生改變,則開始一個I/OThread請求master二進位制事件
- 同時主節點為每個I/O執行緒啟動一個dump執行緒,用於向其傳送二進位制事件,從節點儲存至中繼日誌。
- 從節點將啟動SQL執行緒從中繼日誌中讀取二進位制日誌,在本地重放,使得其資料和主節點的保持一致。
- 最後I/OThread和SQLThread將進入睡眠狀態,等待下一次被喚醒。
過程
基本要求
- 兩臺伺服器
- 兩臺伺服器版本一致(主節點低於從節點)
- 兩臺伺服器防火牆關閉
- 雙方資料庫使用者的使用者,要具有遠端訪問的許可權【參考遠端】
主伺服器
修改主伺服器的mysql配置檔案 (wind:my.ini,linux(my.cnf)),放在mysqld下面
[mysqld] 有重複的選項,將設定的欄位保證不會被覆蓋 #mysql唯一id server-id = 1 #二進位制日誌檔案,此項為必填項,否則不能同步資料; log-bin = "mysql-bin" #指定二進位制錯誤檔案 log-error="mysql-error" #需要同步的資料庫,如果需要同步多個數據庫; binlog-do-db = 庫名 #binlog-do-db = 庫名 #binlog-do-db = 庫名 #不需要同步的資料庫 binlog-ignore-db = mysql
給從資料庫授權
8.0版本以下
GRANT REPLICATION SLAVE ON *.* to 'root'@'172.16.168.142' identified by '123456';
8.0版本
CREATE USER 'root'@'192.168.43.152' IDENTIFIED WITH
mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.43.152';
最後幾步
#重新整理許可權 flush privileges; #重啟服務 service mysql restart;重啟 (linux上: /etc/init.d/mysql restart) #查詢二進位制資訊 show master status 查詢主伺服器二進位制資訊
從伺服器配置
[mysqld]
server-id=2 #預設是1改成2
log-bin="mysql-bin" #這行本身有
replicate-do-db=uek_demo #需要同步的資料庫
replicate-ignore-db=mysql #不同步系統資料庫
read_only #設只讀許可權,一般不寫
重啟mysql服務
執行同步sql語句
[mysqld]
change master to
master_host='主機域名'
master_user='root'
master_password='密碼'
master_log_first='主伺服器的二進位制地址'
master_log_pos='主伺服器的pos'
#例項
change master to master_host='192.168.43.192',master_user='root',master_password='lz1022',master_log_file='mysql-bin.000008',master_log_pos=154;
開啟同步
start slave
判斷是否成功
show slave status\G;
i/o sql值是否為yes
沒有表/庫,手動建立***
其中Slave_IO_Running 與 Slave_SQL_Running 的值都必須為YES,才表明狀態正常