基于 Docker 的 MySQL 主从复制搭建(Mac M1版本)

这篇具有很好参考价值的文章主要介绍了基于 Docker 的 MySQL 主从复制搭建(Mac M1版本)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系统:Macbook M1

镜像版本:mysql:5.7

如果是要查 slave连接不上 master的问题,可以直接跳到文章末尾踩坑处

准备工作

  1. 拉取镜像
docker pull mysql:5.7
  1. 本地数据卷挂载

因为mysql不挂载的话,重启丢失数据,所以在本地创建三个空的文件夹conf、data、log即可

部署mysql_master(主)

  1. 运行master容器

不加 --platform linux/amd64会导致出现
The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested的提示,
容器虽然可以通过Docker Desktop手动启动,但是总觉得这样不对,然后谷歌问题之后看到这个篇文章:https://stackoverflow.com/questions/72152446/warning-the-requested-images-platform-linux-amd64-does-not-match-the-detecte后说加了这个就可以不报错

docker run --platform linux/amd64 -p 3309:3306 --name mysql_master \

-v /Users/miaomk/docker/volume/mysql/cluster/_master/log:/var/log/mysql \

-v //Users/miaomk/docker/volume/mysql/cluster/_master/data:/var/lib/mysql \

-v /Users/miaomk/docker/volume/mysql/cluster/_master/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=master123 \

-d mysql:5.7
  1. 查看容器是否启动成功
docker ps

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

  1. 测试数据库连接

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

  1. 配置mysql_master挂载位置的my.cnf
[mysqld]
#要唯一
server_id=100
#开启bin log
log-bin=master-mysql.bin
binlog_format=mixed
expire_logs_days=7
#跳过主健重复
slave_skip_errors=1062
  1. 重启mysql_master容器
docker restart mysql_master

docker ps

6.进行mysql_master容器创建slave用户并赋予对应的权限便于复制

#进入容器
docker exec -it mysql_master /bin/bash
#进入mysql
mysql -u root -p
# 5.7 可以创建用户和授权都一起处理,但是8.0以上得分开写
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'Slave1'@'%' identified by  'Slave123456';
  1. 测试Slave1用户是否可以使用
SELECT
	  USER,
	  HOST,
	  account_locked,
	  password_expired 
FROM
	  mysql.USER;

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

部署mysql_salve(从)

  1. 运行slave容器并查看状态
docker run --platform linux/amd64 -p 3310:3306 --name mysql_slave \

-v /Users/miaomk/docker/volume/mysql/cluster/_slave/log:/var/log/mysql \

-v //Users/miaomk/docker/volume/mysql/cluster/_slave/data:/var/lib/mysql \

-v /Users/miaomk/docker/volume/mysql/cluster/_slave/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端
基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

  1. 配置mysql_salve挂载位置的my.cnf
[mysqld]

server_id=102

log-bin=master-mysql-slave.bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
#跳过主健重复
slave_skip_errors=1062
relay_log=master-mysql-relay-bin
#将复制事件写进自己的二进制日志
log_slave_updates=1
#replica 设置为只读(具有super权限的用户除外)
read_only=1
  1. 重启mysql_slave容器并进入mysql_master容器内部查看对应内容

docker restart mysql_slave

docker ps

#进入mysql_master容器内查询master内容
docker exec -it mysql_master /bin/bash

mysql -uroot -p

show master status;

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

FilePosition都是我们后面要在mysql_slave容器中需要用到的
  1. 查询本机的ip
ifconfig

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

  1. 进入mysql_slave容器内开启slave
docker exec -it mysql_slave /bin/bash

mysql -uroot -p

#设置master信息
CHANGE MASTER TO 
    master_host = '192.168.124.3',
    master_user = 'Slave1',
    master_password = 'Slave123456',
    master_port = 3309,
    master_log_file = 'mysql-master.000001',
    master_log_pos = 618,
    master_connect_retry = 30;

#查询slave状态
show slave status \G

#开启slave
start slave;

#开启slave后查看状态
show slave status \G
命令说明:

master_host:Master 的地址,看别人的文章里这里说的都是指的容器的独立 ip, 可以通过 docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ 容器名称 | 容器 id 查询容器的 ip,但是我自己实验下来发现如果用这个host的话mysql_slave里的slave连不上master,看到一篇文章发现用的本机IP,实验后发现对我可行,大家可以参考一下

master_port:Master 的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是 60 秒

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

这样就代表上述的slave能连上master了

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

