分散式專題|面試官問我瞭解Mysql主從複製原理麼,我能說不會麼?
搭建Mysql主從同步之前,我們先來說他們之間同步的過程與原理:
同步複製過程
獻上一張圖,這張圖詮釋了整個同步過程
主從複製過程:
- slave節點與主節點進行連線,建立主從關係,並把從哪開始同步,及哪個日誌檔案都一併傳送到master
- master將修改的資料儲存到binlog中
- master開啟binlog dump執行緒,將binlog日誌推送到連線的slave中
- slave接受到推送的binlog,slave開啟IO執行緒將資料寫到中繼日誌(relay log)中
- slave同時還會開啟一個SQL執行緒,對比中繼日誌中新增的內容,並且解析SQL,回放資料到從資料庫中
好的,複製過程已經說完了,我們現在實踐下,快速搭建一個mysql主從架構。
沒錯,我這裡還是使用docker搭建,因為它很香啊!
搭建Mysql 主從
建立mysql網路
docker network create mysqlNet
安裝mysql
- 執行mysql主節點
docker run -p 3306:3306 --name mysql_master -h mysql_master --net=mysqlNet \
-v ~/docker/mysql/mysql_master/log:/var/log/mysql \
-v ~/docker/mysql/mysql_master/data:/var/lib/mysql \
-v ~/docker/mysql/mysql_master/conf:/etc/mysql \
-e lower_case_table_names=1 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
- 修改配置檔案
# 編輯檔案
vim ~/docker/mysql/mysql_master/conf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection=utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
## 同一區域網內注意要唯一
server-id=1
## 開啟二進位制日誌功能,可以隨便取(關鍵)
log-bin=mysql-bin
- 重啟mysql_master
docker restart mysql_master
- 在master節點上 建立給從節點進行復制的使用者
docker exec -it mysql_master mysql -uroot -proot
# 建立使用者
CREATE USER 'mysql_slave'@'%' IDENTIFIED BY '111111';
# 授權
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'mysql_slave'@'%';
- 執行mysql從節點
docker run -p 33306:3306 --name mysql_slave -h mysql_slave --net=mysqlNet \
-v ~/docker/mysql/mysql_slave/log:/var/log/mysql \
-v ~/docker/mysql/mysql_slave/data:/var/lib/mysql \
-v ~/docker/mysql/mysql_slave/conf:/etc/mysql \
-e lower_case_table_names=1 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
- 編輯從節點配置檔案
# 編輯檔案
vim ~/docker/mysql/mysql_master/conf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection=utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
## 設定server_id,注意要唯一
server-id=2
## 開啟二進位制日誌功能,以備Slave作為其它Slave的Master時使用
log-bin=mysql-slave-bin
## relay_log配置中繼日誌
relay_log=edu-mysql-relay-bin
## 設定只讀許可權
read_only = 1
innodb_read_only
## 使得更新的資料寫進二進位制日誌中
log_slave_updates = 1
#如果master庫名與salve庫名不同,使用以下配置[需要做對映]
#replicate-rewrite-db = [主庫名] -> [從庫名]
#如果不是要全部同步[預設全部同步],則指定需要同步的表
#replicate-wild-do-table=庫名.表1
#replicate-wild-do-table=庫名.表2
現在主從節點已經安裝完成,我們接下來需要讓他們建立關係:
先檢視master節點當前的狀態,主要看下日誌檔案和當前的位置
docker exec -it mysql_master mysql -uroot -proot
show master status;
exit
exit
結果如下:檔案為mysql-bin.000001 位置為629
拿到這些資訊之後,我們現在就可以讓從節點與主節點建立關係,並執行同步了:
docker exec -it mysql_slave mysql -uroot -proot
change master to master_host='mysql_master', master_user='mysql_slave', master_password='111111', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 629, master_connect_retry=30;
我們繼續看下slave節點的狀態
show slave status\G;
我們看到我們在文首提到的兩個執行緒並沒有啟動,所以我們需要手動啟動著兩個執行緒,一個命令就好了
start slave;
現在可以看到兩個執行緒已經在執行了。
到此,已經搭建完成了
測試
這個我就不演示了,大家可以在mysql_master上建立一個資料庫,看看是不是會同步到mysql_slave上。
微信搜一搜【樂哉開講】關注帥氣的我,回覆【乾貨領取】,將會有大量面試資料和架構師必看書籍等你挑選,包括java基礎、java併發、微服務、中介軟體等更多資料等你來取哦。
相關文章
- 深入瞭解MySQL主從複製的原理MySql
- 面試官問我會不會Elasticsearch,我語塞了...面試Elasticsearch
- 面試官問我MySQL索引,我面試MySql索引
- redis分散式鎖,面試官請隨便問,我都會Redis分散式面試
- 面試中的MySQL主從複製|手撕MySQL|對線面試官面試MySql
- 面試官問我按鈕級別許可權怎麼控制,我說v-if,面試官說再見面試
- ## 【分散式事務】面試官問我:MySQL中的XA事務崩潰瞭如何恢復??分散式面試MySql
- 面試官:五年經驗,我不問問反射說不過去吧?面試反射
- 面試官問我MySQL調優,我真的是面試MySql
- MySQL主從複製原理MySql
- mysql主從複製配置與問題解決MySql
- mysql的主從複製 原理講解MySql
- 高頻面試:如何解決MySQL主從複製延時問題面試MySql
- 如果我是推薦演算法面試官,我會問哪些問題?演算法面試
- 當面試官問我JDK Semaphore的原理時,我笑了面試JDK
- MySQL(13)---MYSQL主從複製原理MySql
- 面試官:Redis 主從複製時網路開小差了怎麼整?面試Redis
- MySQL主從複製問題解決一例MySql
- MySQL面試寶典-主從複製篇MySql面試
- 面試官:我們們來聊一聊mysql主從延遲面試MySql
- 主從複製是啥或者主從複製的原理是什麼?
- 面試官問分散式技術面試題,一臉懵逼怎麼辦?分散式面試題
- 面試官問我:什麼是JavaScript閉包,我該如何回答面試JavaScript
- 當面試官問我Mybatis初始化原理時,我笑了面試MyBatis
- 面試官竟然問我怎麼實現分散式鎖?幸虧我總結了全套八股文面試分散式
- 我以為我對Mysql索引很瞭解,直到我遇到了阿里的面試官MySql索引阿里面試
- 面試官問我HTTP,我真的是面試HTTP
- 面試官:你還有什麼想問我的?面試
- 面試官:Java 反射是什麼?我回答不上來!面試Java反射
- Mysql主從複製原理及搭建MySql
- MySQL 主從複製原理不再難MySql
- 面試官問我:什麼是訊息佇列?什麼場景需要他?用了會出現什麼問題?面試佇列
- 面試官瘋了嗎,問我為什麼浮點數不精確?面試
- 面試官:你真的瞭解Redis分散式鎖嗎?面試Redis分散式
- 【肥朝】面試官問我,Redis分散式鎖如何續期?懵了。面試Redis分散式
- 面試官竟然問我訂單ID是怎麼生成的?難道不是MySQL自增主鍵?面試MySql
- 「每日一題」有人上次在dy面試,面試官問我:vue資料繫結的實現原理。你說我該如何回答?每日一題面試Vue
- 面試官:說說你對NoSQL的瞭解,為什麼要有NoSQL面試SQL