主庫n -> 從庫s - MySQL5.7多主一從(多源複製)同步配置 - 計算機...

2021-01-07 計算機java編程

多主一從,也稱為多源複製,數據流向:

主庫1 -> 從庫s主庫2 -> 從庫s主庫n -> 從庫s應用場景

數據匯總,可將多個主資料庫同步匯總到一個從資料庫中,方便數據統計分析。讀寫分離,從庫只用於查詢,提高資料庫整體性能。部署環境

註:使用docker部署mysql實例,方便快速搭建演示環境。但本文重點是講解主從配置,因此簡略描述docker環境構建mysql容器實例。

資料庫:MySQL 5.7.x (相比5.5,5.6而言,5.7同步性能更好,支持多源複製,可實現多主一從,主從庫版本應保證一致)作業系統:CentOS 7.x容器:Docker 17.09.0-ce鏡像:mysql:5.7主庫300:IP=192.168.10.212; PORT=4300; server-id=300; database=test3; table=user主庫400:IP=192.168.10.212; PORT=4400; server-id=400; database=test4; table=user主庫500:IP=192.168.10.212; PORT=4500; server-id=500; database=test5; table=user從庫10345:IP=192.168.10.212; PORT=4345; server-id=10345; database=test3,test4,test5; table=user配置約束

主從庫必須保證網絡暢通可訪問主庫必須開啟binlog日誌主從庫的server-id必須不同【主庫300】操作及配置

配置my.cnf

安裝啟動

註:若不熟悉docker,可使用傳統方式安裝mysql,效果相同。

創建授權用戶

連接mysql主資料庫,鍵入命令mysql -u root -p,輸入密碼後登錄資料庫。創建用戶用於從庫同步複製,授予複製、同步訪問的權限

log_bin是否開啟

查看master狀態

【主庫400】配置及操作

配置my.cnf

安裝啟動

創建授權用戶

創建用戶用於從庫同步複製,授予複製、同步訪問的權限

log_bin是否開啟

查看master狀態

【主庫500】配置及操作

配置my.cnf

安裝啟動

創建授權用戶

創建用戶用於從庫同步複製,授予複製、同步訪問的權限

log_bin是否開啟

查看master狀態

【從庫10345】配置及操作

配置my.cnf

安裝啟動

設置【主庫】信息

登錄【從庫10345】,進入mysql命令行。

stop slave; //停止同步start slave; //開始同步 //必須和【主庫】的信息匹配。 CHANGE MASTER TO MASTER_HOST='192.168.10.212', //主庫IP MASTER_PORT=4300, //主庫埠 MASTER_USER='slave', //訪問主庫且有同步複製權限的用戶 MASTER_PASSWORD='123456', //登錄密碼//【關鍵處】從主庫的該log_bin文件開始讀取同步信息,主庫show master status返回結果 MASTER_LOG_FILE='mysql-bin.000003',//【關鍵處】從文件中指定位置開始讀取,主庫show master status返回結果 MASTER_LOG_POS=438 for channel '300'; //定義通道名稱

查看同步狀態

可以看見設置三個的主從同步通道的所有狀態信息。只有【Slave_IO_Running】和【Slave_SQL_Running】都是Yes,則同步是正常的。 如果是No或者Connecting都不行,可查看mysql-error.log,以排查問題。

配置完成,則【從庫10345】開始自動同步。

若需要單獨啟動或停止某個同步通道,可使用如下命令:start slave for channel '300'; //啟動名稱為300的同步通道 stop slave for channel '300'; //停止名稱為300的同步通道

驗證數據同步

建庫

使用root帳號登錄【主庫300】,創建test3資料庫

建表

在【主庫300】中創建user表

新增

在【主庫300】中向user表插入一條數據:

在【從庫10345】中查詢user表數據:

新增記錄同步成功。

更新

在【主庫300】中修改剛才插入的數據:

在【從庫10345】中查詢user表數據:

更新記錄同步成功。

刪除

在【主庫300】中刪除剛才更新的數據:

在【從庫10345】中查詢user表數據:

刪除記錄同步成功。註:【主庫400】、【主庫500】的驗證操作與上述類似。

補充:

如果【主伺服器】重啟mysql服務,【從伺服器】會等待與【主伺服器】重連。當主伺服器恢復正常後,從伺服器會自動重新連接上主伺服器,並正常同步數據。如果某段時間內,【從資料庫】伺服器異常導致同步中斷(可能是同步點位置不匹配),可以嘗試以下恢復方法:進入【主資料庫】伺服器(正常),在bin-log中找到【從資料庫】出錯前的position,然後在【從資料庫】上執行change master,將master_log_file和master_log_pos重新指定後,開始同步。

