文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的设置方法

2024-04-02 19:55

关注

同一服务器模拟利用 Docker 模拟 Mysql 设置的主从同步设置。

1、运行起来两个 Mysql :masterMysql(主库)、slaveMysql(从库),数据库版本 5.7。


#拉取镜像
docker pull mysql:5.7
#y运行主、从容器
docker run -p 13306:3306 --name slavemysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 13307:3306 --name mastermysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

运行完成后可以尝试连接,注意此处的映射到主机的服务端口分别为 13306和13307,对外连接需要保证防火墙和网关设置都要放开。

2、查看容器的使用 IP(配置主从需要同一内网中的 IP 地址使用)


#查看主库的所在 IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' masterMysql
#172.18.0.2

3、配置主从库。

(1)进入主库


docker exec -it masterMysql  bash #masterMysql 为运行容器的名称。

(2)进行配设置配置文件


cd /etc/mysql&&ls

可以看到,多份 *.cnf 文件,包括在 conf.d 和 mysql.conf.d 文件夹下都有。 这个是有加载顺序的,此处配置就统在 my.cnf 上操作。

(3)设置配置文件

方式一:

正常操作是进入文件夹内编辑,如以下方式:


vim ./my.cnf

不过这里遇到会报错:
bash: vi: command not found

先行安装 vi


apt-get update
#成功后运行
apt-get install vim

方式二(建议):

在容器外编辑后拷贝到容器内,这里是直接覆盖的方式。


复制主机到容器内。
语法:docker cp [主机地址] [容器 ID 或容器名称]:[容器文件地址]
docker cp /home/mysql/my.cnf mysql:/etc/mysql/my.cnf

(4)打开 Binlog 配置。

相同的配置:进入主、从库设置 my.cnf 配置文件。注意 server-id 需要不一致。


character_set_server=utf8
init_connect='SET NAMES utf8'
#这两条是设置utf-8字符格式,两个主机配置相同
## 同一局域网内注意要唯一(如果双向主备库,依赖这个去区分执行 Binlog 的 SQL 语句 )
#可以取 Ip 的最后一个。主库为 2,从库为 3。
server-id=2  
## 开启二进制日志功能,可以随便取(关键)
#演示设置主库设置为 master-bin,从库为 slave-bin
log-bin=master-bin
log_bin_index = master-bin.index

其中不同的配置: 主库:


#这里整理可以配置的内容,由于测试,先注释。
#要给从机同步的库(如果不写,默认全部同步)
#binlog-do-db=test

#不给从机同步的库(多个写多行)
#binlog-ignore-db=mysql #设置复制的数据库
#binlog-ignore-db=information_schema #设置忽略复制的数据库
#自动清理 15 天前的log文件
expire_logs_days=15
#binlog_format=row #设置 Binlog 记录的实际操作的 SQL。
#max_binlog_size=100m #设置文件大小
#replicate_do_table=test #进行复制的的数据表
#replicate_ignore_table=igoreTest #忽略进行复制的的数据表
#replicate_wild_ignore_db=test # 同 Replicate_Do_DB 可带通配符
#replicate_wild_ignore_db=igoreTest # 同 Replicate_Ignore_DB 可带通配符

从库:


#设置避免更新不及时或是重启后导致主从库复制出错。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay-log = slave-relay-bin

#主库的日志存放。
relay-log-index = slave-relay-bin.index

配置是需要重启容器后生效。


docker restart masterMysql
docker restart slaveMysql

查看容器的日志:


docker logs masterMysql 

如果要是重启失败,可以用此操作检查是否刚才的配置文件有出错,利用(3)方式二,修改配置文件,再去启动容器。

(5)查看容器是否设置 Binlog 配置成功。


#进入容器
docker exec -it masterMysql bash
#进入 Mysql
mysql -uroot -p123456 
#查看 Binlog 状态。
show variables like '%log_bin%';
#可以看到 log_bin 是打开的状态,bin_log 的位置在 /var/lib/mysql/master-bin

![file](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/61e52585e4aa4200a8c27204ef690234~tplv-k3u1fbpfcp-zoom-1.image)

(6)查看主库的 Matser 节点的 Binlog 状态,拿到此处的配置的 position 值。


show master status;

若是之前开启的 Binlog 没有使用,需要新生成或是重置清空。


#生成新的 Binlog 日志文件
flush logs; 
#重置清空 Binlog 日志文件
reset master;

可以查看到此处的 日志配置文件是:master-bin.000001,Position 为 334。

4、主库设置一个账号提供从库同步数据使用。此处账号为 slaveMysql。


CREATE USER 'slaveMysql'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slaveMysql'@'%';

5、登录从库的 Mysql 执行,建议还是连接到 Navicat 上运行和查看,服务器上查看格式很乱。

(1)执行同步的主库配置。注意这里的是结尾符号。


change master to master_host='172.18.0.2',
 master_user='slaveMysql',
 master_password='123456',
 master_port=3306, 
 master_log_file='mysql-bin.000001',
 master_log_pos= 334,
 master_connect_retry=30;

参数详解:


change master to master_host=${容器所用IP} 这里需要是同一局域网内,第 2 所得。
master_port Master 的端口号,指的是容器的运行数据库的端口号,不是映射到主机的端口号,第 1 所得。
master_user 设置同步使用的账号, 第 4 所得
master_password 设置同步使用的账密码,第 4 所得
master_log_file 指定了从主库哪个配置文件读取 Binlog 日志,第 3(6) 所得
master_log_pos 从哪个 Position 开始读,即上文中提到的 Position 字段的值,第 3(6) 所得
master_connect_retry 如果连接失败,重试的时间间隔,单位是秒,默认是60秒

(2)打开从库的配置。


start slave;
#停止 slave。
#stop slave;

(3)查看主从同步的状态。 检查主从同步的状态。


show slave status ;

(4)检查错误。

可以通过查看 Last_Io_Error 查看到连接的错误。 排查以下出错的可能。 1>网络不通,端口和局域网 IP 2>用于同步的账户密码正常 3> Master 的 Binlog 文件名称和 Pos 位置错误。

6、测试主从是否正常。

Master 库创建数据库,查看 从库是否也有同步创建成功即可,到此就结束啦。

到此这篇关于Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的文章就介绍到这了,更多相关Docker Binlog mysql主从同步内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