docker 配置 Mysql主从集群

Docker version 20.10.17, build 100c701

MySQL Image version: 8.0.32

Docker container mysql-master is source. mys

ql-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.000002Position: 2185Binlog_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 bash 和 docker 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_Running 和Replica_SQL_Running 都为Yes那么基本就成功了。如果有其他问题,可以通过docker logs mysql-replica查看日志。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/55086.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:在使用UEFI固件的计算机上内核是如何被启动的

前言 启动计算机通常不是一件难事&#xff1a;按下电源键&#xff0c;稍等片刻&#xff0c;你就能看到一个登录界面&#xff0c;再输入正确的密码&#xff0c;就可以开启一天的网上冲浪之旅了。 但偶尔这件事没那么顺利&#xff0c;有时候迎接你的不是熟悉的登录界面&#xf…

K8S系列文章之 开源的堡垒机 jumpserver

一、jumpserver作为一款开源的堡垒机&#xff0c;不管是企业还是个人&#xff0c;我觉得都是比较合适的&#xff0c;而且使用也比较简单。 二、这里记录一下安装和使用过程。 1、安装&#xff0c;直接docker不是就行 version: 3 services:xbd-mysql:image: mysql:8.0.19restart…

c++学习(特殊类设计)[30]

只能在堆上创建对象的类 如果你想要确保对象只能在堆上创建&#xff0c;可以通过将析构函数声明为私有&#xff0c;并提供一个静态成员函数来创建对象。这样&#xff0c;类的实例化只能通过调用静态成员函数来完成&#xff0c;而无法直接在栈上创建对象。 以下是一个示例&…

60多行代码仿制B站首页一个好看的卡片效果

文章目录 1、为啥是这个&#xff1f;2、仿制效果3、实现思路4、代码5、查看B站如何实现 1、为啥是这个&#xff1f; 看到Bilibili首页的一个卡片&#xff0c;看着效果很不错&#xff0c;给人很舒适的感觉。一琢磨貌似也不难&#xff0c;甚至只需要一层 div 就可以实现主要框架…

Microsoft Message Queuing Denial-of-Service Vulnerability

近期官方公布了一个MSMQ的拒绝服务漏洞&#xff0c;可能因为网络安全设备的更新&#xff0c;影响业务&#xff0c;值得大家关注。 漏洞具体描述参见如下&#xff1a; Name: Microsoft Message Queuing Denial-of-Service Vulnerability Description: Microsoft Message Queuing…

Kotlin~Mediator中介者模式

概念 创建一个中介来降低对象之间的耦合度&#xff0c;关系”多对多“变为“一对多”。 角色介绍 Mediator&#xff1a;抽象中介者&#xff0c;接口或者抽象类。ConcreteMediator&#xff1a;中介者具体实现&#xff0c;实现中介者接口&#xff0c;定义一个List管理Colleagu…

编译 intel MKL的一个fortran77 example DSYEV Example Program in Fortran

DSYEV Example Program in Fortran https://www.intel.com/content/www/us/en/docs/onemkl/code-samples-lapack/2023-1/dsyev-example-fortran.html 1. 示例代码 copy from hyperlink up: * Copyright (C) 2009-2015 Intel Corporation. All Rights Reserved. * The info…

并查集模板-两个操作:合并集合和查询两个元素是否属于同一个集合

一、链接 836. 合并集合 二、题目 一共有 nn 个数&#xff0c;编号是 1∼n1∼n&#xff0c;最开始每个数各自在一个集合中。 现在要进行 mm 个操作&#xff0c;操作共有两种&#xff1a; M a b&#xff0c;将编号为 aa 和 bb 的两个数所在的集合合并&#xff0c;如果两个数…

pip用法

pip show -f 包名 可以显示指定包的文件安装路径 参考&#xff1a; pip的基本使用 - 习久性成 - 博客园pip简介 1、pip 是一个现代的&#xff0c;通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。 2、pip是官方推荐的安装和管理Python包的工具…

2023华数杯数学建模竞赛选题建议

提示&#xff1a;DS C君认为的难度&#xff1a;C<B<A&#xff0c;开放度&#xff1a;B<A<C 。 A题&#xff1a;隔热材料的结构优化控制研究 A题是数模类赛事很常见的物理类赛题&#xff0c;需要学习不少相关知识。 其中第一问需要建立平纹织物整体热导率与单根纤…

【Linux操作系统】Vim:提升你的编辑效率

Vim是一款功能强大的文本编辑器&#xff0c;它具有高度可定制性和灵活性&#xff0c;可以帮助程序员和文本编辑者提高编辑效率。本文将介绍Vim的基本使用方法、常用功能和一些实用技巧。 文章目录 1. Vim的基本使用方法&#xff1a;2. 常用功能&#xff1a;2.1 文件操作&#…

物联网平台使用笔记

阿里云的IOT平台限制了50个设备。排除 移动云的限制较少&#xff0c;这里试用下。 创建完产品&#xff0c;接入设备后。使用MQTT客户端测试 其中client id 为设备id&#xff0c; username 为产品id&#xff0c; password 可以使用设备调试那里生成的。或使用官方token.exe 生成…