入门

基于Docker的Mysql主从复制搭建

  1. 首先安装docker
  2. 拉取mysql镜像:5.7版本
  3. 启动主从数据库容器
docker run -p 3339:3306 --name Maste -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7  # Master(主库)
docker run -p 3340:3306 --name Slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 # Slave(从库)

启动后用可用数据库软件测试一下是否连通。

  • 配置Master
  1. Master配置文件修改
docker exec -it 容器名 /bin/bash  #进入主库docker
apt-get update #更新安装源
apt-get install -y vim #安装vim
vim /etc/mysql/my.cnf #编辑my.cnf配置文件 [mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
  1. 重启mysql容器。
  2. 进入主库创建数据库同步用户,并授予REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于主从之间同步数据。
docker exec -it 主库容器名 /bin/bash  # 进入主库docker
mysql -uroot帐号 -p用户密码 # 登录入mysql
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; #创建用户名“slave”,密码“123456”的数据库用户。
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; #授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限
  1. 查看File、Position字段值,并记录下来
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 617 | | | |
+------------------+----------+--------------+------------------+-------------------+
  • 配置Slave
  1. Slave配置文件修改
docker exec -it 容器名 /bin/bash  #
apt-get update
apt-get install -y vim
vim /etc/mysql/my.cnf [mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
  1. 重启mysql服务跟docker容器
  2. 进入Slave数据库,执行主从同步命令;
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 617, master_connect_retry=30;  #   master_host='docker独立ip' ;
master_user='主库创建的同步帐号';master_password='同步帐号密码';master_port=mysql主库端口;master_log_file='主库File字段名';master_log_pos= Position字段;master_connect_retry=重连时间 show slave status \G; #查看主从同步状态
start slave #启动主从同步功能
   SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。

进阶

  1. 创建主库
docker run -itd -p 3308:3306 --name master -v /master/var/mysql:/var/lib/mysql -v /master/conf/:/etc/mysql/ -v /etc/localtime:/etc/localtime:ro  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  1. 创建从库
docker run -itd -p 3309:3306 --name slave -v /slave/var/mysql:/var/lib/mysql -v /slave/conf/:/etc/mysql/ -v /etc/localtime:/etc/localtime:ro  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

**注意:**因数据库版本不同,所有些并不会立即启动,需写配置文件才可启动。5.7经测试会立即启动。

3. 主从配置文件夹中创建配置文件 my.cnf

#主库配置如下:
cd /master/conf/
touch my.cnf
vim my.cnf
[mysqld]
lower_case_table_names=1
wait_timeout=30
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_allowed_packet= 1024M
group_concat_max_len = 1024M
thread_cache_size=64
max_connections=160000 #设置最大的连接数
server-id=1001 ##设置server_id,注意要唯一
transaction-isolation = READ-COMMITTED
auto-increment-increment = 1
auto-increment-offset = 1
slave-skip-errors = all #忽略一些错误
binlog-ignore-db=mysql
binlog-ignore-db=test1 #不同步给从库的库test1
log-bin = mysql-bin #开启二进制日志功能,以备Slave作为其它Slave的Master时使用
binlog-do-db=test #需要复制给从库的库
!includedir /etc/mysql/ #***主要:此路径是docker内的配置文件放置路径,也就是刚刚启动映射的配置文件路径
# 从库配置如下:
[mysqld]
lower_case_table_names=1
wait_timeout=30
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_allowed_packet= 1024M
group_concat_max_len = 1024M
thread_cache_size=64
max_connections=10000
server-id=1002
replicate-do-db=test #从库需要复制的库
replicate-ignore-db=test1 #从库需要忽略同步的库
log-slave-updates #一主多从必写的配置
log-bin = mysql-bin #开启二进制日志功能,以备Slave作为其它Slave的Master时使用
auto-increment-increment = 1
auto-increment-offset = 1
slave-skip-errors = all
slave-net-timeout=60 #这是slave60秒超时会重连
!includedir /etc/mysql/
  1. 重启启动主从库
docker restart master
docker restart slave
  1. 接下来主从库操作可参考入门步骤3,大同。

参考连接

slave启动失败解决方案一

slave启动失败解决方案二-清理slave同步信息

Docker实战(2):主从库搭建的更多相关文章

  1. 【Mysql】Mysql主从库搭建过程(爬完坑后整理所得)

    Mysql主从数据库搭建流程 新手开始学习mysql主从库,遇到一些问题,总结后写出以下流程 下面以5.7.23版本为例介绍 第一步:去官网下载5.7.23版本的免安装压缩包形式的mysql文件,贴上 ...

  2. Docker 实战(3)- 搭建 Gitlab 容器并上传本地项目代码

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 搭建 Gitlab 容器 搜索 ...

  3. 实战录 | Redis的主从服务器搭建

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全平台工程师田全磊,将带来Red ...

  4. 【MYSQL】主从库查看及搭建

    show slave status 查看从库信息  http://blog.csdn.net/lxpbs8851/article/details/7898716 搭建主从库   http://www. ...

  5. mysql5.7搭建主从库

    #MYSQL单节点的mysql远远不能满于生成,以防止生产服务器宕机,磁盘空间溢满等种种原因,需要有一个备用数据库, 这时候主从库是不错的选择,在是数据库集群中也起到了很大的作用 #MySQL 主从复 ...

  6. docker安装mysql主从

    docker安装mysql主从 启动主库: 1.docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5 ...

  7. Docker容器启动Mysql,Docker实现Mysql主从,读写分离

    Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...

  8. iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)   前面我们介绍了StoryBoard这个新技术,和纯技术 ...

  9. Docker for Windows(五)实践搭建SqlServer服务&执行数据库操作

    上一篇我们已经搭建了一个mysql数据库服务了:Docker for Windows(四)实践搭建&删除MySQL服务,发现用Docker确实是方便且容易,但上一篇主要是服务的搭建删除等基础操 ...

