docker 配置 Mysql主从集群

这篇具有很好参考价值的文章主要介绍了docker 配置 Mysql主从集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

docker 配置Mysql集群

Docker version 20.10.17, build 100c701

MySQL Image version: 8.0.32

Docker container mysql-master is source. mysql-replica is replication.

master == source. replica == slave.名称叫法不一样而已。

Choose one of the way,与replica同步数据两种情况:

  1. source有存在的数据并且你想同步到replica,这种需要mysqldump备份source数据,然后CHANGE REPLICATION SOURCE TO
  2. you are setting up a new source and replica combination,其实就是你source没有数据,没有想同步到replica的,这种的不需要mysqldump备份source数据复原到replica,直接CHANGE REPLICATION SOURCE TO

网络大多为第二种情况,那么我就写第一种情况,第一种情况基本就多了mysqldump这个步骤。

Pull MySQL image And run mysql-master

docker pull mysql/mysql-server:latest

你可以去Docker Hub寻找适合的版本: docker hub

主节点的my.cnf配置为:

[mysqld]
server_id=1
socket=/var/lib/mysql/mysql.sock
user=mysql

Mysql8很多配置已经为默认,比如binlog默认开启,log_replica_updates默认开启,注意server_id需要source和replica不要相同。

datadir文件夹下要注意为空才行,否则会启动不成功。如果启动过程遇到任何问题,可以使用docker logs mysql-master命令查看出了什么问题。

注意docker使用mount命令,需要文件或者文件夹都存在,而-v不需要。
可搜索--mount和-v两个命令的区别。

docker run -p 3307:3306 --name mysql-master \
--mount type=bind,src=/root/working/mydata/mysql-master/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/root/working/mydata/mysql-master/datadir,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql/mysql-server:latest

-p: 3307为云服务器端口,我用他连接datagrip。3306为容器内部端口。

mount:src为云服务路径,dst为容器内部路径。

MYSQL_ROOT_PASSWORD:为root用户指定密码,否则需要在docker logs去查看此容器自己生成的密码。

创建一个远程访问的账号和一个做主从同步的账号

创建一个远程访问的账号,方便我们使用datagrip等工具连接我们的数据库。

注意云服务器的安全组规则,是否把我们需要的端口放开了,比如3306,3307,3308

docker exec -it mysql-master mysql -uroot -p命令进入到数据库,root账号的密码为上面我们设置的root

进来数据库后,我们创建账号:

#添加远程登录用户
CREATE USER 'keboom'@'%' IDENTIFIED BY 'keboom';
GRANT ALL PRIVILEGES ON *.* TO 'keboom'@'%';

keboom这个账号用来datagrip软件连接我们的数据库。

接着我们创建一个用来做主从同步的用户:

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

repl这个账号用来replica节点来向source节点同步数据。

mysqldump命令在主库备份数据,接着从库恢复此备份

  1. 在主库执行FLUSH TABLES WITH READ LOCK;将主库只读,这时记录主库binlog位置,并做mysqldump备份。备份做好之后,则解锁。

  2. 我们新开一个终端,进入数据库执行SHOW MASTER STATUS\G 获得主库binlog位置。

    mysql> SHOW MASTER STATUS\G
    *************************** 1. row ***************************
                 File: binlog.000002
             Position: 2185
         Binlog_Do_DB: 
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: 
    1 row in set (0.00 sec)
    
    
  3. 我们再新开一个终端,执行 docker exec -it mysql-master bash,进入容器进行备份。

    注意docker exec -it mysql-master bashdocker exec -it mysql-master mysql -uroot -p 区别

  4. mysqldump -uroot -p --databases test --source-data > dbdump.db,这里我自己创建了一个test数据库,我只备份这一个数据库。可以在test数据库创建一个表,插入几条数据,用来验证同步数据是否成功。

  5. UNLOCK TABLES; 备份好数据之后,就可以解锁了。

启动replica节点

replica—my.cnf配置为:

[mysqld]
server_id=21
socket=/var/lib/mysql/mysql.sock
user=mysql
docker run -p 3308:3306 --name mysql-replica \
--mount type=bind,src=/root/working/mydata/mysql-replica/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/root/working/mydata/mysql-replica/datadir,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql/mysql-server:latest
  1. replica启动好后,将dbdump.db 文件复制到挂载的目录下,进入到replica容器,执行mysql -uroot -p < dbdump.db ,这时我们就把备份恢复到从节点了,我们可以在主库试着添加几条数据,可以看到此时从库还不能同步数据。

  2. 进入到replica数据库,执行命令:

    CHANGE REPLICATION SOURCE TO
        -> MASTER_HOST='172.17.0.2',SOURCE_USER='repl',SOURCE_PASSWORD='repl',SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=2185,GET_MASTER_PUBLIC_KEY=1;
    
    MASTER_PORT如果你的mysql用的不是3306,记得设置一下。
    

    获得MASTER_HOST,可执行:

    docker inspect mysql-master | grep IP                                   
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                        "IPAMConfig": null,
                        "IPAddress": "172.17.0.2",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
    
    

    SOURCE_USER就是我们在主库创建的用于主从同步的用户。

    SOURCE_LOG_FILE,SOURCE_LOG_POS是上面在主库中查询到的。

    GET_MASTER_PUBLIC_KEY,mysql8 默认使用 caching_sha2_password authentication plugin。replica需要向source获得公匙。

  3. START REPLICA;

  4. SHOW REPLICA STATUS\G 查看同步状态。如果Replica_IO_RunningReplica_SQL_Running 都为Yes那么基本就成功了。如果有其他问题,可以通过docker logs mysql-replica查看日志。

