ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

docker下mysql主从同步配置

2022-08-02 23:35:51  阅读:202  来源: 互联网

标签:slave db master mysql home docker 主从


基础信息:

主机地址:192.168.3.47:3307
从机地址:192.168.3.47:3308

主机配置步骤

  1. 按照之前的文章docker下安装mysql先把mysql镜像拉去下来,这里我用的是5.7.38的版本
  2. 先创建目录/home/docker/mysql_master/,在该目录下创建2个文件夹 confdata
#这个是主机的映射根目录
mkdir -p /home/docker/mysql_master
#这个是主机的配置文件目录
mkdir -p /home/docker/mysql_master/conf
#这个是主机的数据存储目录
mkdir -p /home/docker/mysql_master/data
  1. /home/docker/mysql_master/conf目录下创建如下的配置文件,名称为my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
#这里是主从同步中,主机的配置
#开启binlog日志
log-bin=mysql-bin
#设置主机id,不能与其他主机或从机重复
server-id=1
#设置要记录日志的数据库
binlog-do-db=test
#设置忽略日志的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
#binlog日志保留天数,节省空间
expire-logs-days=7
#自增id从哪个数开始
auto-increment-offset=1
#自增id每次递增的量
auto-increment-increment=2
  1. 配置完毕之后开始创建容器:
docker run -d -p 3307:3306 --name=mysql_master -v /home/docker/mysql_master/conf/:/etc/mysql/conf.d/ -v /home/docker/mysql_master/data/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.38

容器创建完毕之后即启动,此时使用Navicat连接 192.168.3.47:3307 账户密码root/123456提示连接成功。
5. 创建同步用账号
在Navicat连接上执行如下sql创建一个同步专用的用户,这个将来会在从机上面用到:

create user 'repl_docker'@'%' identified by '123456';
grant replication slave on *.* to 'repl_docker'@'%' identified by '123456';
flush privileges

从机配置步骤

  1. 先创建目录/home/docker/mysql_slave/,在该目录下创建2个文件夹 confdata
#这个是从机的映射根目录
mkdir -p /home/docker/mysql_slave
#这个是从机的配置文件目录
mkdir -p /home/docker/mysql_slave/conf
#这个是从机的数据存储目录
mkdir -p /home/docker/mysql_slave/data
  1. /home/docker/mysql_slave/conf目录下创建如下的配置文件,名称为my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
#设置从机id,不能与其他主机或从机重复
server-id=2
#设定要同步哪个数据库,多个可以复制一行继续指定
replicate-do-db=test
#设定忽略哪些数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
#中继日志的名字,复制线程先把远程的变化复制到中继日志然后再执行
relay_log=mysqld-relay-bin
#日志保留天数,节省空间
expire-logs-days=7
#如果从库会作为其他库的主库则需要配置这个,否则可以忽略
log-slave-updates
#忽略同步时遇到的错误,否则出现错误容易导致后续同步终止
slave-skip-errors=all
#自增id从哪个数开始
auto-increment-offset=2
#自增id每次递增的量
auto-increment-increment=2
  1. 配置完毕之后开始创建容器:
docker run -d -p 3308:3306 --name=mysql_slave -v /home/docker/mysql_slave/conf/:/etc/mysql/conf.d/ -v /home/docker/mysql_slave/data/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.38

容器创建完毕之后即启动,此时使用Navicat连接 192.168.3.47:3308 账户密码root/123456提示连接成功。
4. 开启同步

首先在从机数据库上面创建与主机数据库名称和配置相同的数据库,并把主机数据库数据导入到从机,导入期间主机不要改变数据,这一步特别重要

然后用Navicat连接到主库并执行如下sql获取结果:

show master status;

然后在Navicat连接从库并执行如下sql:

change master to 
master_host='192.168.3.47',
master_port=3307,
master_user='repl_docker',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=1542;

上面的值根据字母意思可以猜出来,其中最后2个 master_log_filemaster_log_pos 来自于上面从主库上面查到的值,这里请特别注意一下。
执行完毕之后接着在从机上面启动同步,执行如下sql文:

start slave;

此时可以执行如下sql文查看同步是否启动成功:

show slave status;

试验

在主机上面创建一个表 并插入几条记录 可以看一下从机是否成功同步

标签:slave,db,master,mysql,home,docker,主从
来源: https://www.cnblogs.com/bcde/p/16545525.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有