1 Star 0 Fork 1

Zonkidd/MySQL master-slave replication based on dockerfile

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

实验环境:

仅有一台机器:pjj-18

IP:192.168.115.80

主Mysql的配置:

1、创建/mysql文件夹

mkdir /mysql

2、进入/mysql文件夹

cd /mysql

3、创建dockerfile

# vim dockerfile

From mysql:5.7.26
LABEL author="tigerfive"
LABEL co-author="zonkidd"

ENV MYSQL_ALLOW_EMPTY_PASSWORD yes
COPY conf.sh /mysql/conf.sh
COPY privileges.sql /mysql/privileges.sql

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

4、创建conf.sh

# vim conf.sh

#!/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

5、创建privileges.sql

# vim privileges.sql

use mysql;
set password for root@'localhost' = password("1234567");
grant all on *.* to "repl"@'%' identified by "1234567" with grant option;
flush privileges;

6、构建mysql5.7.26镜像

# docker build -t zonkidd/mysql5.7.26-master:v1

7、测试容器配置是否成功

# docker run -p 3306:3306 --name zonkiddsql -e MYSQL_ROOT_PASSWORD="1234567" -e MYSQL_REPLICATION_USER="repl"  -e MYSQL_REPLICATION_PASSWORD="1234567"  -d zonkidd/mysql5.7.26-master:v1

8、容器登录测试

# docker exec -it zonkiddsql bash
root@756ef34048f5:/# 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 3
Server version: 5.7.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

从Mysql的配置:

1、创建/mysql2文件夹

mkdir /mysql2

2、进入/mysql2文件夹

cd /mysql2

3、创建dockerfile

# vim dockerfile

From mysql:5.7.26
LABEL author="tigerfive"
LABEL co-author="zonkidd"

ENV MYSQL_ALLOW_EMPTY_PASSWORD yes
COPY conf.sh /mysql2/conf.sh
COPY privileges.sql /mysql2/privileges.sql

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

4、创建conf.sh

# vim 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'/' /mysql2/privileges.sql
sed -i 's/MYSQLMASTERSERVICEHOST/'$MYSQL_MASTER_SERVICE_HOST'/' /mysql2/privileges.sql
sed -i 's/MYSQLREPLICATIONUSER/'$MYSQL_REPLICATION_USER'/' /mysql2/privileges.sql
sed -i 's/MYSQLREPLICATIONPASSWORD/'$MYSQL_REPLICATION_PASSWORD'/' /mysql2/privileges.sql


mysql < /mysql2/privileges.sql

echo '4. service mysql status'
echo 'mysql for tigerfive if ready...'

tail -f /dev/null

5、创建privileges.sql

# vim privileges.sql

use mysql;
set password for root@'localhost' = password('1234567');
flush privileges;
CHANGE MASTER TO master_host='192.168.115.80', master_user='repl', master_password='1234567' ;
START SLAVE;

6、构建mysql5.7.26镜像

# docker build -t zonkidd/mysql5.7.26-slave:v1

7、容器创建,测试容器配置是否成功

# docker run -p 3307:3306  --name zonkiddsql2 -e MYSQL_ROOT_PASSWORD="1234567" -e MYSQL_MASTER_SERVICE_HOST="172.17.0.4" -e MYSQL_REPLICATION_USER='repl' -e MYSQL_REPLICATION_PASSWORD="1234567"   -d zonkidd/mysql5.7.26-slave:v1

# docker exec -it zonkiddsql2 bash
root@c2feb4582891:/# mysql -uroot -p1234567

若想创建一主多从架构,则更改映射的端口和把容器名称更改

8、检测主从同步链接情况

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.115.80
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 852
               Relay_Log_File: c2feb4582891-relay-bin.000004
                Relay_Log_Pos: 1065
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

9、测试主从同步

主Mysql:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

Slave1:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

Slave2:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

成功!

空文件

简介

在一台主机上基于dockerfile搭建mysql主从复制 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zonkidd/mysql-master-slave-based-on-dockerfile.git
git@gitee.com:zonkidd/mysql-master-slave-based-on-dockerfile.git
zonkidd
mysql-master-slave-based-on-dockerfile
MySQL master-slave replication based on dockerfile
master

搜索帮助