测试:在主库mysql_master中建库建表,插入数据,再去从库中查看,验证主从同步

最后:slave无法连接上master的踩坑分享

1.

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本),java,mysql,后端

FilePosition设置不对,需要重新去mysql_master里面 show master status;查看

2. error connect to master
  1. 网络不通 检查 ip, 端口(可能跟我一样是需要本机的ip,而不是容器的ip或者127.0.0.1或者localhsot

  2. 密码不对 检查是否创建用于同步的用户和用户密码是否正确

文章参考:https://blog.csdn.net/csdnfanguyinheng/article/details/123239722文章来源地址https://www.toymoban.com/news/detail-685594.html

到了这里,关于基于 Docker 的 MySQL 主从复制搭建(Mac M1版本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于docker环境搭建Mysql主从

    ​ mysql主从复制的原理将主数据库的增删改查等操作记录到二进制日志文件中,从库接收主库日志文件,根据最后一次更新的 起始位置,同步复制到从数据库中,使得主从数据库保持一致。 Binary log:主数据库的二进制日志;Relay log:从服务器的中继日志。 复制过程: 1,主

    2024年02月02日
    浏览(33)
  • Redis最新版本搭建主从环境,Redis主从复制环境搭建

    一般网站搭建都会使用Redis做缓存,当单台Redis承受不住压力时,会考虑搭建Redis主从。在没有业务的情况下,一般不会一下子上来就去搭建Redis无中心集群 Redis主从复制环境搭建 ,前面跟部署单台Redis一致,只不过后面 是从Redis的配置上去同步主Redis即可 。 这里找三台虚拟机

    2024年01月21日
    浏览(26)
  • 基于docker搭建MySql主从数据库(详细步骤)

    在 Linux 中建立对应文件夹,用于存放MySql数据库相关,文件夹路径: /usr/local/software/mysql 。 在mysql文件下创建如下目录结构的文件:(3306为主数据库文件夹,笔者这里以对端口号来命名;3310为从数据库文件夹,3311同理,可依次往下) 上传 my.cnf 文件到 conf 文件夹下 以下是

    2024年02月09日
    浏览(40)
  • 简单搭建MySQL主从复制

    个人认为,90%的公司的数据体量和并发量压根用不上从服务器,结合Redis,一台性能强劲的云MySQL服务器,做好日常备份。足够了。 一个MySQL主(Master)服务器上的数据自动复制到至少一个的MySQL从(Slave)服务器的过程,利用bin log,主服务器上的数据更改会被自动地同步到从

    2024年03月09日
    浏览(40)
  • Docker mysql 主从复制

    目录 介绍:为什么需要进行mysql的主从复制 主从复制原理: ✨主从环境搭建 主从一般面试问题: 介绍:为什么需要进行mysql的主从复制 在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能,一般都会采用 「主从复制」 。 比如:在复杂的业务系统中,有

    2024年01月17日
    浏览(29)
  • mysql 数据库主从复制搭建

    MySQL 主从复制主要用于实现高可用性和备份。在主从复制中,一个 MySQL 实例(称为主节点)将其数据更改复制到至少一个其他 MySQL 实例(称为从节点)上。主要借助于数据库二进制日志binlog进行数据的复制。 主从数据库对应的操作系统、数据库版本要一致。 1、主库配置 设

    2024年02月20日
    浏览(43)
  • mysql主从复制搭建(一主一从)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 介绍 MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后解析日志

    2024年02月12日
    浏览(38)
  • docker高级(mysql主从复制)

    数据库密码需要设置成自己的!!! 1、创建容器master13307 2、进入/mysql/mysql-master/conf目录下新建my.cnf 复制下面,保存 3、修改完配置后重启master实例 4、进入mysql-master容器 5、在主数据库中查看主从同步状态 6、新建从服务器容器实例mysql-slave 13308 7、重启slave 8、在从数据库s

    2024年02月11日
    浏览(33)
  • docker实现mysql 主从复制

                                                                   💧记录一下如何在Docker中启动两个MySQL容器来进行主从复制💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 《数据结构与算法》专栏的

    2023年04月11日
    浏览(28)
  • Docker集群部署-MySQL主从复制

    利用Docker实现MySQL主从复制架构的部署,实现1主1从集群配置。 要求实验主机能够连接外网,已经正确安装Docker,并关闭防火墙和selinux。 新建主服务器容器实例3307 # docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /m

    2024年02月12日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包