美文网首页
MySQL之主从复制

MySQL之主从复制

作者: 张磊_e325 | 来源:发表于2021-07-30 17:01 被阅读0次

docker搭建mysql主从复制

一、下载镜像

docker pull mysql:5.7.32

二、创建目录及配置文件

$ mkdir /trs/mysql/
$ cd /trs/mysql/
$ mkdir master slave
$ cd /trs/mysql/master
$ mkdir data logs
$ cd /trs/mysql/slave
$ mkdir data logs
# 进入mater目录创建配置文件 my.cnf
$ vi my.cnf
--------------------------------------
[mysqld]
# [必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配(每个mysql节点必须不一样)
server-id=1
# [必须]启用二进制日志
log-bin=mysql-bin
# 进入mater目录创建配置文件 my.cnf
$ vi my.cnf
--------------------------------------
[mysqld]
server-id=2
log-bin=mysql-bin

三、启动容器

master

sudo docker run -p 3316:3306 --name mysql_master \
-v /trs/mysql/master:/etc/mysql \
-v /trs/mysql/master/logs:/var/log/mysql \
-v /trs/mysql/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.32

slave

sudo docker run -p 3317:3306 --name mysql_slave \
-v /trs/mysql/slave:/etc/mysql \
-v /trs/mysql/slave/logs:/var/log/mysql \
-v /trs/mysql/slave/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.32

查看结果

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS                                     NAMES
22c4c9e03476        mysql:5.7.32        "docker-entrypoint.s…"   7 seconds ago       Up 6 seconds                    33060/tcp, 0.0.0.0:3317->3306/tcp         mysql_slave
723646be27ef        mysql:5.7.32        "docker-entrypoint.s…"   9 minutes ago       Up 9 minutes                    33060/tcp, 0.0.0.0:3316->3306/tcp         mysql_master

四、授权

因为从节点需要读取主节点的bin_log日志,所以要在主节点为从节点开放权限

1、在master节点创建主从复制专用用户并赋权

# 进入容器
$ docker exec -it mysql_master bash 
# 连接mysql
root@723646be27ef:/# mysql -uroot -p123456
# 创建rep用户,任意ip访问,密码:test@A123456
mysql> create user 'rep'@'%' identified by 'test@A123456';
# 授权rep权限
mysql> grant replication slave,replication client on *.* to 'rep'@'%'; 

2、在slave测试

注意slave容器并不能直接连到宿主机,所以要通过docker0网桥转发,docker0虚拟网桥的默认ip是172.17.0.1

如果使用172.17.0.1还是连不通,可以尝试关掉防火墙

# 进入容器
$ docker exec -it mysql_slave bash 
# 连接mysql,连接上说明授权成功
root@723646be27ef:/# mysql -h 172.17.0.1 -P 3316 -u'rep' -p'test@A123456'

五、配置主从同步

1、查看master节点当前bin-log日志的文件名及位置

# 进入容器
$ docker exec -it mysql_master bash 
# 连接mysql
root@723646be27ef:/# mysql -uroot -p123456
# 查看bin-log
mysql> show master status;

到这里为止,主库千万不要再做任何操作,防止状态改变

2、在slave节点配置主从复制

# 进入容器
$ docker exec -it mysql_slave bash 
# 连接mysql
root@723646be27ef:/# mysql -uroot -p123456
# **配置主从同步**
mysql> change master to
    master_host='172.17.0.1',
    master_port=3316,
    master_user='rep',
    master_password='test@A123456',
    master_log_file='mysql-bin.000004',
    master_log_pos=613;

3、开始主从复制

# 开始主从复制
mysql> start slave;
# 查看状态 以下两项都为Yes,说明成功。
mysql> show slave status\G;
-----------
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
-----------

4、(如果成功不需要)错误情况

  • connect:

检查ip端口用户名密码是否正确

ip是否能ping通,mysql是否允许远程链接等

  • no:

检查bin-log 文件名或者位置是否正确

状态失败后,执行stop slave;然后修改相应的配置后,重新start slave;

六、测试

在master上建表,查看从库是否出现同样的表

在master上执行增删改查,查看从库是否执行相应的操作

参考文章

使用docker 实现MySQL主从同步/读写分离 - 西柚柠檬 - 博客园 (cnblogs.com)

MySQL主从同步详解与配置 - 知乎 (zhihu.com)

相关文章

  • MySQL如何配置主从复制,如何修复主从复制出现的异常?

    MySQL如何配置主从复制,如何修复主从复制出现的异常? 一、什么是Mysql主从复制 MySQL主从复制是其最重...

  • MySQL-主从复制&读写分离

    零、本文纲要 一、MySQL主从复制 主从复制 主从复制过程 配置主从复制 二、MySQL读写分离 读写分离 Sh...

  • Mysql 主从复制

    Mysql 主从复制 MySQL Replication 主从复制(也称 AB 复制)允许将来自一个MySQL数据...

  • 主从复制 & MHA

    一,mysql主从复制 (1)场景一(主从复制 _ 全新环境下) (2)场景二(主从复制 _ mysql已经使用一...

  • mysql主从复制

    构建MySQL主从复制 MySQL的主从复制和mysql的读写分离两者有着紧密联系,数据的读写分离实在主从复制的基...

  • Spring Data JPA 使用主从数据源

    Mysql 配置主从复制 参考:Mysql主从复制-半同步复制[https://www.jianshu.com/p...

  • MySQL集群篇

    1 集群之主从复制 1.1 主从复制概述 MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群...

  • 微服务MySQL改造

    MySQL 主从复制之半同步模式MYSQL半同步概念:一般情况下Mysql默认复制模式为异步 异步复制模式 主服务...

  • 深度探索MySQL主从复制原理

    概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什...

  • 【转】MySQL 8.0复制改进

    1 - MySQL主从复制模型 我们从最基本的主从复制模型开始说起,下图是最经典的MySQL主从复制架构图: My...

网友评论

      本文标题:MySQL之主从复制

      本文链接:https://www.haomeiwen.com/subject/vkrcvltx.html