Docker搭建Mysql服务(主从配置)

本文需要用户已安装Docker服务

版本信息

Docker版本:19.03.2
Mysql版本:8.0.17
Linux版本:3.10 (Centos7.6)

拉取Mysql官方镜像

docker pull mysql:8.0.17

创建Mysql主从服务所需引用外部目录及文件配置

(1) Master服务

mkdir -p /data/mysql/master/conf  #my.cnf配置文件存放目录 
mkdir -p /data/mysql/master/data  #数据存储目录
vi /data/mysql/master/conf/my.cnf  #编辑mysql配置文件

将如下代码添加到my.cnf文件中

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

#注意此处server-id必须唯一
server-id=1
log-bin=mysql-bin

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Custom config should go here
!includedir /etc/mysql/conf.d/

(2) Slave服务

mkdir -p /data/mysql/slave/conf  #my.cnf配置文件存放目录 
mkdir -p /data/mysql/slave/data  #数据存储目录
vi /data/mysql/slave/conf/my.cnf  #编辑mysql配置文件

将如下代码添加到my.cnf文件中

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

#注意此处server-id必须唯一
server-id=2
log-bin=mysql-bin

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Custom config should go here
!includedir /etc/mysql/conf.d/

启动Mysql服务镜像(master)

docker run -p 3306:3306 --name mysql-master --privileged=true -v /data/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.17

启动命令解释:
(1)-p 3306:3306 #指定端口号 第一个3306代表宿主机端口号,第二个端口号代表容器端口号
(2)--name mysql-master #指定容器名称
(3)--privileged=true #使用该参数,容器内的root拥有真正的root权限。否则,容器内的root只是外部的一个普通用户权限
(4)-v /data/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/master/data:/var/lib/mysql # -v表示挂载外部目录,冒号前代表所挂载的外部目录,冒号后代表映射的容器内目录
(5)-e MYSQL_ROOT_PASSWORD=123456 # -e表示传入的环境参数,这里的MYSQL_ROOT_PASSWORD就是Mysql镜像所提供的root用户密码环境参数配置
(6)-d mysql:8.0.17 # -d 开启Daemon模式(守护进程),后面的mysql:8.0.17就是指定要运行的镜像

启动Mysql服务镜像(slave)

docker run -p 3307:3306 --name mysql-slave --privileged=true -v /data/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.17

查看已启动的容器

docker ps

可以看到我们上面已经启动的两个mysql容器mysql-master和mysql-slave


docker.png

配置mysql-master数据库(主数据库)

进入mysql-master容器

docker exec -it mysql-master /bin/bash

登录主库mysql数据库

mysql -u root -p

在主库上创建同步用户并授权

CREATE USER 'replicate'@'172.18.0.2' IDENTIFIED BY '123456';  
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'172.18.0.2';
FLUSH PRIVILEGES;

上面代码中'replicate'@'172.18.0.2'的IP地址应为对应容器的IP地址,可通过“docker inspect 容器ID”查看指定容器IP地址
最后增加远程访问用户 并赋予所有权限,远程访问测试用

CREATE USER tang IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'tang'@'%';

修复远程登录报报 caching_sha2_password异常

ALTER USER 'tang'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
ALTER USER 'tang'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

查询master的状态,此处File,Position数据在配置从库时用到

show master status;

配置mysql-slave数据库(从数据库)

进入mysql-slave容器

docker exec -it mysql-slave /bin/bash

登录从库mysql数据库

mysql -u root -p

配置从服务器Slave:(后面两个数据从主库查询得出)

change master to master_host='172.18.0.2',master_port=3006,master_user='replicate',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1593;
start slave;

查询slave的状态,Slave_IO_Running及Slave_SQL_Running进程必须正常运行,即YES状态,否则都是错误的状态

show slave status\G

最后同样增加远程访问用户 并赋予所有权限,远程访问测试用

CREATE USER tang IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'tang'@'%';

修复远程登录报报 caching_sha2_password异常

ALTER USER 'tang'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 
ALTER USER 'tang'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 
FLUSH PRIVILEGES;

至此同步相关配置 已完成,接下来可以测试了,大家可以自己选择工具进行测试,这里就不进行赘述了。

你可能感兴趣的:(Docker搭建Mysql服务(主从配置))