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

同一服务器模拟利用 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主从同步内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL主从同步中的server-id示例详解

    前言 当我们搭建MySQL集群时,自然需要完成数据库的主从同步来保证数据一致性.而主从同步的方式也分很多种,一主多从.链式主从.多主多从,根据你的需要来进行设置.但只要你需要主从同步,就一定要注意server-id的配置,否则会出现主从复制异常. 在控制数据库数据复制和日志管理中,有两个重要的配置:server-id和server-uuid,他们会影响二进制日志文件记录和全局事务标识. server-id配置 当你使用主从拓扑时,一定要对所有MySQL实例都分别指定一个独特的互不相同的serve

  • Mysql数据库的主从同步配置

    目录 Mysql主从同步配置 1.安装两个 mysql 2.编写mysql配置文件 3.初始化数据 4.其他mysql 相关命令 Mysql主从同步配置 配置准备: 需要两个数据库 mysql 可视化工具,当然使用用命令行也可以 我这里演示使用 docker 启动两个 mysql 容器, 你也可以安装两个 mysql 前提版本一致 1.安装两个 mysql 创建 msyql 挂载目录 [root@localhost /]# mkdir -p /opt/docker/mysql1/conf/ [r

  • MySQL主从同步原理及应用

    目录 1.主从同步原理 主从同步架构图(异步同步) 主从同步流程(异步同步) 什么是binlog? binlog的3种格式 binlog格式对比 主从同步的2种方式 主从同步流程(半同步) 半同步适用场景 2.主从同步应用场景 1.主从同步原理 主从同步架构图(异步同步) 这是最常见的主从同步架构 主从同步流程(异步同步) 主库把数据变更写入binlog文件 从库I/O线程发起dump请求 主库I/O线程推送binlog至从库 从库I/O线程写入本地的relay log文件(与binlog格式一

  • 解决MySQL主从数据库没有同步的两种方法

    目录 解决MySQL主从数据库没有同步的两种方法 一.不同步情况 二.解决方案 1.先进入主库,进行锁表,防止数据写入 2.进行数据备份 3.查看master 状态 4.把mysql备份文件传到从库机器,进行数据恢复 5.停止从库的状态 6.然后到从库执行mysql命令,导入数据备份 7.设置从库同步 8.重新开启从同步 9.查看同步状态 10.回到主库并执行如下命令解除表锁定. 解决MySQL主从数据库没有同步的两种方法 工作的过程中发现Mysql的主从数据库没有同步 一.不同步情况 Mast

  • MySQL数据库的主从同步配置与读写分离

    使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3.将主服务器上的数据复制到从服务器上,保护数据免受意外的损失. 环境描述: 新企业要搭建架构为主从复制的mysql数据库. 主服务器(mysql-master):IP地址:192.168.48.128,mysql已安装,没有用户数据. 从服务器(mysql-slave):IP地址:192.168.48

  • MySQL数据库主从同步实战过程详解

    本文实例讲述了MySQL数据库主从同步实战过程.分享给大家供大家参考,具体如下: 接上一篇:MySQL数据库入门之备份数据库 安装环境说明 系统环境: [root@~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@~]# uname -r 2.6.32-431.el6.x86_64 数据库: 由于是模拟环境,主从库在同一台服务器上,服务器IP地址192.168.1.7 主库使用3306端口 从库使用3307端口 数据库数据目

  • 一文带你了解Mysql主从同步原理

    目录 Mysql 主从同步原理简析 1.什么是主从 2.为什么要搞主从呢? 3.如何实现主从同步呢? 4.mysql 主从同步的原理 Mysql 主从同步原理简析 在开始讲述原理的情况下,我们先来做个知识汇总, 究竟什么是主从,为什么要搞主从,可以怎么实现主从,mysql主从同步的原理 1.什么是主从 其实主从这个概念非常简单 主机就是我们平常主要用来读写的服务,我们称之为master(主人.主宰) 从机就是主机进行的一个扩展,他一般不会主动用来读写,我们称之为slave( [sleɪv] 奴隶

  • MySQL 主从同步,事务回滚的实现原理

    BinLog BinLog是记录所有数据库表结构变更(例如create.alter table)以及表数据修改(insert.update.delete)的二进制日志,主从数据库同步用到的都是BinLog文件.BinLog日志文件有三种模式. STATEMENT 模式 内容:binlog 只会记录引起数据变更的 sql 语句 优势:该模式下,因为没有记录实际的数据,所以日志量和 IO 都消耗很低,性能是最优的 劣势:但有些操作并不是确定的,比如 uuid() 函数会随机产生唯一标识,当依赖 bi

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

    同一服务器模拟利用 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

  • mysql主从同步快速设置方法

    安装环境 centos 5.4 mysql 5.1.xx 采用rpm直接安装 xtrabackup 1.2.22 采用rpm直接安装 复制代码 代码如下: [mysqld] server-id = 1 log-bin innodb_flush_log_at_trx_commit=1 sync_binlog=1 datadir=/var/lib/mysql character-set-server=utf8 init_connect='SET NAMES utf8' 设定了默认字符集为utf8,可

  • 详解SpringBoot项目docker环境运行时无限重启问题

    可能是我开始处理问题的思路不对,现在描述问题可能也有点乱,但是里面可能的处理方式希望能帮到遇到我这个坑的人 描述:springboot项目,docker镜像里面运行,看docker的日志,项目启动成功后,隔了一分钟左右他就自动重新启动,然后造成网站接口访问的时候nginx报502 gateway啥的,有两台服务器,一个是文件服务器,运行了很简单的上传下载文件的代码以及验证token,另一台运行了java应用,两台服务器都在一次更新项目的镜像,运行过后遇到了这个问题,很奇怪. 然后我将项目弄成ja

  • MySQL修改my.cnf配置不生效的解决方法

    本文实例讲述了MySQL修改my.cnf配置不生效的解决方法.分享给大家供大家参考,具体如下: 一.问题: 修改了 my.cnf 配置文件后,却不生效,这是怎么回事? 二.原因: 我们注意到,这里只说了修改 my.cnf,并没有说清楚其绝对路径是哪个文件.也就是说,有可能修改的不是正确路径下的my.cnf文件. 在MySQL中,是允许存在多个 my.cnf 配置文件的,有的能对整个系统环境产生影响,例如:/etc/my.cnf.有的则只能影响个别用户,例如:~/.my.cnf. MySQL读取各

  • centos下mysql主从同步快速设置步骤分享

    安装环境 centos 5.4 mysql 5.1.xx 采用rpm直接安装 xtrabackup 1.2.22 采用rpm直接安装 1. Master:/etc/my.cnf [mysqld] server-id = 1 log-bin innodb_flush_log_at_trx_commit=1 sync_binlog=1 datadir=/var/lib/mysql character-set-server=utf8 init_connect='SET NAMES utf8'设定了默认

  • 在Windows中配置Rsync同步文件的方法

    Rsync是一款不错的文件免费同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限.时间.软硬链接.第一次同步时 rsync 会复制全部内容,下次只传输修改过的文件部分.传输数据过程中可以实行压缩及解压缩操作,减少带宽流量.支持scp.ssh及直接socket方式连接,支持匿名传输.支持Linux,Window平台.写本文的时候,window版最新版为4.0.5版 官网:http://rsync.samba.org/ Linux版下载:http://rsync.samba.org/

  • 在MySQL中修改密码及访问限制的设置方法详解

    由于其源码的开放性及稳定性,且与网站流行编 挥镅 PHP的完美结合,现在很多站点都利用其当作后端数据库,使其获得了广泛应用.处于安全方面的考虑,需要为每一用户赋于对不同数据库的访问限制,以满足不同用户的要求.下面就分别讨论,供大家参考.    一.MySQL修改密码方法总结  首先要说明一点的是:一般情况下,修改MySQL密码是需要有mysql里的root权限的,这样一般用户是无法更改密码的,除非请求管理员帮助修改.    方法一    使用phpMyAdmin  (图形化管理MySql数据库的

  • 使用Docker部署MySQL 5.7&8.0主从集群的方法步骤

    > 部署 MySQL 5.7 集群 master & slave (仅测试用) 镜像版本 5.7 1.创建 overlay 网络 docker network create --driver overlay common-network --attachable 2.编辑两个配置文件 master.cnf 与 slave.cnf !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] log-b

  • Docker中运行nginx并挂载本地目录到镜像中的方法

    1 从hup上pull镜像 docker pull nginx 2 创建将要挂载的目录 mkdir -p /data/nginx/{conf,conf.d,html,logs} 3 先要有配置文件才能启动容器 3.1 vim /data/conf/nginx.conf user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_co

  • Linux mysql命令安装允许远程连接的安装设置方法

    而这些东西,正是新手很困惑的地方.一下是我的安装笔记,在Centos虚拟机上安装成功.中文的参考:http://xieyu.blog.51cto.com/213338/59749英文的参考 How to Install MySQL 5.0 on Linux,How to Install PHP 5 on Linux ,How to Install Apache 2 on Linux Linux mysqlapache php 安装过程.将apache ,mysql ,php 的tar.gz 文件

随机推荐