相關焦點

  • 高性能Mysql主從架構的複製原理及配置詳解
    一旦發現沒法精確複製時, 會自動選著基於行的複製。基於行的複製:把改變的內容複製過去,而不是把命令在從伺服器上執行一遍. 從mysql5.0開始支持混合類型的複製: 默認採用基於語句的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。
  • 資料庫基礎:mysql主從集群搭建
    mysql 主從備份工作原理主從簡單的說就是把 一個伺服器上執行過的sql語句在別的伺服器上也重複執行一遍, 這樣只要兩個資料庫的初態是一樣的,那麼它們就能一直同步。當然這種複製和重複都是mysql自動實現的,我們只需要配置即可。
  • SpringBoot配置多數據源最簡單的解決方案
    一個最簡單的SpringBoot+Mybatis的多數據源解決方案,基於Mysql資料庫。不能用你打我,需要指導可以留言。喜歡可以關注我,不扯淡,還是謝謝你。1.第一步先配置多個數據源信息,在application.properties文件裡面。
  • Mysql常用關鍵字指令和參數總結
    因為鎖在最後釋放,所以如果鎖多行或者多個表的行,要把鎖衝突最大的放在最後。排序算法:小數據量內存中快排,大數據外部排序歸併,還有order by limit小數據用堆排序(優先隊列)io_thread:主備同步時備庫用來連接主庫的線程sql_thread
  • SpringBoot + MyBatis + MySQL讀寫分離實踐!
    這裡我們選擇程序自己來做,主要是利用Spring提供的路由數據源,以及AOP然而,應用程式層面去做讀寫分離最大的弱點(不足之處)在於無法動態增加資料庫節點,因為數據源配置都是寫在配置中的,新增資料庫意味著新加一個數據源,必然改配置,並重啟應用。當然,好處就是相對簡單。2.
  • 9位阿里大牛發布這份800多頁MySQL性能優化法則筆記
    開篇必水從計算機出現的第一天起,性能作為鞭策者就不斷地促進計算機及系統的演進。從最開始的人工輸入命令等待計算機執行,到利用批處理任務提升利用率,再到通過多進程和多線程並發來進一步提升效率,性能其實一直是計算機工程師想要努力去解決和改善的重要難題。
  • 基於Canal和Kafka實現MySQL的Binlog近實時同步
    選用的虛擬機系統是CentOS7。安裝MySQL為了簡單起見,選用yum源安裝(官方連結是https://dev.mysql.com/downloads/repo/yum):mysql80-community-release-el7-3雖然包名帶了mysql80關鍵字,其實已經集成了MySQL主流版本5.6、5.7和8.x等等的最新安裝包倉庫選用的是最新版的MySQL8.x社區版
  • 您的包裹「 MySQL靈魂十連」 待籤收
    mysql 默認的複製方式是異步的,並且複製的時候是有並行複製能力的。主庫把日誌發送給從庫後不管了,這樣會產生一個問題就是:假設主庫掛了,從庫處理失敗了,這時候從庫升為主庫後,日誌就丟失了。由此產生兩個概念:全同步複製和半同步複製。
  • 完美,阿里DBA骨幹團隊編寫的792頁MySQL調優筆記真香
    對於讀多寫少的應用程式,可以設計為讀寫分離,把允許延遲的讀請求主動分發到備庫;對於秒殺型的業務,可以先在內存型key-value存儲系統篩選再發往資料庫持久化,避免對資料庫的衝擊;對於匯總、聚合類的應用,可以採用列式存儲引擎或者專門的大數據平臺;對於監控類的應用,可以採用時序資料庫,等等。
  • MySQL一直自動重啟解決辦法
    If you see no messages after this, something wentterribly wrong...stack_bottom = 7f4846172820 thread_stack 0x80000/usr/local/mysql5.7/bin/mysqld(my_print_stacktrace+0x2c)[0xed481c]/usr/local/mysql5.7/bin
  • MySQL5.7中如何使用開窗函數
    但是我們目前還有很多人在使用5.7版本。那麼在5.7版本中,如何實現開窗函數的功能呢?`emp`(`id`,`emp_name`,`dept_no`,`emp_salary`,`emp_hire_date`)VALUES(5,'王強強','0001',3000,'2019-03-14');INSERTINTO`mysql_db`.
  • CentOS7.X 掛載磁碟 與Mysql 自動備份
    然後輸入n開始創建分區 輸入p創建主分區 5、檢查是否分區成功(帶有sdb1/vdb1/xvb1說明成功) fdisk -l
  • MySQL-mysqldump備份資料庫
    mysqldump備份1、備份命令格式:mysqldump -h主機名 -P埠 -u用戶名 -p密碼 --database 資料庫名 > 文件名.sql 例如: mysqldump -h 192.168.1.100 -p 3306 -uroot -ppassword --database
  • Prometheus 監控MySQL資料庫
    這裡我的伺服器配置為阿里雲2h4g由於Prometheus及相關的exporter會隨著版本發生變化,官方推薦都是最新的版本。18.09的版本,具體參考docker官方文章export VERSION=19.03curl -fsSL "https://get.docker.com/"| bash -s ----mirror Aliyun所有機器配置加速源並配置docker的啟動參數使用systemd
  • 阿里5位嘉賓3個分享:HBaseCon Asia 2017乾貨滿滿
    阿里乾貨系列一、強同步複製傳統的HBase主備集群同步使用的方案是異步複製,這使得主備集群數據之間會有短暫的數據不同步現象。用戶為了災備,不得不放棄強一致模型。沒法放棄強一致語義的用戶,必須自己寫一套複雜的邏輯來保證主備集群之間數據的讀寫一致性。
  • Centos7.9安裝Mariadb資料庫
    release 7.9.2009 (Core) 一、安裝MariaDB 通過yum安裝就行了。systemctl start mariadb # 開啟服務[root@localhost ~]# systemctl enable mariadb # 設置為開機自啟動服務 2、首次安裝需要進行資料庫的配置,命令都和mysql的一樣 [root@localhost ~]# mysql_secure_installation
  • 搞定MySQL安裝難安裝貴問題
    是真正的免安裝綠色方法,不用配環境變量,不用執行install命令,不用配置my.ini文件。>命令成功生成data目錄,同時生成無密碼的root用戶啟動MySQLbin下執行mysqld--console設置root密碼執行mysql-uroot-p連入資料庫,密碼不用輸入,直接按回車進入mysql>