使用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 http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib

deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian-security/ 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
log-bin=mysql-bin
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進行授權。

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO '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上執行。

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

show slave status G;
接下來咱們在mysql_slave的機器上創建一張表。create database slavetest; 這個時候我們進入mysql_master機器上查看一下。

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

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

原文地址https://www.cnblogs.com/huangqingshi/p/12593395.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章