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. 第15.12节PyQt(Python+Qt)入门学习:可视化设计界面组件布局详解

    一.引言 在Qt Designer中,在左边部件栏的提供了界面布局相关部件,如图: 可以看到共包含有四种布局部件,分别是垂直布局(Vertical Layout).水平布局(Horizontal La ...

  2. [极客大挑战 2019]HardSQL updatexml报错注入小结

    报错注入链接: https://www.cnblogs.com/richardlee97/p/10617115.html报错原因: 其原因主要是因为虚拟表的主键重复.按照MySQL的官方说法,grou ...

  3. flask-mail 机制

    上课无聊,总结下学习的flask-mail 机制 flask-mail 了解 flask-mail 机制中可以用pip 安装也可以用pycharm里面直接安装. flask-mail是一个能调用smt ...

  4. tesseract-ocr 图片文字识别

    本篇记录下python识别图片中的文字 所需的安装配置:  安装库: pip install pytesseract pip install PILLOW   安装 Tesseract-OCR软件: ...

  5. js- 实现属性名的拼接 obj['name']

     obj.name---->obj[name] 这两种调用方式一样,使用obj.name内部转换成 obj['name'], 使用obj['name']更快. obj['name'] 里面必须是 ...

  6. Spring Cloud微服务学习笔记

    Spring Cloud微服务学习笔记 SOA->Dubbo 微服务架构->Spring Cloud提供了一个一站式的微服务解决方案 第一部分 微服务架构 1 互联网应用架构发展 那些迫使 ...

  7. 全国11省市出台区块链专项政策,Panda Global发现 "区块链+政务"被寄予厚望!

    2020年已经过半,回顾2020年的上半年,不难发现其实区块链的变化非常大,今天Panda Global就给大家回顾下上半年全国关于区块链政策的发布情况.今年上半年,全国已有11个省市出台区块链专项政 ...

  8. 算法——K 个一组翻转链表

    给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例: 给你这个 ...

  9. Mysql常用函数合集

    1. 字符函数 length(获取字节数,UTF-8编码中 一个汉字占3个字节,GBK编码中一个汉字占2个字节) select length('abc'); #结果:3 select length(' ...

  10. .net core WebAPI性能监控-MiniProfiler与Swagger集成

    ------------恢复内容开始------------ 安装Nuget Install-Package MiniProfiler.AspNetCore.Mvc Install-Package M ...