Docker的相关操作 与 Docker下MySQL容器的安装

https://www.cnblogs.com/yumq/p/14253360.html

本次实验我是在单机状态下进行mysql的主从复制,和多机的原理一样

准备多个mysql容器

相关参数

--name 容器的名称命名
-p 暴露端口,端口的映射 上述是本机的3307端口映射到容器内的3306端口,访问本机3307就能访问容器内的数据库(3306端口)
--privileged=true 赋予容器内以root用户来操作
-it 交互运行
--hostname docker1 容器内hostname,我是为了区分docker添加的,如果用不到可以去掉 -e MYSQL_ROOT_PASSWORD=123456 环境参数配置,配置mysql root角色的密码
-e MYSQL_DATABASE=ymq 创建一个ymq的数据库,用不到的可以删除掉
-e MYSQL_USER=user
-e MYSQL_PASSWORD=pass
`-v 非常重要,相当于docker容器的宝贵文件(相关配置,相关数据,相关日志)存放到容器外(即云服务器中),这样做的目的是不把数据放在容器内,保障数据安全`
-v /home/mysql/docker-data/3307/conf:/etc/mysql/conf.d
-v /home/mysql/docker-data/3307/data/:/var/lib/mysql
-v /home/mysql/docker-data/3307/logs/:/var/log/mysql -d mysql:5.7
-d 后台运行容器,并返回容器ID;
mysql:5.7 运行的镜像文件

直接运行下面代码就能启动mysql

mysql1

docker run --name mysqldocker1 -p 3306:3306 --privileged=true -it -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname docker1 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql1/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql1/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql1/logs/:/var/log/mysql -d mysql:5.7

mysql2

docker run --name mysqldocker2 -p 3307:3306 --privileged=true -it -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname docker2 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql2/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql2/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql2/logs/:/var/log/mytsql -d mysql:5.7

mysql3

docker run --name mysqldocker3 -p 3308:3306 --privileged=true -it -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname docker3 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql3/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql3/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql3/logs/:/var/log/mytsql -d mysql:5.7

配置相关容器

查看Docker内容器状态

docker ps



现在是启动成功了,但是没有配置主从相关配置,所以我们下一步要配置MySQL。

因为运行的时候我们将容器内的配置目录挂载到本机的/home/mysql/docker-data/



所以我们将对应容器的配置文件复制到对应目录下的conf目录下

