天天看點

使用docker建構雙主mysql

使用docker建構雙主mysql

我們有的時候需要雙主mysql, 這樣無論哪個資料庫出現了問題的話都可以繼續使用資料庫。把兩個資料庫挂到一個代理上面,這樣哪個服務出問題了,另外一個就可以繼續服務了。當然本文不是主要談代理的,是以這個不做細說。

因為我們的電腦資源有限,所有我們繼續采用docker的形式進行處理。

首先我的電腦是mac且安裝了docker的,如果有同學沒有安裝的話需要提前安裝上。加上國内加速鏡像站,這樣拉取鏡像服務的時候我們就會很快完成,否則鏡像需要從國外拉取很慢。這個我之前遇到的問題,後來就把docker放置了很久,現在配置了國内加速鏡像站,拉取鏡像很快了。

docker的基礎知識之前在我的博文中已經說了,不太清除的可以用“飛機票”過去。

好了,咱們進入正題,大家的docker環境已經準備好了。我們拉取鏡像 mysql 5.7版本,拉取完成後可以看一下自己有哪些鏡像。

docker pull mysql:5.7

docker images

接下來我們需要建立一個網絡環境,讓主從機器在相同的環境中。可以通過指令:docker network ls 檢視自己建立了哪些網絡。咱們下面建立了以mysql為名網絡。

docker network create --driver=bridge mysql

咱們把主從的機器開始啟動。

docker run -p 3366:3306 --network=mysql -h "mysql_master"  --name mysql_master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

docker run -p 3367:3306 --network=mysql -h "mysql_slave" --name mysql_slave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

上邊的參數大概解釋一下 -p 是将機器内部的端口暴露出來,這個就可以從外邊連接配接mysql機器了。 -h 是主機名, --name 用于指定啟動的容器的名字,這個就可以在後續中用于重新開機鏡像了,比如:docker restart mysql_master。-e 用于建立的時候指定環境變量,因為mysql容器必須指定root的密碼,是以通過-e進行設定,把密碼設定為root。 -d 這個是deamon的意思,就是守護程序,也就是在背景運作。最後指定mysql及版本号用于啟動。

接下來咱們需要進入到mysql_master機器中。docker exec是用于進入正在運作的機器中,-it是互動的方式,最後指定腳本類型bash。

docker exec -it mysql_master /bin/bash

進入到機器以後,因為mysql的進行很幹淨,裡邊沒有我們需要的工具。這個鏡像的核心是debian,我們需要安裝vim及ping工具。我們需要首先把apt的源更改,首先把源檔案備份,然後設定了163的源作為我們的apt源。當然大家可以搜尋其他雲apt的源都是可以的。

cp /etc/apt/sources.list /etc/apt/sources_init.list

echo "deb

http://mirrors.163.com/debian/

buster main non-free contrib

deb

buster-updates main non-free contrib buster-backports main non-free contrib http://mirrors.163.com/debian-security/

buster/updates main non-free contrib

deb-src

buster/updates main non-free contrib" > /etc/apt/sources.list

我們更新一下apt-get,然後安裝vim及ping,執行完了工具也就安裝好了。

apt-get update

apt-get install vim

apt-get install iputils-ping

這些更新apt即安裝工具的方法也需要再slave中執行一遍,我就不單獨發步驟了。我們可以測試一下ping指令,我們執行  “ping mysql_slave” 有傳回值,說明網絡是通着的。我們繼續編輯mysql的配置檔案。

vim /etc/mysql/mysql.conf.d/mysqld.cnf

我們配置上server-id和log-bin,mysql是通過bin log進行同步的,這個也就是開啟log-bin。每個機器的server-id是不一樣的,用于标志不同的機器。

server-id=1

log-bin=mysql-bin

儲存後我們退出鏡像,然後重新開機鏡像使其配置生效。

docker restart mysql_master

我們也需要把slave的機器檔案也改一下。這裡進入機器的指令為: docker exec -it mysql_slave /bin/bash 。執行一下上邊的更新和安裝配置,配置好了之後記得重新開機一下slave : docker restart mysql_slave 。

server-id=2

binlog_format=mixed

我們在master的機器裡邊進入mysql, 執行的指令如下。輸入密碼root即可進入。

mysql -uroot -p

我們需要授權root使用者的replication及slave權限。如果不授權的話,從庫是不能連接配接主庫的。

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'root'@'%';

看一下master的日志檔案即位置。我們看到了master機器的檔案名及其位置。

mysql> show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
mysql-bin.000001 154

1 row in set (0.00 sec)

我們也需要開啟一個slave的機器,并且進入到mysql裡邊。因為可能需要來回切換。我們在從庫裡邊執行如下指令。裡邊配置設定了master的主機名,主機端口号,主機使用者名,密碼,主機器的檔案名字以及位置。

change master to master_host='mysql_master',master_port=3306, master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=154;

接下來我們來啟動slave,并且檢視slave的線程指令。

start slave;

show slave status G;

裡邊的yes說明已經開啟成功并且連通,如果沒有連通的話就是NO,這個時候需要檢查上邊配置的主機的host 使用者名和密碼,這些都需要檢查一遍。

我們在master的機器上建一個資料庫test - create database test; 然後我們在從庫裡邊檢視,已經有了。說明從庫已經建立好了。

mysql> show databases;
Database
information_schema
mysql
performance_schema
slavetest
sys
test

6 rows in set (0.00 sec)

接下來我們我們在mysql_slave機器的庫把使用者root進行授權。

然後看一下mysql_slave機器的日志檔案名及位置。

show master status G;

我們找到對應的檔案名及位置,看一下下面的指令着兩個值是否正确,不正确的話替換即可,正确的話進入mysql_master機器上執行。

change master to master_host='mysql_slave',master_port=3306, master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=154;

執行完了之後在mysql_master上執行。

然後看一下slave的狀态。如果剛才像上圖那樣的都是Yes的話說明成功。

接下來咱們在mysql_slave的機器上建立一張表。create database slavetest; 這個時候我們進入mysql_master機器上檢視一下。

這個時候也有了,說明雙主mysql搭建完成。

原文位址

https://www.cnblogs.com/huangqingshi/p/12593395.html