docker mysql5.7 主从_用Dockerfile手动创建mysql5.7主从镜像

本文介绍了如何使用Dockerfile手动创建MySQL5.7的主从复制镜像。通过设置Dockerfile,配置启动脚本conf.sh和权限脚本privileges.sql,实现了MySQL主从复制的自动化搭建。在主节点上设置server_id、启动mysql服务、设置用户和权限,从节点则设置随机server_id、跟随主节点并启动复制。最后,通过容器IP启动从节点并进行测试,验证了主从配置的成功。
摘要由CSDN通过智能技术生成

mysql-master

Dockerfile

首先,Dockerfile 长这样,具体的命令上面有解释。核心逻辑就是拷贝两个文件进去,然后在容器启动的时候执行 conf.sh,由 conf.sh 执行另外一个文件。

From mysql:5.7.25

MAINTAINER tigerfive tigerfive@aliyun.com

ENV MYSQL_ALLOW_EMPTY_PASSWORD yes

COPY conf.sh /mysql/conf.sh

COPY privileges.sql /mysql/privileges.sql

CMD ["sh", "/mysql/conf.sh"]

这里首先设置允许免密登录是为了方便后面配置,密码最后再通过 privileges.sql 来设置。

启动脚本

#!/bin/bash

set -e

echo '1. set server_id....'

sed -i '/\[mysqld\]/a server-id=1\nlog-bin=/var/log/mysql/mysql-bin\ngtid-mode=ON\nenforce-gtid-consistency=ON' /etc/mysql/mysql.conf.d/mysqld.cnf

echo '2. start mysql...'

service mysql start

echo '3. setting password...'

sed -i 's/MYSQLROOTPASSWORD/'$MYSQL_ROOT_PASSWORD'/' /mysql/privileges.sql

sed -i 's/MYSQLREPLICATIONUSER/'$MYSQL_REPLICATION_USER'/' /mysql/privileges.sql

sed -i 's/MYSQLREPLICATIONPASSWORD/'$MYSQL_REPLICATION_PASSWORD'/' /mysql/privileges.sql

mysql < /mysql/privileges.sql

echo '4. service mysql status'

echo 'mysql for tigerfive if ready...'

tail -f /dev/null

privileges.sql

这个文件是对 MySQL 进行一些权限配置,比如设置用户密码,创建新用户,数据库授权等。

后面两句很重要

use mysql;

set password for root@'localhost' = password("MYSQLROOTPASSWORD");

grant all on *.* to "MYSQLREPLICATIONUSER"@'%' identified by "MYSQLREPLICATIONPASSWORD" with grant option;

flush privileges;

构建镜像:

docker build -t tigerfive/mysql5.7-master:2.1 .

启动容器测试配置是否成功

启动:

docker run --name tigersql -e MYSQL_ROOT_PASSWORD="1234567" -e MYSQL_REPLICATION_USER="repl" -e MYSQL_REPLICATION_PASSWORD="1234567" -d tigerfive/mysql5.7-master:2.1

链接容器测试登陆

# docker exec -it tigersql bash

root@9fa3dcf5299e:/# mysql -uroot -p1234567

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 5

查看权限:

mysql> select * from mysql.user where user='repl'\G

*************************** 1. row ***************************

Host: %

User: repl

Nice,成功创建mysql-master镜像

mysql-slave

Dockerfile

From mysql:5.7.25

MAINTAINER tigerfive tigerfive@aliyun.com

ENV MYSQL_ALLOW_EMPTY_PASSWORD yes

COPY conf.sh /mysql/conf.sh

COPY privileges.sql /mysql/privileges.sql

CMD ["sh", "/mysql/conf.sh"]

启动脚本

#!/bin/bash

set -e

echo '1. set server_id...'

RAND="$(date +%s | rev | cut -c 1-2)$(echo ${RANDOM})"

sed -i '/\[mysqld\]/a server-id='$RAND'\nlog-bin=/var/log/mysql/mysql-bin\ngtid-mode=ON\nenforce-gtid-consistency=ON' /etc/mysql/mysql.conf.d/mysqld.cnf

echo '2. start mysql...'

service mysql start

echo '3. setting password...'

sed -i 's/MYSQLROOTPASSWORD/'$MYSQL_ROOT_PASSWORD'/' /mysql/privileges.sql