my.cnf 文件内容如下

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html [mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#datadir=/home/mysql/docker-data/3307/data
#socket=/home/mysql/docker-data/3307/mysql.sock character_set_server=utf8
init_connect='SET NAMES utf8' # Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0 #log-error=/home/mysql/docker-data/3307/logs/mysqld.log
#pid-file=/home/mysql/docker-data/3307/mysqld.pid
lower_case_table_names=1
server-id=4122
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1 #rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=10000

配置说明

三个容器的my.conf 中不能相同server-id

如上图我的第一个mysql的server-id为4122,那个我第二个server-id我就设置为4123

log-bin=mysql-bin 是开启bin-log

auto_increment_offset 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535

auto_increment_increment 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535

为了避免两台服务器同时做更新时自增长字段的值之间发生冲突,一般在主主同步配置时,

需要将两台服务器的auto_increment_increment增长量都配置为2,

而要把auto_increment_offset分别配置为1和2。

当然如果三台就需要auto_increment_increment增长量都配置为3

auto_increment_offset分别设置为1和2和3

重启所有mysql容器

#先查看所有容器
docker ps
#然后一个个重启相应的容器
docker restart 容器id #因为我容器只有这三个mysql 所以我以这样方式重启全部容器
docker restart $(docker ps -aq)

配置master

我是以docker1下的mysql作为master主机

进入docker1

docker exec -it 容器ID/容器名字 /bin/bash

看到root@docker1时表示在docker1容器内

如果操作完毕就exit退出容器

进入mysql



根据容器的配置 我设置的密码为123456

在master mysql添加权限

GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

查看master的二进制文件

show master status;

这样master配置就成功了

配置slave

在slave中设置master信息

change master to master_host='172.24.7.187',master_port=3306,master_user='repluser',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

master_host='172.24.7.187' 主机我是用的云服务器内网地址 master_port=3306 是master主机的端口,master_user='repluser' master主机上的角色

master_log_file='mysql-bin.000001',master_log_pos=154; 必须与主机的二进制一样

开启slave,启动SQL和IO线程

start slave;

如果需要关闭就 stop slave;

查看slave的状态

show slave status\G;

如果都为YES 就表明配置成功,主从复制搭建完成!!

如果 Slave_IO_Running: NO 但 Slave_SQL_Running: Yes

可能是在slave中设置master信息的sql中master_host地址填的127.0.0.1 或者 localhost。

因为这两个地址会先去访问容器内的本机,而不是容器外的mysql,所以需要换成云服务器的公网或内网ip

如果 Slave_IO_Running: Yes 但 Slave_SQL_Running: NO

可能是主从同步的时候相关数据同步上的错误,在slave端 删除冲突的数据就行,具体的错误信息会在

show slave status\G下面的信息中指出NO的原因

测试结果

Docker进行MySQL主从复制操作的更多相关文章

  1. MySQL(14)---Docker搭建MySQL主从复制(一主一从)

    Docker搭建MySQL主从复制(一主一从) 上一篇博客写了MYSQL主从复制原理 : MySQL(13)---MYSQL主从复制原理 这篇我们来写 Docker搭建MYSQL主从复制(一主一从) ...

  2. 基于Docker的Mysql主从复制

    基于Docker的Mysql主从复制搭建 为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相 ...

  3. Docker搭建MySQL主从复制

    Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...

  4. 基于Docker的Mysql主从复制搭建

    来源:https://www.cnblogs.com/songwenjie/p/9371422.html?tdsourcetag=s_pctim_aiomsg   为什么基于Docker搭建? 资源有 ...

  5. 使用docker部署mysql主从复制集群

    一.环境搭建 虚拟机环境:centos7 IP: 启动3个容器,一个是master,端口是3307,另外两个是slaver,端口是3308和3309 docker pull mysql:5.7 doc ...

  6. 基于Docker搭建MySQL主从复制

    摘要: 本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建. 本篇博文相对简单,因为是初次使用D ...

  7. Docker搭建 MySQL 主从复制

    为什么选 Docker 搭建主从复制需要两个以上的MySQL, 使用 Docker 非常方便.如果以前没用过,找个简单的文档看看,熟悉一下命令. 搭建过程 1.下载镜像 docker pull mys ...

  8. 基于 Docker 搭建 MySQL 主从复制

    本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建. 根据网上教程走还是踩了一些坑,不过所幸最终 ...

  9. docker之MySQL主从复制

    MySQL主从复制 主服务器 配置文件目录 mkdir /var/lib/mysql/master/conf.d 数据存储目录 mkdir var/lib/mysql/master/data 配置my ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:Qt Designer中QAbstractButton派生按钮部件的checkable和checked属性

    checkable属性 checkable属性确认按钮是否可以被选中,缺省情况下该值为False,即按钮是不能被选中的. 可选择的按钮按下之后,按钮不会自动弹起来,此时按钮为选中状态,当再次点击按钮时 ...

  2. PyQt(Python+Qt)学习随笔:在父窗口中弹出子窗口无法显现的问题

    在学习和测试PyQt相关部件功能的时候,老猿经常是不同的窗口新建一个类,再新建一个Application来使用这个窗口类进行测试. 为了减少应用框架代码的重复开发,老猿决定采用主窗口叠加测试窗口的模式 ...

  3. flask实现分类搜索的小测试

    最新学长要求实现一个搜索的功能呢,也费了一点功夫.这个案例也没有学长写的好,比学长的实现差了不少,待我仔细研究习再发出相应代码 项目要求,搜索语法如下: titile: xxx #搜索titile的所 ...

  4. sails框架结合mocha的测试环境搭建

    一.环境结构 1.首先最底层是操作系统 2.其次在操作系统之上是Node.js的运行环境,和Database 3.再之上就是sail和mocha框架 二.环境搭建 1.首先需要Node.js的运行环境 ...

  5. js中的(function(){})()立即执行

    ( function(){-} )() 和 ( function (){-} () ) 是两种javascript立即执行函数的常见写法,要理解立即执行函数,需要先理解一些函数的基本概念. 函数声明. ...

  6. js中单引号和双引号区别

    总结: 1.无论单引号还是双引号都是成双成对出现的,否则报错!浏览器在读到第一个双引号开始,第二个双引号结束,同样浏览器读取单引号也是第一个开始,第二个单引号结束,在使用的时候必须遵循规则那就是一对双 ...

  7. Codeforces Edu Round 53 A-D

    A. Diverse Substring 找普遍性(特殊解即可). 最简单的便是存在一个区间\([i, i + 1] (1 <= i < n)\),且$str[i] $ $ != str[ ...

  8. Linux相关知识基础

    目录 前言 第一章 Linux远程连接管理 1. 为什么要远程连接Linux系统 2. 连接前的小知识 2.2.1 IP地址 2.2.2 端口的概念 2.2.3 协议的概念 3. 远程连接Linux的 ...

  9. Java8的Lambda表达式,你会不?

    目录 理解Lambda 基础语法 函数式接口 常用的函数式接口 消费型接口 供给型接口 断言型接口 函数型接口 方法引用 数组引用 构造器引用 总结 参考阅读 理解Lambda Lambda表达式可以 ...

  10. .Net Core 学习之旅知乎版

    @[yuyue](.Net Core 学习之旅-.netCore Developer RoadMap) # .Net Core 学习之旅 随着.NET5.O 的正式推出,微软的VS大一统目的逐步成型, ...