Docker安装主从复制的mysql 详细步骤,以及解决错误

news/2024/7/4 7:45:59 标签: mysql, docker, 数据库, 云原生

1.新建主服务器容器实例3307

 

 --privileged=true

docker run -p 3307:3306 --name mysql-master \
-v /mytest-docker/mydata/mysql-master /log:/var/log/mysql \
-v /mytest-docker/mydata/mysql-master /data:/var/lib/mysql \
-v /mytest-docker/mydata/mysql-master /conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7     

-v 挂在本地容器卷   

2.进入/mydata/mysql-master/conf目录下新建my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

3.修改完配置后重启master实例

      docker restart mysql-master

4.进入mysql-master容器

     docker exec -it mysql-master /bin/bash

     mysql -uroot -proot

(这里如果登录不进去,在my.cnf 配置文件 加入跳过检查 

    [mysqld]

 skip-grant-tables  进入之后 使用mysql 库,修改密码set password for ‘root’@‘localhost’=password(‘Admin123@qwe’);如果报:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement  输入:flush privileges;  再次输入:set password for ‘root’@‘localhost’=password(‘Admin123@qwe’);  

退出:exit  再把my.ini的skip-grant-tables删除或者注释掉  重启MySQL

5.master容器实例内创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY 'wzf001115';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

6.新建从服务器容器实例3308 (从服务)

docker run -p 3308:3306 --name mysql-slave \
-v /mytest-docker/mydata/mysql-slave/log:/var/log/mysql \
-v /mytest-docker/mydata/mysql-slave/data:/var/lib/mysql \
-v /mytest-docker/mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

7.进入/mytest-docker/mydata/mysql-slave/conf目录下新建my.cnf

         vim my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

8.修改完配置后重启slave实例

       docker restart mysql-slave

9.在数据库中查看主从同步状态

       show master status;

10.进入mysql-slave容器

     docker exec -it mysql-slave /bin/bash

     mysql -uroot -proot

11.在从数据库中配置主从复制(重要的)

change master to master_host='宿主机ip', master_user='slave', master_password='wzf001115', master_port=3307, master_log_file='mall-mysql-bin.000006', master_log_pos=617, master_connect_retry=30;

12.在从数据库中查看主从同步状态

    show slave status \G;

13.在从数据库中开启主从同步

14.查看从数据库状态发现已经同步

 15.主从复制测试

主机新建库-使用库-新建表-插入数据,ok

从机使用库-查看记录,ok


http://www.niftyadmin.cn/n/1712585.html

相关文章

玩转数组高级技法,成为JS高手

1.批量制造数据 一、创建新数组使用 for 循环批量 push 数据 function createData() {const data [];for (let i 0; i < 1000; i) {data.push({name: name${i 1},});}return data; }const data createData(); console.log(data); 二、创建空数组&#xff0c;填充full&…

关于消息队列MQ,入门,概念,种类

1.什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是 message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互联网架构中&#xff0c;MQ 是一种…

RabbitMQ 的核心概念

1.四大核心概念 1.1生产者 产生数据发送消息的程序是生产者 1.2交换机 交换机是 RabbitMQ 非常重要的一个部件&#xff0c;一方面它接收来自生产者的消息&#xff0c;另一方面它将消息 推送到队列中。交换机必须确切知道如何处理它接收到的消息&#xff0c;是将这些消息推送…

Unity实战篇:利用Easy Touch实现Moba游戏技能释放(前言)

前言&#xff1a; 王者我已经一两个赛季没玩了&#xff0c;当年老夫可是。。。咳&#xff0c;跑题了&#xff0c;我现在一直在自学Unity&#xff0c;想要实现一下他的技能释放方式&#xff0c;仅为学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。 想要实现的效果&am…

甜品美食蛋糕网页设计期末课程设计(html+css+js)

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

关于队列中的 死信队列讲解与应用

1. 死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理 解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到queue 里了&#xff0c;consumer 从 queue 取出消息 进行消…

分布式存储的算法案列面试题

面试&#xff1a;1~2亿条数据需要缓存&#xff0c;请问如何设计这个存储案例 单机单台100%不可能&#xff0c;肯定是分布式存储&#xff0c;用redis如何落地&#xff1f; 上述问题阿里P6~P7工程案例和场景设计类必考题目&#xff0c;一般业界有3种解决方案 1.哈希取余分区&a…

docker安装6台 redis 实现分布式主从复制环境搭建

目录 1.安装架构图 2.创建容器&#xff0c;及命令详解 3.配置主从的集群关系 构建主从关系 4.链接进入6381作为切入点&#xff0c;查看集群状态 1.安装架构图 2.创建容器&#xff0c;及命令详解 命令一个一个的创建&#xff0c;注意格式 docker run -d --name redis-node…