sed -i 's/MYSQLMASTERSERVICEHOST/'$MYSQL_MASTER_SERVICE_HOST'/' /mysql/privileges.sql

sed -i 's/MYSQLREPLICATIONUSER/'$MYSQL_REPLICATION_USER'/' /mysql/privileges.sql

sed -i 's/MYSQLREPLICATIONPASSWORD/'$MYSQL_REPLICATION_PASSWORD'/' /mysql/privileges.sql

mysql < /mysql/privileges.sql

echo '4. service mysql status'

echo 'mysql for tigerfive if ready...'

tail -f /dev/null

privileges.sql

use mysql;

set password for root@'localhost' = password('MYSQLROOTPASSWORD');

flush privileges;

CHANGE MASTER TO master_host='MYSQLMASTERSERVICEHOST', master_user='MYSQLREPLICATIONUSER', master_password='MYSQLREPLICATIONPASSWORD' ;

START SLAVE;

制作镜像

docker build -t tigerfive/mysql5.7-slave:2.1 .

查看mysql-master的容器IP

docker inspect tigersql |grep IPAddr

ip为: 172.17.0.2

启动命令

docker run --name tigersql2 -e MYSQL_ROOT_PASSWORD="1234567" -e MYSQL_MASTER_SERVICE_HOST="172.17.0.2" -e MYSQL_REPLICATION_USER='repl' -e MYSQL_REPLICATION_PASSWORD="1234567" -d tigerfive/mysql5.7-slave:2.1

主从测试OK

可以直接拉取上传共有仓库的镜像

tigerfive/mysql5.7-slave:2.1

tigerfive/mysql5.7-master:2.1

仓库还有8.0的版本,欢迎使用

后续更新k8s版本的镜像制作和yaml文件编写,实现一主多从

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过Dockerfile手动创建MySQL 5.7主从镜像,以下是一个示例Dockerfile: ``` # 基础镜像 FROM mysql:5.7 # 设置MySQL的root用户密码 ENV MYSQL_ROOT_PASSWORD=yourpassword # 复制MySQL配置文件到镜像中 COPY ./my.cnf /etc/mysql/my.cnf # 设置容器启动时执行的命令 CMD ["mysqld"] # 在容器中创建一个新的MySQL用户 RUN mysql -e "CREATE USER 'replication'@'%' IDENTIFIED BY 'yourpassword';" # 授权主从复制权限 RUN mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';" # 开放MySQL默认端口 EXPOSE 3306 ``` 在上面的Dockerfile中,我们通过`ENV`命令设置了MySQL的root用户密码,通过`COPY`命令复制了MySQL配置文件到镜像中,通过`RUN`命令创建了一个新的MySQL用户,并授权主从复制权限。 在构建镜像时,可以使用以下命令: ``` docker build -t mysql57 . ``` 其中,`.`表示当前目录中的Dockerfile。 构建完成后,可以使用以下命令启动MySQL主从容器: ``` docker run -d --name mysql-master -p 3306:3306 mysql57 docker run -d --name mysql-slave -p 3307:3306 mysql57 ``` 其中,`--name`指定容器名称,`-p`指定端口映射。 启动容器后,可以使用以下命令进入MySQL主容器: ``` docker exec -it mysql-master mysql -uroot -p ``` 其中,`-it`表示交互式终端,`-uroot`表示以root用户身份登录MySQL,`-p`表示输入密码。 进入MySQL后,可以创建数据库和表,并进行数据操作。在主容器中,还需要执行以下命令,获取binlog信息: ``` mysql> show master status; ``` 在从容器中,可以使用以下命令配置主从复制: ``` CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='replication', MASTER_PASSWORD='yourpassword', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', # 这里的值根据主容器中的binlog信息修改 MASTER_LOG_POS=154; # 这里的值根据主容器中的binlog信息修改 ``` 其中,`MASTER_HOST`指定主容器的主机名或IP地址,`MASTER_USER`指定主从复制用户,`MASTER_PASSWORD`指定主从复制用户密码,`MASTER_PORT`指定主容器的端口号,`MASTER_LOG_FILE`和`MASTER_LOG_POS`指定从容器应该从哪个binlog位置开始复制数据。 最后,可以使用以下命令启动从容器的MySQL服务: ``` mysql> start slave; ``` 这样,就完成了MySQL 5.7主从复制镜像的构建和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值