可以试试在test数据库的表中插入几条数据,看看从库是否同步过来。

参考文档:https://dev.mysql.com/doc/refman/8.0/en/binlog-replication-configuration-overview.html文章来源地址https://www.toymoban.com/news/detail-412952.html

到了这里,关于docker 配置 Mysql主从集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】

    💖The Begin💖点点关注,收藏不迷路💖 首先,确保你已经安装了Docker。 要下载特定版本的Tomcat镜像,可以在 docker pull 命令后面添加 image_name: tag 参数。其中 tag 制定了镜像的版本号。 解决插入中文报错: 总结: docker安装完mysql,运行实例之后,建议先修改完字符集编码后再

    2024年02月10日
    浏览(27)
  • docker配置MySQL主从模式

    首先我们去准备一个MySQL8+,docker即可 创建MySQL数据卷目录    // 主服务器容器卷创建    mkdir -p /mydata/mysql-master/conf 创建容器并运行   这个是主的    docker run -d -p 3307:3306 --privileged=true -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf

    2024年02月03日
    浏览(26)
  • 使用 docker 搭建 mysql 主从配置

    真正的配置文件是docker中 /etc/my.cnf 拉取镜像 docker pull mysql:5.7 启动主数据库和从数据库 用 Navicat 连接测试,都能连上说明启动正常 修改 docker 中 my.cnf 配置文件,需要复制到本机再修改,修改后再复制回 docker,可以用 centos 图形版自带的编辑工具 进入 master 创建账号 修改 m

    2024年02月03日
    浏览(22)
  • 【初识 Docker | 中级篇】 Docker 安装 MySQL(单机及主从配置)

    可以按照以下步骤在 Docker 中安装 MySQL ✔ 拉取 MySQL 镜像 docker pull mysql ✔ 运行 MySQL 容器 docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password mysql 其中, your_password 是 MySQL 的 root 用户密码 ,可以替换为您自己的密码。这个命令会在后台运行一个名为 mysql 的容器,并将

    2024年02月10日
    浏览(27)
  • 基于docker-compsoe.yml配置mysql8.0主从 (需要进入主从容器执行命令)

    主my.cnf文件 从my.cnf文件 主要的yml配置 主容器的操作 进入主mysql容器 3306端口的 docker exec -it 容器id /bin/bash 登录mysql mysql -uroot -p 创建主从复制的账号 - 创建用户slave,密码123456 CREATE USER \\\'slave\\\'@\\\'%\\\' IDENTIFIED BY \\\'123456\\\'; 授权主从复制 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO \\\'slave\\\'@

    2024年02月16日
    浏览(34)
  • 使用Docker搭建Redis主从集群

    欢迎来到 请回答1024 的博客 🍓🍓🍓欢迎来到 请回答1024的博客 关于博主 : 我是 请回答1024 ,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端开发者。 博客特色 : 在我的博客中,开设了如下专栏( 点击可以进入专栏奥~ ): Java、MySQL、Redis、Spring、SpringB

    2024年04月24日
    浏览(31)
  • 华为云云服务器评测|初始化配置SSH连接 & 安装MySQL的docker镜像 & 安装redis以及主从搭建 & 7.2版本redis.conf配置文件

    1.云耀云服务器L实例初始化配置,设置密码,ssh连接; 2.安装docker,安装运行mysql容器; 3.redis镜像的拉取,创建运行容器; 4.搭建redis主从,一主一从,7.2版本的redis.conf配置文件; 设置密码,官方要求复杂一点 进行远程登陆配置 添加开放的端口 在finalShell中新建SSH连接 系统

    2024年02月10日
    浏览(44)
  • 【架构】docker实现集群主从扩容【案例3/4】

    当整个集群扛不住流量的情况时,需要给集群扩容增加设备,由3主3从,扩为4主4从。实现: 示意图如下: 第一步:新创建两个节点(redis-node-7,端口6387和 redis-node-8,端口6388),并启动。 尽可能和之前创建节点的命名规则一致 第二步:进入其中任意一个容器实例内部 第三

    2024年01月16日
    浏览(27)
  • redis主从配置+集群搭建

    为什么需要主从配置????? 当出现高并发流量情况 如果我们只有一个 redis 服务器 挂掉之后 网站的运营会出现问题. 我们可以多弄几台 redis 服务器,使得一台服务器挂掉自动切换到另一台 redis 服务器,这个时候就实现了一个高可用的系统 主从配置 环境是2台 ubuntu serv

    2024年02月09日
    浏览(28)
  • K8s 部署Mysql主从集群

    查看是否出创建成功 (1)执行如下命令 说明: 创建一个 secret 名字为 mysql-password 命名空间为 deploy-test –from-literal=mysql_root_password=root 后面的root为密码 –dry-run 不执行,只是校验 (2)生成资源清单文件,并保存为 mysql_root_password_secret.yaml (3)创建 secret (4)查看 secret (

    2024年03月11日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包