Docker搭建MySQL主從複製(一主一從)

2020-12-10 計算機java編程

一、Docker安裝MYSQL

說明: 系統為阿里雲伺服器,作業系統為CentOS7.6。MYSQL版本 8.0.22

1、安裝Docker

2、拉取MySQL的鏡像

運行完以上命令之後,鏡像就已經下載下來了,可以用 docker images命令查看是否已經下載成功

3、第一次啟動MySQL

參數說明

之後的第二次啟動直接用 docker start MYSQL8即可。

4、連接navicat

新裝了MYSQL8.0後再用navicat連接就會報2059的錯誤。上網查了發現是8.0之後MYSQL更改了密碼的加密規則,只要在命令窗口把加密方法改回去即可。

1) 首先使用以下命令進入MySQL的Docker容器

2)然後登錄MySQL

3)最後運行以下SQL即可

添加完後保存,同時退出當前Docker容器。因為修改了配置文件,所以要重啟下該MYSQL,這裡重啟下該Docker容器就好了。

這樣就可以通過navicat工具連接當前資料庫了。這裡順便看下當前MYSQL的版本,通過 select version();

明顯可以看到當前MYSQL的版本是 8.0.22

注意:

我這邊Master庫和Slave庫不在同一個伺服器,所以Slave安裝MYSQL的步驟和Master一樣就可以了。一定要記住Msater庫和Slave庫的MYSQL版本號要一致

二、配置Master和Slave

這裡假設主從伺服器的IP如下

1、配置Master

因為是通過Docker部署的MYSQL,所以要進入Docker內部修改MYSQL配置文件

進入容器後,切換到 /etc/mysql目錄下,使用vim命令編輯 my.cnf 文件。

注意:

此時用vim 命令會報 vim: command not found,因此我們需要在Docker內部安裝vim工具。

在my.cnf添加如下配置

添加完後保存,同時退出當前Docker容器。因為修改了配置文件,所以要重啟下該MYSQL,這裡重啟下該Docker容器就好了。

這個時候我們通過工具連接該MYSQL伺服器,你可以通過navicat或者Sequel pro等等,連接登上後。

創建用戶並授權

至此,Master配置完成。

2、配置從庫

和上面一樣進入到 etc/mysql路徑,使用vim命令編輯 my.cnf 文件:

配置完成後也需要重啟Docker容器。

3、開啟Master-Slave主從複製

上面兩步Master和Slave都配置成功了,而且Master也為Slave讀取Master數據專門設置了一個帳號,下面就來實現同步。

進入Master庫查看Master狀態

記住File和Position,後面Slave庫會在這個文件這個位置進行同步數據。此時一定不要操作Master庫,否則將會引起Master狀態的變化,File和Position欄位也將會進行變化。

進入Slave庫執行SQL

啟動之後我們來看下有沒有成功。

show slave status命令

從這張圖很明顯看出,對於Slave的兩個線程都成功了,那就說明整個MYSQL主從搭建成功了。如果有一個為NO,那就需要到後面看錯誤日誌,是什麼原因出錯了,解決下就好了。

三、測試

這裡簡單做一個測試

1、只在Mater 創建一張User表

現在 只在Mater 創建一張User表,如果現在Slave也同樣生成這張User表,那就說明成功了。

實際測試結果是成功的。

注意:

這裡如果我們先手動在Slave創建這張User表,然後再到Master創建User表那就出事情了。我們按照上面的步驟創建完後,去Slave通過 show slave status 查看

發現 SQL線程都變NO了。原因很簡單,錯誤日誌也說明了(Error 'Table 'user' already exists')。因為你在Master創建User表的SQL會記錄到bin-log日誌中,然後Slave

去讀取這個操作,然後寫入Slave中的時後發現這個SQL執行失敗,因為你Slave已經存在該User表,然後這整個主從複製就卡在這裡了。這是個很嚴重的問題。

所以一旦搭建主從複製成功,只要在Master做更新事件(update、insert、delete),不要在從數據做,否則會出現數據不一致甚至同步失敗。

2、Master插入一條數據

再去Slave資料庫查看

發現從資料庫已經寫入成功了。

總結:在搭建的過程可能還有其它的問題出現 你只要在Slave伺服器,通過show slave status,如果兩個IO是否為YES就代表是否成功,如果有為NO的,後面有欄位說明是什麼原因導致的,你再根據相關錯誤信息去查詢下解決方案,那就可以了。

