一.CentOS7.9安裝Docker20
- 安裝yum-utils工具
yum install -y yum-utils
- 設置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(社區版)。Docker-EE(企業版)需收費讀者自行了解即可,這裏使用CE社區版
- 安裝docker
yum -y install docker-ce
- 查看安裝的版本
docker -v
docker version
5. 查看配套設置的版本
yum list installed | grep docker
6.拉取MySQL8鏡像
docker pull mysql:8
註解:mysql:5.7代表mysql版本爲5.7
- 查看docker鏡像
docker images
二.部署MySQL集羣(一主二從)
1.創建主從MySQL的配置及數據文件的存儲目錄
# 創建主服務的配置目錄和數據目錄
mkdir -p /usr/local/mysqlData/master/cnf
mkdir -p /usr/local/mysqlData/master/data
# 創建1號從服務器的配置目錄和數據目錄
mkdir -p /usr/local/mysqlData/slave/cnf
mkdir -p /usr/local/mysqlData/slave/data
# 創建2號從服務器的配置目錄和數據目錄
mkdir -p /usr/local/mysqlData/slave2/cnf
mkdir -p /usr/local/mysqlData/slave2/data
創建兩個從服務器的配置是因爲MySQL配置的server-id不能重複
2.配置主服務器的配置文件
vim /usr/local/mysqlData/master/cnf/mysql.cnf
配置文件如下
[mysqld]
## 設置server_id,注意要唯一
server-id=1
## 開啓binlog
log-bin=mysql-bin
## binlog緩存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默認格式是statement)
binlog_format=mixed
##設置字符編碼爲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.配置從服務器的配置文件
# 1號從服務器
vim /usr/local/mysqlData/slave/cnf/mysql.cnf
# 2號從服務器
vim /usr/local/mysqlData/slave2/cnf/mysql.cnf
配置文件如下(1號的server-id設置爲2,2號的server-id設置爲3,不重複即可)
[mysqld]
## 設置server_id,注意要唯一
server-id=2
## 開啓binlog
log-bin=mysql-slave-bin
## relay_log配置中繼日誌
relay_log=edu-mysql-relay-bin
## 如果需要同步函數或者存儲過程
log_bin_trust_function_creators=true
## binlog緩存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默認格式是statement)
binlog_format=mixed
##設置字符編碼爲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.創建主從MySQL鏡像
# 主服務器實例化
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號從服務器實例化
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號從服務器實例化
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
參數解釋
-p 指定容器暴露的端口,宿主機(物理機)端口: docker實例端口 -p 3307:3306 把物理機的3307端口給實例的端口3306端口進行映射
-v 給容器掛載存儲卷,掛載到容器的某個目錄 -v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d 把剛創建的配置文件夾映射成實例的/etc/mysql/conf.d -v /usr/local/mysqlData/master/data:/var/lib/mysql 數據文件夾的映射
-e 指定環境變量,容器中可以使用該環境變量 -e MYSQL_ROOT_PASSWORD=123456 設置MySQL的root賬號密碼爲123456
- 查看已創建的實例
docker ps -a
- 創建mysql連接用戶
# 創建用戶 reader設置密碼爲reader
CREATE USER reader IDENTIFIED BY 'reader';
# 給予reader同步權限
GRANT REPLICATION SLAVE ON *.* to 'reader'@'%';
FLUSH PRIVILEGES;
註解:其餘的用戶,遠程連接的自行設置
- 獲取主服務器的連接信息
# MySQL的連接信息
SHOW MASTER STATUS;
#新開連接 獲取master實例的在docker的地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' master
- 從服務器連接主服務器(兩臺從服務器均是以下操作)
# 配置連接的參數
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
# 兩項都爲Yes時代表成功。
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
# 失敗需要使用停止連接後檢查其他賬號密碼,地址,pos等參數
# 停止連接,如果一次成功無需使用該命令
stop slave;
三.結果
主服務器執行命令
SHOW SLAVE HOSTS;
能從主服務器查詢到兩臺從服務器的ID以及端口。完成MySQL部署。
作者:張紅塵
鏈接:https://juejin.cn/post/6986569891344023559
來源:掘金