随机推荐

  1. 一文搞懂Java8 Lambda表达式(附带视频教程)

    Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...

  2. CSS3动画旋转——(图片360°旋转)

    今天在重构网页特效的时候,想着用到一个css3的旋转特效.简单来一个demo. html <div class="box"> <img src="./y ...

  3. vob文件转mkv

    下载了一部片子,是所谓的dvd原盘,就是用软件将dvd碟片rip下来,视频文件是一堆vob文件.觉得这片子没必要看原盘,想压缩成mkv以减小体积,同时保持合适的清晰度. 首先想到用handbrake这 ...

  4. 【异常检测】孤立森林(Isolation Forest)算法简介

    简介 工作的过程中经常会遇到这样一个问题,在构建模型训练数据时,我们很难保证训练数据的纯净度,数据中往往会参杂很多被错误标记噪声数据,而数据的质量决定了最终模型性能的好坏.如果进行人工二次标记,成本会 ...

  5. N46期第一周作业

    1.解释drwx rwx rwx中每个字符表⽰什么? d : 表示目录文件 ①rwx表示UID的读写执行权限  ②rwx表示GID的读写执行权限   ③rwx表示other的读写执行权限   2.li ...

  6. Kubernetes 的层级命名空间介绍

    原文链接:https://fuckcloudnative.io/posts/introducing-hierarchical-namespaces/ 在单个 Kubernetes 集群上安全托管大量用 ...

  7. ls-remote -h -t git://github.com/adobe-webplatform/eve.git 报错问题

    npm ERR! Error while executing:npm ERR! D:\开发工具\git\Git\cmd\git.EXE ls-remote -h -t git://github.com ...

  8. C++多线程基础教程

    目录 1 什么是C++多线程? 2 C++多线程基础知识 2.1 创建线程 2.2 互斥量使用 lock()与unlock(): lock_guard(): unique_lock: conditio ...

  9. WSGI 配置禁止反向DNS查找

    原文链接:https://opendev.org/starlingx/ha/src/commit/045a37c672a92f1412629a176f51183c88882e61/service-mg ...

  10. openstack-neutron-OVS agent分析

    参考链接: https://blog.csdn.net/sld880311/article/details/77978369 https://github.com/jffree/neutron-cod ...