docker安装 mysql 5.7.31 官方镜像 并实现 主从复制

本文中使用两台服务器进行搭建,一台master一台agent 此操作仅限于测试环境,正式环境请 使用 -v 命令 将 mysql 数据文件挂载到宿主机上,两台主机中必须已经安装daocker,推荐使用bitnami:mysql 镜像,相比 官方镜像体积更小,配置主从更简单

一、拉取mysql5.7.31 docker镜像 并优化镜像(当前操作在master主机上执行)

1.1 拉取mysql5.7.31 docker 镜像

docker pull mysql:5.7.31

1.2 优化镜像

#创建master目录
mkdir -p /data/mysql/master
#切换至master目录
cd /data/mysql/master
#在当前目录创建my.cnf 文件  内容如下
vi my.cnf
[mysqld]
#[必须]启用二进制日志
log-bin=mysql-bin
#[必须]服务器唯一ID,默认是110,一般取IP最后一段,这里看情况分配
server-id=14
#创建DockerFile 
vi Dockerfile
#Dockerfile 中写入以下内容
FROM mysql:5.7.31 #基础镜像
ENV TZ Asia/Shanghai  #修改时区为 上海时区
COPY my.cnf /etc/mysql/ #将my.cnf 文件拷贝到容器的/etc/mysql文件夹中

1.3 自定义mysql镜像

# --rm 打包完成后删除中间镜像 -t 自定义镜像的名称 . 从当前目录查找Dockerfile 文件
docker build --rm -t mysqlmaster:5.7.31 .

1.4 运行镜像

docker run -itd --name=mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin mysqlmaster:5.7.31 --character-set-server=utf8 --collation-server=utf8_general_ci
#查看镜像日志 观察是否启动成功
docker logs -f mysql
#进入mysql容器
docker exec -it mysql bash
#登录mysql 密码 admin
mysql -uroot -p
#查看数据库
use mysql;
show databases;
#查看成功 通过exit 退出即可
#退出mysql
exit;
#退出容器
exit

二、拉取mysql5.7.31 docker镜像 并优化镜像(当前操作在agent主机上执行)

2.1 拉取mysql5.7.31 docker 镜像(这一步可以使用master 主机上的mysql镜像,docker save -o,docker load -i 导入到本机也可以 )

docker pull mysql:5.7.31

2.2 优化镜像

#创建agent目录
mkdir -p /data/mysql/agent
#切换至agent目录
cd /data/mysql/agent
#在当前目录创建my.cnf 文件  内容如下
vi my.cnf
[mysqld]
#[必须]启用二进制日志
log-bin=mysql-bin
#[必须]服务器唯一ID,默认是110,一般取IP最后一段,这里看情况分配  
server-id=15  # == 这里注意修改 ==
#创建DockerFile 
vi Dockerfile
#Dockerfile 中写入以下内容
FROM mysql:5.7.31 #基础镜像
ENV TZ Asia/Shanghai  #修改时区为 上海时区
COPY my.cnf /etc/mysql/ #将my.cnf 文件拷贝到容器的/etc/mysql文件夹中

2.3 自定义mysql镜像

# --rm 打包完成后删除中间镜像 -t 自定义镜像的名称 . 从当前目录查找Dockerfile 文件
docker build --rm -t mysqlagent:5.7.31 .

2.4 运行镜像

docker run -itd --name=mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin mysqlagent:5.7.31 --character-set-server=utf8 --collation-server=utf8_general_ci
#查看镜像日志 观察是否启动成功
docker logs -f mysql
#进入mysql容器
docker exec -it mysql bash
#登录mysql 密码 admin
mysql -uroot -p
#查看数据库
use mysql;
show databases;
#查看成功 通过exit 退出即可
#退出mysql
exit;
#退出容器
exit

三、使用数据库管理工具 navicat 或者sqlyog 连接master主机的数据库

#创建同步账户以及授权
create user 'yang'@'%' identified by 'yang';
grant replication slave on *.* to 'yang'@'%';
flush privileges;
#出现 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and
错误解
决方案,在my.cnf配置文件中设置
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY
_ZERO
,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
#查看master状态
show master status;
#查看二进制日志相关的配置项
show global variables like 'binlog%';
#查看server相关的配置项
show global variables like 'server%';

四、使用数据库管理工具 navicat 或者sqlyog 连接agent主机的数据库

docker安装 mysql 5.7.31 官方镜像 并实现 主从复制_第1张图片

#设置master相关信息
CHANGE MASTER TO
master_host='192.168.59.14', -- master 主机ip
master_user='yang',			--master主机上配置的主从  账号密码
master_password='yang',
master_port=3306,
master_log_file='mysql-bin.000003', --连接 master主机上的mysql 执行sql语句,show master status; 对应file 列 内容
master_log_pos=2356;--连接 master主机上的mysql 执行sql语句,show master status; 对应position列 内容
#启动同步
start slave;
#查看master状态
show slave status;

五 、大功告成,接下来连接master主机上的mysql 添加数据库数据表以及数据 ,查看agent 主机上数据是否同步

你可能感兴趣的:(docker,mysql,mysql,docker,linux)