以下是配置一主两从的Mysql服务的具体流程。
文章目录
- 创建用于挂载的目录
- 修改cnf配置
- 拉取mysql服务镜像
- 自定义docker网络
- 启动容器
- 主库配置
- 查看主库状态
- 创建从库备份用户
- 从库配置
- 修改Master信息
- 启动slave服务
- 查看slave服务状态是否正常
创建用于挂载的目录
保证数据的持久化,防止容器重启后数据丢失
- 主节点
/tools/docker-mysql/master/data /tools/docker-mysql/master/conf /tools/docker-mysql/master/logs
- 从一
/tools/docker-mysql/slave1/data /tools/docker-mysql/slave1/conf /tools/docker-mysql/slave1/logs
- 从二
/tools/docker-mysql/slave2/data /tools/docker-mysql/slave2/conf /tools/docker-mysql/slave2/logs
修改cnf配置
- 主节点
vi /tools/docker-mysql/master/conf/master.cnf [mysqld] log-bin=mysql-bin server-id=100
- 从一
vi /tools/docker-mysql/slave1/conf/slave1.cnf [mysqld] log-bin=mysql-bin server-id=101
- 从二
vi /tools/docker-mysql/slave2/conf/slave2.cnf [mysqld] log-bin=mysql-bin server-id=102
拉取mysql服务镜像
这里拉取的是最新的镜像
docker pull mysql/mysql-server:latest
自定义docker网络
用来为容器指定IP时,提供可用的IP段。
docker network create --subnet=172.18.0.0/24 dockernet
启动容器
- 主节点
docker run \ -itd \ -v /tools/docker-mysql/master/conf:/etc/mysql/conf.d \ -v /tools/docker-mysql/master/data:/var/lib/mysql \ -v /tools/docker-mysql/master/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3311:3306 \ --name mysql-master \ --restart=always \ --network dockernet \ --ip=172.18.0.2 \ -d mysql:latest
- 从一
docker run \ -itd \ -v /tools/docker-mysql/slave1/conf:/etc/mysql/conf.d \ -v /tools/docker-mysql/slave1/data:/var/lib/mysql \ -v /tools/docker-mysql/slave1/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3312:3306 \ --name mysql-slave1\ --restart=always \ --network dockernet \ --ip=172.18.0.3 \ -d mysql:latest
- 从二
docker run \ -itd \ -v /tools/docker-mysql/slave2/conf:/etc/mysql/conf.d \ -v /tools/docker-mysql/slave2/data:/var/lib/mysql \ -v /tools/docker-mysql/slave2/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3313:3306 \ --name mysql-slave2\ --restart=always \ --network dockernet \ --ip=172.18.0.4 \ -d mysql:latest
主库配置
查看主库状态
docker exec -it 主库容器ID /bin/bash
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 157 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
创建从库备份用户
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
create user 'backup'@'%' identified WITH mysql_native_password by '123456';
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' ;
从库配置
修改Master信息
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
// mysql-bin.000003 是我们在主库查看状态时查找到的 File 信息
// 157 是我们在主库查看状态时查找到的 Position 信息
change master to master_host='172.18.0.2',master_user='backup',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=157;
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' ;
启动slave服务
start slave;
查看slave服务状态是否正常
show slave status;
以下状态为 Yes 表示运行正常。
运行异常时,可以查看 Last_Error 中的异常信息。