相關焦點

  • 「Mysql」資料庫主從搭建-基於docker
    PART2 關於習慣雜談//// ////PART 1 Docker搭建主從資料庫學長五分鐘帶你走進docker主從搭建的世界:)通過Docker搭建主從伺服器首先我們需要拉取docker鏡像,我們使用5.7版本的MySQL:docker pull mysql:5.7然後使用此鏡像啟動容器,這裡需要分別啟動主從兩個容器創建Master(主資料庫):docker run -p 3339
  • MySQL資料庫主從複製搭建
    本文介紹MySQL資料庫主從複製搭建。文末有主從複製步驟導圖資料庫批量初始化更多詳細操作,請參考之前的多實例的文章內容為保證數據的純淨,將資料庫中所有數據刪除,並重新初始化rm -rf /data/*proot -S /data/3307/mysql.sock -e "start slave;"檢查主從複製狀態mysql -uroot -proot -S /data/3307/mysql.sock -e "show slave status\G" | grep Running:
  • 搭建MySQL主從集群,主從複製過程中同步延遲問題
    上一節我們成功搭建了主從複製、讀寫分離,實際上並發量和數據量不大的情況下,使用起來也是非常的流暢,無任何問題,可以正常運行了。一、主從優勢其中Master主伺服器負責寫操作的負載,也就是說一切寫的操作都在Master上,而讀的操作則分攤到Slave從伺服器上,這樣一來的可以大大提高讀取的效率。為什麼要分離讀和寫呢?
  • 主庫n -> 從庫s - MySQL5.7多主一從(多源複製)同步配置 - 計算機...
    多主一從,也稱為多源複製,數據流向:主庫1 -> 從庫s主庫2 -> 從庫s主庫n -> 從庫s應用場景數據匯總,可將多個主資料庫同步匯總到一個從資料庫中,方便數據統計分析。讀寫分離,從庫只用於查詢,提高資料庫整體性能。部署環境註:使用docker部署mysql實例,方便快速搭建演示環境。
  • 資料庫基礎:mysql主從集群搭建
    還好mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的數據同時寫到備份的資料庫中。實現mysql資料庫的熱備份。 要想實現雙機的熱備,首先要了解主從資料庫伺服器的版本的需求。要實現熱備mysql的版本都高於3.2。還有一個基本的原則就是作為從資料庫的數據版本可以高於主伺服器資料庫的版本,但是不可以低於主伺服器的資料庫版本。
  • MySQL主從複製原理
    本文介紹MySQL主從複製原理。主從複製原理主從複製中涉及的文件主庫:binlog從庫:relaylog (中繼日誌)、master.info(主庫信息文件)、relaylog.info(relaylog應用信息)
  • 輕鬆搭建MySQL主從複製、讀寫分離(雙機熱備)
    主從複製:當mysql資料庫的數據量太大的時候,查詢數據就很吃力了,無論怎麼優化都會產生瓶頸,這時我們需要增加伺服器設備來實現分布式資料庫,實現多機熱備份,要想實現多機的熱備,首先要了解主從資料庫伺服器的版本的需求,主從mysql的安裝運行版本需一致。
  • MySQL系列二 - 搭建MySQL主從集群
    前面一章我們在centos上搭建好了MySQL資料庫,今天我們搭建一個主從同步的MySQL簡單集群。上一章是在虛擬機(192.168.64.123)上搭建的,我用的是vmware15虛擬機搭建的,今天在擴展一臺節點用於搭建主從集群,計劃 IP:192.168.64.123 虛擬機作為主節點,新建的虛擬機 IP:192.168.64.124 做為從節點。124的資料庫搭建什麼的參照上一章步驟執行就行。
  • MySQL的主從備份
    ,其他伺服器可以取代宕機伺服器MySQL主從複製架構主庫將變更寫入到主庫的binlog一些MySQL版本並不會開啟二進位日誌,所以一定要檢查是否開啟增量備份也需要開啟二進位日誌從庫的IO進程讀取主庫的binlog內容存儲到relay log日誌中從庫的SQL進程讀取relay log日誌中內容在從庫中重放MySQL主從配置步驟配置主從資料庫伺服器參數主伺服器配置log_bin = /data
  • 高性能Mysql主從架構的複製原理及配置詳解
    請注意當你進行複製時,所有對複製中的表的更新必須在主伺服器上進行。否則,你必須要小心,以避免用戶對主伺服器上的表進行的更新與對從伺服器上的表所進行的更新之間的衝突。mysql支持的複製類型:基於語句的複製:在主伺服器上執行的SQL語句,在從伺服器上執行同樣的語句。MySQL默認採用基於語句的複製,效率比較高。
  • MySQL主從複製高級進階
    本文介紹MySQL主從複製高級進階。延時從庫介紹及配置SQL線程延時:數據已經寫入relaylog中了,SQL線程稍後執行。所以如果從庫原本已經是延遲從庫了,需要重新設置延遲數值時,重啟從庫複製以後,會發現原有的relay log被清空了,並重新生成了序號從1開始的relay log。但不用擔心複製會被影響,因重新生成的relay log,是根據上一次從庫停止時所應用到的主庫log pos重新從主庫拉取binlog的。
  • 聊聊MySQL主從複製的幾種複製方式
    異步複製MySQL的複製默認是異步的,主從複製至少需要兩個MYSQL服務,這些MySQL服務可以分布在不同的伺服器上,也可以在同一臺伺服器上。MySQL主從異步複製是最常見的複製場景。而半同步複製時,為了保證主庫上的每一個BINLOG事務都能夠被可靠地複製到從庫上,主庫在每次事務成功提交時,並不及時反饋給前端應用用戶,而是等待至少一個從庫(詳見參數rpl_semi_sync_master_wait_for_slave_count)也接收到BINLOG事務並成功寫入中繼日誌後,主庫才返回Commit操作成功給客戶端(不管是傳統的半同步複製,還是增強的半同步複製
  • mysql主從配置詳細教程
    MySQL主從可以實現MySQL的讀寫分離,簡言之,master上進行寫操作,同步資料庫,slave上進行讀操作,可以極大的提升性能,降低伺服器負載,在此不做贅述,下面以兩臺機器來做主從配置詳解。>3、關閉系統防火牆4、保證兩臺伺服器之間可以相互ping 通具體操作步驟如下:第一步:在主資料庫master 上編輯mysql配置文件,做如下操作:註:mysql安裝方式的不同會導致mysql的配置文件的位置不一樣,大家要根據自己的安裝位置來找配置文件
  • 手把手教你利用Docker+jenkins部署你的網站
    >3 安裝docker.io。sudo apt-get install docker.io4 安裝docker-registry。/cn-hangzhou/instances/mirrorsdocker安裝mysql5.7docker pull mysql:5.7mkdir /root/mysql
  • redis的主從複製
    單機有什麼問題機器故障 數據如何同步的問題(高可用)容量瓶頸QPS瓶頸 (分布式)什麼是主從複製一主一從 一主多從runid 和 複製偏移量redis-cli -p 6379 info replication全量複製全量複製開銷
  • Redis的主從複製機制
    Redis的主從複製是面試中經常會被問的,我最近面試的幾家公司只要聊到Redis,都會問我主從複製的原理。1.為什麼需要主從複製?這就需要用到Redis的複製機制。還有個原因就是,雖然Redis的性能很好,但單臺畢竟還是有瓶頸的,使用主從複製可以實現讀寫分離,提高Redis的高可用性,即主伺服器用來執行寫命令,多個從伺服器用來執行讀命令,類似於資料庫的讀寫分離。
  • MySQL 數據校驗工具-愛可生|mysql|perl|伺服器|node01_網易訂閱
    概述  pt-table-checksum 是 Percona-Toolkit 的組件之一,用於檢測 MySQL 主、從庫的數據是否一致。其原理是在主庫執行基於 statement 的 SQL 語句來生成主庫數據塊的checksum,把相同的 SQL 語句傳遞到從庫執行,並在從庫上計算相同數據塊的 checksum,最後,比較主從庫上相同數據塊的 checksum 值,由此判斷主從數據是否一致。它能在非常大的表上工作的一個原因是,它把每個表分成行塊,並檢查每個塊與單個替換。選擇查詢。它改變塊的大小,使校驗和查詢在所需的時間內運行。
  • Prometheus 監控MySQL資料庫
    Prometheus 監控mysql容器Prometheus這裡我們演示中,prometheus以及mysqld_exporter都使用容器進行運行。,檢查狀態是否正常systemctl enable --now docker查看docker info[root@abcdocker ~]# docker infoClient:DebugMode:false
  • MySQL雙機互備熱備自動切換
    特別是在一些持續性和實時性要求高的應用中,故障一小時,可能會讓你損失幾千到幾萬甚至更高。  本方案致力於資料庫實時備份,並且在故障發生後以最短的時間恢復和修復。  在mysql資料庫的備份應用中,主從複製結構是應用的比較廣泛,數據同步和實時性都很高,基本上能滿足大部分的需求。
  • MySQL 多源複製場景分析-愛可生
    我回答:可以嘗試下 MySQL 的多源複製。 我們知道 MySQL 單主一從,單主多從,或者級聯的主從架構我們都見的很多了。但是多主一從這種使用場景比較少,比如圖 1: