基于Docker部署MySQL8集群(一主二從)

image

一.CentOS7.9安裝Docker20

  1. 安裝yum-utils工具
yum install -y yum-utils
  1. 設(shè)置docker的依賴源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

注釋:CentOS直接使用yum命令安裝的Docker版本為1.13.1屬于舊版docker的最后一個版本,所以需要配置一個repo,才能安裝新版的Docker-CE(社區(qū)版)。Docker-EE(企業(yè)版)需收費(fèi)讀者自行了解即可,這里使用CE社區(qū)版

  1. 安裝docker
yum -y install docker-ce
  1. 查看安裝的版本
docker -v
docker version
image.png
  1. 查看配套設(shè)置的版本
yum list installed | grep docker
image.png

6.拉取MySQL8鏡像

docker pull mysql:8

注解:mysql:5.7代表mysql版本為5.7

  1. 查看docker鏡像
docker images
image.png

二.部署MySQL集群(一主二從)

1.創(chuàng)建主從MySQL的配置及數(shù)據(jù)文件的存儲目錄

# 創(chuàng)建主服務(wù)的配置目錄和數(shù)據(jù)目錄
mkdir -p /usr/local/mysqlData/master/cnf
mkdir -p /usr/local/mysqlData/master/data

# 創(chuàng)建1號從服務(wù)器的配置目錄和數(shù)據(jù)目錄
mkdir -p /usr/local/mysqlData/slave/cnf
mkdir -p /usr/local/mysqlData/slave/data

# 創(chuàng)建2號從服務(wù)器的配置目錄和數(shù)據(jù)目錄
mkdir -p /usr/local/mysqlData/slave2/cnf
mkdir -p /usr/local/mysqlData/slave2/data

創(chuàng)建兩個從服務(wù)器的配置是因?yàn)镸ySQL配置的server-id不能重復(fù)

image.png

2.配置主服務(wù)器的配置文件

vim /usr/local/mysqlData/master/cnf/mysql.cnf

配置文件如下

[mysqld]
## 設(shè)置server_id,注意要唯一
server-id=1
## 開啟binlog
log-bin=mysql-bin
## binlog緩存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默認(rèn)格式是statement)
binlog_format=mixed
##設(shè)置字符編碼為utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

3.配置從服務(wù)器的配置文件

# 1號從服務(wù)器
vim /usr/local/mysqlData/slave/cnf/mysql.cnf
# 2號從服務(wù)器
vim /usr/local/mysqlData/slave2/cnf/mysql.cnf

配置文件如下(1號的server-id設(shè)置為2,2號的server-id設(shè)置為3,不重復(fù)即可)

[mysqld]
## 設(shè)置server_id,注意要唯一
server-id=2
## 開啟binlog
log-bin=mysql-slave-bin
## relay_log配置中繼日志
relay_log=edu-mysql-relay-bin
## 如果需要同步函數(shù)或者存儲過程
log_bin_trust_function_creators=true
## binlog緩存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默認(rèn)格式是statement)
binlog_format=mixed
##設(shè)置字符編碼為utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
slave_skip_errors=1062
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

4.創(chuàng)建主從MySQL鏡像

# 主服務(wù)器實(shí)例化
docker run -itd -p 3307:3306 --name master -v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8 

# 1號從服務(wù)器實(shí)例化
docker run -itd -p 3308:3306 --name slaver -v /usr/local/mysqlData/slave/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8 

# 2號從服務(wù)器實(shí)例化
docker run -itd -p 3309:3306 --name slaver2 -v /usr/local/mysqlData/slave2/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave2/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8

參數(shù)解釋

-p 指定容器暴露的端口,宿主機(jī)(物理機(jī))端口: docker實(shí)例端口
-p 3307:3306 把物理機(jī)的3307端口給實(shí)例的端口3306端口進(jìn)行映射

-v 給容器掛載存儲卷,掛載到容器的某個目錄
-v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d 把剛創(chuàng)建的配置文件夾映射成實(shí)例的/etc/mysql/conf.d
-v /usr/local/mysqlData/master/data:/var/lib/mysql 數(shù)據(jù)文件夾的映射

-e 指定環(huán)境變量,容器中可以使用該環(huán)境變量
-e MYSQL_ROOT_PASSWORD=123456 設(shè)置MySQL的root賬號密碼為123456

  1. 查看已創(chuàng)建的實(shí)例
docker ps -a
image.png
  1. 創(chuàng)建mysql連接用戶
# 創(chuàng)建用戶 reader設(shè)置密碼為reader
CREATE USER reader IDENTIFIED BY 'reader';
# 給予reader同步權(quán)限
GRANT REPLICATION SLAVE ON *.* to 'reader'@'%';
FLUSH PRIVILEGES;

注解:其余的用戶,遠(yuǎn)程連接的自行設(shè)置

  1. 獲取主服務(wù)器的連接信息
# MySQL的連接信息
SHOW MASTER STATUS;

#新開連接 獲取master實(shí)例的在docker的地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' master
image.png
  1. 從服務(wù)器連接主服務(wù)器(兩臺從服務(wù)器均是以下操作)
# 配置連接的參數(shù)
change master to master_host='172.17.0.2',master_user='reader',master_password='reader',master_log_file='mysql-bin.000003',master_log_pos=2259;
# 啟動同步
start slave;
# 查看是否成功
show slave status\G

# 兩項(xiàng)都為Yes時代表成功。
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

# 失敗需要使用停止連接后檢查其他賬號密碼,地址,pos等參數(shù)

# 停止連接,如果一次成功無需使用該命令
stop slave;
image.png

三.結(jié)果

主服務(wù)器執(zhí)行命令

SHOW SLAVE HOSTS;
image.png

能從主服務(wù)器查詢到兩臺從服務(wù)器的ID以及端口。完成MySQL部署。

聯(lián)系方式

公眾號:青山有錄
Github:https://github.com/z875479694h
博客:https://www.hcworld.xyz

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容