入门

基于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. Android 找不到所标识的资源 java.lang.NoSuchFieldError: No static field XXX of type I in class Lcom/XX/R$id

    报错: java.lang.NoSuchFieldError: No static field XXX of type I in class Lcom/XXX/R$id; or its supercl ...

  2. Oracle 根据单元格内容不同来判断不同条件

    select xxx,xxx from xxx where decode(AAA,0,BBB,1,CCC)='12345' 如果AAA字段等于0则AAA=''12345' 否则如果BBB字段等于1则B ...

  3. 哲思集-转载自CSDN

    CSDN 创始人蒋涛:世界被编码之后 分享赚¥9.90订阅博主 “写代码 20 年,通过网络平台和社区,帮助中国的程序员更好成长,这是我最希望被大家记住的.”这是蒋涛接受 ZAKER 采访的开场白. ...

  4. CentOS7上lvm分区调整(resize2fs: Bad magic number in super-block while trying to open ...)

    问题描述:根目录空间占用率100% 首先用传统resize2fs方式调整分区: resize2fs -p /dev/mapper/centos-home 50Gresize2fs 1.42.9 (28 ...

  5. RabbitMQ set password

    问题: -- ::09.387 ERROR oslo.messaging._drivers.impl_rabbit [req-51faf017-4f1f-4a24-ab79-624b302b839b ...

  6. python 复制与粘贴处理笔记

    在python中用有一个模块可以用来处理剪切板复制的内容,pyperclip模块 pyperclip模块有copy()和paste()函数,分别用于向计算机的剪贴板发送文本,或从它接受文本. pype ...

  7. Jmeter+Ant+jenkins实现api自动化测试的持续集成

    0基础上手教程 @jmeter的使用 jmeter是一个基于java语言编写的开源测试工具,广泛应用于接口测试,性能测试,自动化测试. 接口自动化的编写教程,将于后续分享. 问题一:为什么用ant,而 ...

  8. Arduboy基本操作(二)

    Arduboy基本操作(二) 方向键控制物体移动 #include<Arduboy.h> Arduboy arduboy; int i,j; void setup() { arduboy. ...

  9. idea创建mybatis的逆向工程:generator

    1在工程的目录下配置mybatis-generator插件 <build> <plugins> <!-- mybatis逆向工程 --> <plugin> ...

  10. 力扣Leetcode 461. 汉明距离

    给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换. 完成所有替换操作后,请你返回这个数组. 示例: 输入:arr = [17,18,5,4,6,1] 输 ...