第2章 Docker应用实战-Docker部署MySql
作者:王珂
邮箱:49186456@qq.com
前言
大家好,我是王珂老师,一个在IT行业摸爬滚打十多年的老兵。讲实战,重应用是我讲课唯一的追求。如果你感觉我讲的还不错,那么请点赞、收藏加关注,并转发给你身边的小伙伴,录视频不易,希望得到你支持与认可。
我们在CentOS环境操作系统上,使用Docker部署MySql。如果你使用的是Windows,可以在Windows操作系统上安装VMware虚拟机,具体步骤可以参考我的另一篇安装教程《第1章 Docker应用实战-基础环境准备》。
一、环境准备
-
CentOS7
-
Docker
-
Docker-Compose(如果想使用docker-compose命令部署时需要)
具体请参考《第1章 Docker应用实战-基础环境准备》
二、部署MySql
使用docker部署
2.1 快速部署单节点MySql
使用docker快速部署一个mysql,如果全部使用默认配置,执行以下命令即可
docker run --name mysql-8.0.21 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.21
部署完成后,mysql信息如下:
-
-p 3306:3306 暴露mysql端口 3306
-
用户名: root
-
-e MYSQL_ROOT_PASSWORD=123456 mysql root 用户的密码
注意:以上部署的mysql的数据和配置文件都存储在容器中,当容器删除时,配置文件和数据都同时丢失。这种方式仅适合我们临时本地开发使用。
使用docker-compose部署
以下我们使用dokcer-compose创建mysql.
2.2 部署单节点MySql
- 创建目录
如果需要将数据和配置文件存储在宿主机上,假设使用目录/opt/docker-compose/mysql-8.0.21/,数据文件存储在其下data目录,配置文件存储在其下conf目录,因此我们首先创建以下目录
mkdir -p /opt/docker-compose/mysql-8.0.21/{data,conf}
- my.cnf
配置文件的内容
[mysqld]
# 设置日志格式,可选值:ROW(默认),STATEMENT,MIXED
binlog_format = STATEMENT
# 表不区分大小写
lower_case_table_names = 1
# 使用mysql_native_password密码策略,防止navicat连不上mysq18
default_authentication_plugin = mysql_native_password
- docker-compose.yml
docker-compose.yml文件的内容
version: "3"
services:
mysql-8.0.21:
image: mysql:8.0.21
container_name: mysql-8.0.21
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "./conf:/etc/mysql/conf.d"
- "./data:/var/lib/mysql"
privileged: true
restart: always
- 执行部署
进入到docker-compose.yml文件所在目录,执行命令
docker-compose up -d
2.3 部署MySql主从集群
mysql版本选择8.0.21,容器规划
容器名称 | 端口 | 说明 |
---|---|---|
mysql-8.0.21-master | 3316 | master节点 |
mysql-8.0.21-slave1 | 3326 | slave1节点 |
mysql-ms-8.0.21目录结构
- mysql-ms-8.0.21.yml
version: "3"
services:
mysql-8.0.21-master:
container_name: mysql-8.0.21-master
image: mysql:8.0.21
ports:
- "3316:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "./master/conf/:/etc/mysql/conf.d"
- "./master/data:/var/lib/mysql"
privileged: true
restart: always
mysql-8.0.21-slave1:
container_name: mysql-8.0.21-slave1
image: mysql:8.0.21
ports:
- "3326:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "./slave1/conf:/etc/mysql/conf.d"
- "./slave1/data:/var/lib/mysql"
privileged: true
restart: always
depends_on:
- mysql-8.0.21-master
- master
mysqld.cnf
[mysqld]
# 服务器ID
server-id = 1
# 设置日志格式,可选值:ROW(默认),STATEMENT,MIXED
binlog_format = STATEMENT
# 表不区分大小写
lower_case_table_names = 1
# 使用mysql_native_password密码策略,防止navicat连不上mysq18
default_authentication_plugin = mysql_native_password
- slave
mysqld.cnf
[mysqld]
# 服务器ID
server-id = 2
# 设置日志格式,可选值:ROW(默认),STATEMENT,MIXED
binlog_format = STATEMENT
# 表不区分大小写
lower_case_table_names = 1
# 使用mysql_native_password密码策略,防止navicat连不上mysq18
default_authentication_plugin = mysql_native_password
- 执行部署
docker-compose -f ./mysql-ms-8.0.21/mysql-ms-8.0.21.yml up -d
- 在master节点创建repl用户
先进入主服务器
docker exec -it mysql-8.0.21-master /bin/bash
登录mysql
mysql -uroot -p
创建repl用户
-- 创建repl用户
create user 'repl'@'%';
-- 设置密码
alter user 'repl'@'%' identified with mysql_native_password by '123456';
-- 授予复制权限
grant replication slave on *.* to 'repl'@'%';
-- 刷新
flush privileges;
- 查询master状态
show master status;
±--------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±--------------±---------±-------------±-----------------±------------------+
| binlog.000002 | 1047 | | | |
±--------------±---------±-------------±-----------------±------------------+
1 row in set (0.00 sec)
- 配置slave服务器同步
先进入slave服务器
docker exec -it mysql-8.0.21-slave1 /bin/bash
登录mysql
mysql -uroot -p
配置主从
change master to master_host='192.168.1.17',master_user='repl',master_password='123456',master_port=3316,master_log_file='binlog.000002',master_log_pos=1047;
启动主从复制
start slave;
查看主从状态
show slave status \G;
mysql> show slave status \G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.17 Master_User: repl Master_Port: 3316 Connect_Retry: 60 Master_Log_File: binlog.000002 Read_Master_Log_Pos: 1047 Relay_Log_File: 7c2969b69424-relay-bin.000002 Relay_Log_Pos: 321 Relay_Master_Log_File: binlog.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes
总结
以上就是本章节课程的主要内容,希望能够对您有所帮助。