1. 程式人生 > >基於 Docker 搭建 MySQL 一主兩從複製

基於 Docker 搭建 MySQL 一主兩從複製

在Docker中搭建MySQL 一主兩從複製

搭建環境

  • Centos 7.5 64位

  • MySQL 5.7.13

  • Docker 1.13.1

接下來,我們將會在一臺伺服器上安裝docker,並使用docker執行三個MySQL容器,分別為一主兩從。

安裝docker

執行命令

yum install -y docker

安裝成功啟動Docker後,檢視版本

出現版本資訊,則安裝成功

[[email protected] ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      94f4240/1.13.1
 Built:           Fri May 18 15:44:33 2018
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      94f4240/1.13.1
 Built:           Fri May 18 15:44:33 2018
 OS/Arch:         linux/amd64
 Experimental:    false

啟動Docker

啟動Docker並設定為開機自啟動

[[email protected] ~]# systemctl start docker && systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

安裝MySQL

使用Docker拉取MySQL映象

docker pull mysql:5.7.13

執行主容器

docker run --name master2 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13


--name 為容器指定名稱,這裡是master

-p 將容器的指定埠對映到主機的指定埠,這裡是將容器的3306埠對映到主機的3306埠

-e 設定環境變數,這裡是指定root賬號的密碼為root

-d 後臺執行容器,並返回容器ID

mysql:5.7.13 指定執行的mysql版本

檢驗是否啟動成功

docker ps -a 顯示所有的容器,包括未執行的

[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7782adcbfb98        mysql:5.7.13        "docker-entrypoint..."   27 seconds ago      Up 26 seconds       0.0.0.0:3308->3306/tcp   master2

注意,是UP狀態,表示正在執行中

開放3308埠

firewall-cmd --zone=public --add-port=3308/tcp --permanent

firewall-cmd --reload

--permanent 永久開啟,避免下次開機需要再次手動開啟埠

使用Navicat連線測試


MySQL主容器已經啟動成功

建立主容器的複製賬號

GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' identified by 'backup';

show grants for 'backup'@'%';

使用Navicat友好的影象化介面執行SQL

出現如下資訊表示授權成功


修改MySQL配置環境

建立配置檔案目錄

目錄結構如下

/usr/local/mysql/master

/usr/local/mysql/slave1

/usr/local/mysql/slave2

拷貝一份MySQL配置檔案


[[email protected] ~]# docker cp master2:/etc/mysql/my.cnf /usr/local/mysql/master2/my.cnf

進到master2目錄下,已存在拷貝的my.cnf

[[email protected] master2]# ll
total 4
-rw-r--r-- 1 root root 1771 Jun  9  2016 my.cnf

修改my.cnf,在 [mysqld] 節點最後加上後儲存

log-bin=mysql-bin
server-id=1

log-bin=mysql-bin 使用binary logging,mysql-bin是log檔名的字首

server-id=1 唯一伺服器ID,非0整數,不能和其他伺服器的server-id重複

將修改後的檔案覆蓋Docker中MySQL中的配置檔案
[[email protected] ~]#docker cp /usr/local/mysql/master2/my.cnf master2:/etc/mysql/my.cnf

重啟 mysql 的docker , 讓配置生效
[[email protected] master2]# docker restart master2
master2

啟動後,重新測試連線,連線成功表示主容器配置成功

執行MySQL從容器

首先執行從容器

docker run --name slave1 -p 3309:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13

docker run --name slave2 -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13

開放3309、3310埠

firewall-cmd --zone=public --add-port=3309-3310/tcp --permanent

firewall-cmd --reload

與主容器相似,拷貝配置檔案至slave1目錄修改後覆蓋回Docker中

[[email protected] ~]# docker cp slave1:/etc/mysql/my.cnf /usr/local/mysql/slave1/my.cnf

log-bin=mysql-bin
server-id=2

[[email protected] ~]#docker cp /usr/local/mysql/slave1/my.cnf slave1:/etc/mysql/my.cnf

別忘記,重啟slave1容器,使配置生效

配置主從複製

使用Navicat連線slave1後新建查詢,執行以下SQL

CHANGE MASTER TO
MASTER_HOST='ip',
MASTER_PORT=3308,
MASTER_USER='backup',
MASTER_PASSWORD='backup';
START SLAVE;

MASTER_HOST 填Navicat連線配置中的ip應該就可以

MASTER_PORT 主容器的埠

MASTER_USER 同步賬號的使用者名稱

MASTER_PASSWORD 同步賬號的密碼

檢查是否配置成功
show slave status;

Slave_IO_State 如果是Waiting for master to send event,那麼就成功一半了,如果是Connecting to master,基本就是配置失敗了,建議重新檢查下配置,具體失敗的原因可以檢視日誌追蹤

[[email protected] slave1]# docker logs slave1 -f

接著上文,我們說成功一半,並沒有說成功了,那麼另一半在於Slave_IO_Running與Slave_SQL_Running

清除設定資訊

stop slave;
reset slave all;

如果都是Yes,那麼恭喜你,可以測試主從複製的效果了,如果有一個不是Yes,一半是重啟從容器後,事務回滾引起的,那麼給出解決方法如下

stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;

執行後,再次觀察三個關鍵欄位應該就都沒問題了

至此,一主一從已經搭建完成,另外一臺也照此辦法即可。

測試主從複製

首先,在主例項中建立一個測試資料庫

開啟(重新整理)從例項,可見test庫已存在


在test庫中建立一個表feiyu,新增一個id測試欄位

向表中新增幾個資料

重新整理從庫,可見feiyu表及其中feiu資料已存在

至此,一個具備主從複製的一主兩從的MySQL就已搭建完成。

相關推薦

基於 Docker 搭建 MySQL 複製

在Docker中搭建MySQL 一主兩從複製搭建環境Centos 7.5 64位MySQL 5.7.13Docker 1.13.1接下來,我們將會在一臺伺服器上安裝docker,並使用docker執行三個MySQL容器,分別為一主兩從。安裝docker執行命令yum inst

搭建MySQL————VMware Workstation 虛擬機nat網絡配置(

VMware Workstation 虛擬機 虛擬網絡 nat連接 運行 VMware Workstation Pro 在桌面找到該圖標,雙擊運行即可,如果沒有安裝請下載安裝。流程編輯 ==》虛擬網絡編輯器 ==》 VMnet0 如果沒有 添加網絡 最後設置完後,點擊確定即可。 配置虛

docker搭建redis哨兵模式叢集

1、IP規劃 master 192.168.0.11:6379 slave1 192.168.0.12:6379 slave2 192.168.0.13:6379 sentinel1 192.168.0.14:26379 sentinel2 192.168.0.15

MySQLMySQL複製環境切換主從庫

mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send ev

MySQL基於binlog實現主從複製,實現

在移動網際網路開發中,為了減少資料庫單機的壓力、增加資料庫的併發訪問能力,同時大多數移動網際網路專案均是讀多寫少,鑑於此,將資料庫配置一主多從顯得尤為重要,下面我們將基於MySQL實現一主多從的配置。 準備工作 虛擬機器準備 準備裝有CentOS

MHA 搭建

ring ssh-key set fault 配置 remote change use cat 環境介紹:主機名 IP MHA角色 MySQL角色node1 192.168.56.26 Node MySQL Master

Redis叢集主從複製搭建配置教程【Windows環境】

由於本地環境的使用,所以搭建一個本地的Redis叢集,本篇講解Redis主從複製叢集的搭建,使用的平臺是Windows,搭建的思路和Linux上基本一致! (精讀閱讀本篇可能花費您15分鐘,略讀需5分鐘左右) Redis主從複製簡單介紹 為了使得叢集在一部分節點下線或

Mysql主從複製(GTID),

複製原理: Mysql中有一種日誌叫做bin日誌(二進位制日誌)。這個日誌會記錄下所有修改了資料庫的SQL語句(insert,update,delete,ALTER TABLE,grant等等)。 主從複製的原理其實就是把主伺服器上的BIN日誌複製到從伺服器上執行一遍,這樣

在遠端linux主機用docker部署mysql跟雙主從複製

在遠端linux主機用docker部署mysql一主一從跟雙主從複製 本處使用的是SSH連線工具Xshell連線遠端linux主機(需先在windows上安裝Xshell軟體),在同一臺linux主機或者兩臺linux主機都可以部署主從 (在操作過程中可能遇到的問題時的處理命令:當run

redis3.2.8 sentinel模式高可用環境搭建測試

由於專案需要,研究了一下redis的叢集方式,記錄如下: 環境:centos7,由於是測試,我就把三個redis放在一臺機子上了。反正redis是單執行緒的,倒也無所謂。 redis叢集的方式有好幾種,分類下來其實大概是四種: 1.redis本身的叢集。redis3.x開始

Docker Compose搭建Redis三哨兵高可用叢集

一、Docker Compose介紹 https://docs.docker.com/compose/ Docker官方的網站是這樣介紹Docker Compose的: Compose是用於定義和執行多容器Docker應用程式的工具。通過Compose,您可以使用YAML檔案來配置應用程式的服務。然後,使

級聯復制轉化成

級聯復制轉化成一主兩從1.如圖,級聯復制如果轉化成一主兩從?GTID復制處理方法:只需要把S2的復制停掉,然後重新change到M上即可;S2:stop slave;reset slave all;change master to M;start slave傳統復制處理方法(比較復雜):(1)停止S1的復制,

Mysql復制數據

sock 是否 art str cor term 數據庫 啟動 ado 應用場景:外部僅僅訪問主數據庫(Mysql_Master),多個從數據庫(Mysql_Slave)做數據庫熱備份。一旦主數據庫宕機,從服務器負責處理數據實驗拓補圖: 實驗環

MySQL

MySQL主192.168.65.128上配置/etc/my.cnf[root@localhost ~]# /etc/init.d/mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL.. SUCCESS!備份數據從1、192.168.65.

基於Docker搭建MySQL主從復制

效果 重啟 conn chang eve iter cli 配置 bin 摘要: 本篇博文相對簡單,因為是初次使用Docker,MySQL的主從復制之前也在Centos環境下搭建過,但是也忘的也差不多了,因此本次嘗試在Docker中搭建。 本篇博文相對簡單,因為是初次使

CentOS6.5配置MYSQL詳解

ali ati In restart 配置文件 left 主庫 vim 數據庫 一、環境 1 操作系統 :CentOS 6.5 2 數據庫版本:MySQL 5.6.27 3 主機A:192.168.1.1 (Master) 4 從機B:192.168.1.2 (

mysql 配置說明

背景 mysql 一主多從的場景是經常見的,具體的業務場景裡我們一般讀的壓力遠遠是大於寫的壓力,master我們可以用來做寫操作,slave用來做讀操作、備份,可以做到資料庫的負載均衡。 同步複製過程說明  (1) master將改變記錄到二進位制日誌(binary log)中(這些記

基於keepalived搭建mysql高可用

目錄 概述 環境準備 keepalived搭建 mysql搭建 mysql雙主搭建 mysql雙主高可用搭建 概述     傳統(不借助中介軟體)的資料庫主從搭建,如果主節點掛掉了,從節點只能讀取無法寫

centos搭建redis 哨兵

master:192.168.3.34 slave:    192.168.3.4 哨兵1:(sentinel1) :192.168.3.34 哨兵2:(sentinel2) :192.168.3.4 ##環境安裝 -- 下載壓縮包     wget http://do

mongodb實現一個仲裁者

4臺機器安裝mongodb後,把4臺機器的mongod啟動,然後通過mongo連線你要做主機的mongo。 如以192.168.10.111:27017為主節點 master.conf配置 processManagement:    fork: true net: