Docker mysql主从配置

摘要:
/etc/mysql-eMYSQL_ ROOT_ PASSWORD=Abcd12345-d--restart=alwaysmysql:port(3306),位于docker容器-v/home/data/docker/mysql/mysql1/conf:for-mysql_主机需要在当前system/home/data/locker/mysql/mysql1/conf目录中创建my.cnf文件。

一:Mysql基于Docker的主从复制搭建

1:安装docker,安装步骤可见我之前的文章:Docker-常用基建的安装与部署

docker ps 命令查询当前的容器状态,这就是我们最后要达到的效果。

Docker mysql主从配置第1张

2:首先拉取mysql官方镜像

bash> docker pull mysql:5.7

演示环境是在同一台服务器上部署。因为docker创建容器时默认采用bridge网络,会自行分配ip,不允许指定,重启容器会导致ip变更。

所以我们需要创建自定义的bridge网络,这样创建容器的时候才能指定ip。

bash> docker network create --subnet=172.18.0.0/16 mynetwork

3:创建三个mysql(一主两从)容器:

docker run -p 3306:3306 --name mysql_master --net mynetwork --ip 172.18.0.36 -e TZ=Asia/Shanghai -v /home/data/docker/mysql/mysql1/logs:/logs -v /home/data/docker/mysql/mysql1/data:/var/lib/mysql -v /home/data/docker/mysql/mysql1/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=Abcd12345 -d --restart=always mysql:5.7

docker run -p 3307:3306 --name mysql_slave1 --net mynetwork --ip 172.18.0.37 -e TZ=Asia/Shanghai -v /home/data/docker/mysql/mysql2/logs:/logs -v /home/data/docker/mysql/mysql2/data:/var/lib/mysql -v /home/data/docker/mysql/mysql2/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=Abcd12345 -d --restart=always mysql:5.7

docker run -p 3308:3306 --name mysql_slave2 --net mynetwork --ip 172.18.0.38 -e TZ=Asia/Shanghai -v /home/data/docker/mysql/mysql3/logs:/logs -v /home/data/docker/mysql/mysql3/data:/var/lib/mysql -v /home/data/docker/mysql/mysql3/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=Abcd12345 -d --restart=always mysql:5.7

 上面的docker run命令中的参数都有其独特的含义,比如 -p 3307:3306  表示当前环境主键的端口(3307):docker容器内的端口(3306)

-v /home/data/docker/mysql/mysql1/conf:/etc/mysql  这个配置的是mysql的配置文件路径,

对于mysql_master 需要在当前系统/home/data/docker/mysql/mysql1/conf目录下创建 my.cnf文件,内容如下:

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-bin=/var/lib/mysql/mysql-bin
server-id=36
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed  
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
max_allowed_packet=20M

剩余的两个从库配置,/home/data/docker/mysql/mysql2/conf目录下创建 my.cnf文件

[mysqld]
server-id=37
log-bin=/var/lib/mysql/mysql-slave1-bin

/home/data/docker/mysql/mysql3/conf目录下创建 my.cnf文件

[mysqld]
server-id=38
log-bin=/var/lib/mysql/mysql-slave2-bin

配置修改完成后,重启容器:

docker restart mysql_master
docker restart mysql_slave1
docker restart mysql_slave2

二:主从配置

1:进入主库:docker exec -it mysql_master /bin/bash

bash> mysql -uroot -p
mysql> SHOW MASTER STATUS;
 File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154| 

 2:同步mysql_slave1 和 mysql_slave2

# 进入mysql_salve1
bash> docker exec -it mysql_slave1 /bin/bash
# 执行同步 mysql> change master to master_host
='172.18.0.36', master_user='root',master_password='Abcd12345',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154,master_connect_retry=30; mysql> start slave;

# 进入mysql_salve2
bash> docker exec -it mysql_slave2 /bin/bash
# 执行同步 mysql> change master to master_host='172.18.0.36', master_user='root',master_password='Abcd12345',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154,master_connect_retry=30; mysql> start slave;
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即主库中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即主库中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

最后,可以自己验证下同步的效果了。

免责声明:文章转载自《Docker mysql主从配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(原)ubuntnu中anaconda的g++提示crtbeginS.o:unrecognized relocationStm32ADC-内部温度传感器的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FreeMarker语法

向原作者致敬,原文地址http://www.cnblogs.com/linjiqin/p/3388298.html FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} ${book.name?if_exists } //用于判断如果存在,就输出这个值 ${book.name...

vscode 对于 C 源文件,IntelliSenseMode 已根据编译器参数和探测 compilerPath 从“clang-x64”更改为“gcc-x64”

vscode 不知道从什么时候开始出现 对于 C 源文件,IntelliSenseMode 已根据编译器参数和探测 compilerPath 从“clang-x64”更改为“gcc-x64” 的信息 解决方案 .vscode 文件夹 -> c_cpp_properties.json 文件 -> 将 "intelliSenseMode": "cl...

MySql中 delimiter 详解

转载于:http://blog.csdn.net/yuxin6866/article/details/52722913 其实就是告诉MySQL解释器,该段命令是否已经结束了,mysql是否可以执行了。默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。 [sql]view plain...

spark保存读取csv SequenceFile

前言 Spark读取和保存文件格式是非常多的,json,csv,haoop SequenceFile ,hbase等等。本文就是简单的spark读取文件 spark 读写csv 使用opencsv jar包读取,先在maven配置。 读取方式因逐行读取、以单个文件为key读取整个文件,代码实现略有不同 逐行读取 package com.learn.hado...

Maven的assembly插件实现自定义打包部署(包含依赖jar包)

微服务必备 优点:   1、可以直接导入依赖jar包   2、可以添加插件启动 .sh 文件   3、插件的配置以及微服务的统一打包方式 1.首先我们需要在pom.xml中配置maven的assembly插件 <build> <plugins> <plugin>...

celery 定时任务时间篇

1、Celery加入定时任务 Celery除了可以异步执行任务之外,还可以定时执行任务。在实例代码的基础上写个测试方法: 1 #coding:utf-8 2 from celery.task.schedules import crontab 3 from celery.decorators import periodic_task 4...