目录

准备

基于bin-log文件位置的主从复制

基于事务的主从复制


Mysql复制可以将一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。 默认情况下,复制是异步的,slave不需要永久连接以接收来自主站的更新。 根据配置,您可以复制数据库中的所有数据库,所选数据库甚至选定的表。

MySQL中复制的优点包括:

横向扩展解决方案 - 在多个从站之间分配负载以提高性能。 在此环境中,所有写入和更新都必须在主服务器上进行。 但是,读取可能发生在一个或多个从站上。 该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。
数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。
分析 - 可以在主服务器上创建实时数据,而信息的分析可以在从服务器上进行,而不会影响主服务器的性能。
远程数据分发 - 您可以使用复制为远程站点创建数据的本地副本,而无需永久访问主服务器。

MySQL 5.7支持不同的复制方法。 传统方法基于从主机的二进制日志复制事件,并要求其中的日志文件和位置在主机和从机之间同步。 基于全局事务标识符(GTID)的较新方法是事务性的,因此不需要处理这些文件中的日志文件或位置,这极大地简化了许多常见的复制任务。 只要在主服务器上提交的所有事务也已应用于从服务器,使用GTID进行复制可确保主服务器和从服务器之间的一致性。

MySQL中的复制支持不同类型的同步。原始类型的同步是单向异步复制,其中一个服务器充当主服务器,而一个或多个其他服务器充当从服务器。这与作为NDB Cluster特征的同步复制形成对比。在MySQL 5.7中,除了内置的异步复制之外,还支持半同步复制。使用半同步复制,在返回执行事务的会话之前对主块执行提交,直到至少一个从服务器确认已接收并记录事务的事件为止。 MySQL 5.7还支持延迟复制,使得从属服务器故意滞后于主服务器至少一段指定的时间。

MySQL有两种核心类型的复制格式:基于语句的复制(SBR),复制整个SQL语句,以及基于行的复制(RBR),它仅复制已更改的行。 还可以使用第三种混合复制(MBR)。

下面介绍如何搭建不同类型的复制环境,包括配置,设置,操作等。

准备

首先根据《docker部署Mysql》部署两个docker容器,容器名称分别命名为mysql,mysql_slave,也可以命名为其他名称,根据跟人喜好,只要能区分mysql容器,否则会导致混乱。将mysql作为主节点,mysql_slave作为从节点,开始搭建mysql主从节点集群。

基于bin-log文件位置的主从复制

基本原理是,MySQL主节点(数据源)将更新和更改作为“事件”写入bin-log,bin-log根据记录的数据库更改以不同的日志记录格式存储。 从节点配置为从主站读取二进制日志,并在从节点的本地数据库上执行二进制日志中的事件,达到数据复制的目的。

默认情况下,所有从节点复制主节点的所有执行事件,从节点来确定那些时间要执行,如果没有特别配置指定,从节点会执行所有的事件,如果需要,就需要指定从节点同步并执行部分数据库或者表写事件。

不能配置主节点只记录特定事件。

MySQL同时也支持多个slave节点同步一个主节点不同的数据,断开同步,回复同步。

配置基于bin-log文件位置的主从复制,主要配只有,1,主从服务器都打开bin-log;2,主从服务都设置唯一的server_id;3,主节点上创建同步账号,并授权。4,从节点上使用change master to语句配置主节点的IP或域名,端口,同步账号,同步账号密码,binlog名称,binlog位置这些信息。配置

1,mysql容器修改配置

在mysql容器的配置文件my.cnf中[mysqld]配置下增加

[mysqld]
log-bin=mysql-bin
server-id=1

2,mysql_slave容器修改配置

在mysql_slave容器的配置文件my.cnf中[mysqld]配置下增加

[mysqld]
log-bin=mysql-bin
server-id=2

3,重新启动mysql容器和mysql_slave容器

[root@ecs-7bc6-0001 ~]# docker restart {containerId}
[root@ecs-7bc6-0001 ~]# docker restart {containerId}

4,mysql上创建同步账号并授权

登入mysql容器

docker exec -it {containerId} /bin/bash

登入mysql中,创建账号backup并且授权。

mysql> CREATE USER 'backup'@'%.example.com' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%.example.com';
mysql> flush privileges;

5,mysql上通过以下命令锁定提交写操作,只能读不能写。且记录binlog文件名称和位置。

mysql> FLUSH TABLES WITH READ LOCK;

保持执行锁操作的客户端运行,用来让锁保持有效,因为客户端推出后锁就会释放。

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     2198 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

如果主库已经有数据了,需要同步数据,需要将数据导出再导入到从库中去,推荐使用mysqldump,简单有效。

6,mysql_slave上增加配置,并启动

mysql> CHANGE MASTER TO->     MASTER_HOST='{masterip}',->     MASTER_USER='{master同步用户名称}',->     MASTER_PASSWORD='{master同步用户密码}',->     MASTER_LOG_FILE='{binlog文件名称}',->     MASTER_LOG_POS={binglog文件位置};
mysql> start slave;
mysql> show slave status\G;

出现

Slave_IO_Running: Yes
           Slave_SQL_Running: Yes

则基于binlog位置的主从同步成功。

7,测试

再mysql容器的master数据库创建数据库,创建表,插入数据。如下:

mysql> create database test1;
Query OK, 1 row affected (0.01 sec)mysql> use test1;
Database changed
mysql> create table test1(name varchar(20));
Query OK, 0 rows affected (0.03 sec)mysql> insert into test1 values('apple'),('banana');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

发现从数据库中也有了主数据库创建的数据库,表以及插入的数据,如下:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| test1              |
+--------------------+
6 rows in set (0.00 sec)mysql> use test1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> select * from test1;
+--------+
| name   |
+--------+
| apple  |
| banana |
+--------+
2 rows in set (0.00 sec)

基于事务的主从复制

基于事务的主从复制,使用全局事务标识(GTID),识别和跟踪每个事务。在master节点上提交,有slave节点识别跟踪每个事务,使用事务,就不需要指定binlog的文件名称和位置,只要master节点的事务都在slave节点执行,即可保证数据一致性。基于事务的模式下,又可以分为基于语句的复制和基于行的复制,官方推荐是由基于行的复制。

1,mysql容器修改配置,两个容器都修改配置,增加配置

gtid_mode=ON
enforce-gtid-consistency=true
binlog_format=row

2,重新启动两个docker容器

3,mysql master上创建同步账号并授权。

4,mysql_slave同步。

登入mysql_slave命令行客户端执行。

mysql> CHANGE MASTER TO>     MASTER_HOST = host,>     MASTER_PORT = port,>     MASTER_USER = user,>     MASTER_PASSWORD = password,>     MASTER_AUTO_POSITION = 1;
mysql> start slave;

5,查看slave状态

mysql> show slave status\G;

出现

Slave_IO_Running: Yes
           Slave_SQL_Running: Yes

则同步成功。

(^_^)

Docker部署MySQL5.7主从复制结构相关推荐

  1. Docker实践(五)docker部署MySQL5.7

    目录 1,安装 2,选择镜像 3,下载镜像. 4,准备部署 5,创建并启动 6,测试 使用docker容器部署mysql5.7 1,安装 没有docker,首先安装docker,参照Docker简单实 ...

  2. CentOS使用docker部署mysql5.7、可使用navicat连接mysql服务,以及主从同步配置

    查找待拉取的镜像 mysql镜像地址:https://hub.docker.com/_/mysql?tab=tags 我使用的是5.3.37的版本:docker pull mysql:5.7.37 d ...

  3. ubantu18.04使用docker部署mysql5.7及在宿主机登录容器内mysql

    1.docker切换成国内源 cd /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors ...

  4. 史上最详细Docker部署Mysql主从复制,带每一步骤图!!!

    没有夸大标题哈,能够成功的,实测后发文 本文主要讲怎么用Docker部署Mysql的主从复制,看起来很长,实际非常简单的,看一遍,立马就能懂的. 直接CV也能搭建起来,莫慌. 我们一起加油!!! 地点 ...

  5. docker部署微服务项目

    上次有人说部署单个springboot项目和ssm写的非常的简单可以写一篇docker部署微服务的结构的文章的吗 安排 什么是微服务? 微服务架构是一种将单个应用程序作为一套小型服务开发的方法,每种应 ...

  6. 基于Docker部署Mysql主从复制-实战详解篇

    一.前言 MySQL的主从复制详细讲解,根据网上教程也踩了很多坑,浪费了一些时间 ,特地全面的梳理下基于docker构建的mysql主从复制构建过程.遇到的问题以及提供安装包样例等 希望一篇文章足以解 ...

  7. 通过 Docker 部署 Redis 6.x 集群

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 作者:超级小豆丁 http: ...

  8. Docker 部署不香吗?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 来源:22j.co/ef5f 目录 docker介绍 安装docker U ...

  9. Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群

    Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群 前言 建议 官方译文 什么是 Sentinel? Sentinel 优点 Redis 配置文件 maste ...

最新文章

  1. 60日均线操盘的三种入场点形态
  2. 玩转iOS开发:《iOS设计模式 — 单例模式》
  3. 奥迪坚SVRM(Screen-Voice Recording Manager)录屏软件正式发布
  4. python实时显示温度变化_python实时温度绘制
  5. 笨方法“学习python笔记之元组(tuple)
  6. 【Codeforces Round #450 (Div. 2) B】Position in Fraction
  7. ssis包部署到数据库_使用SSIS包将行标题和数据添加到平面文件中
  8. 学习CGI之前,需要配置阿帕奇---windows
  9. python基础(1)——简介与安装
  10. 三调专题(一)宗地四至提取的量化算法及FME实现
  11. 软考系统集成项目管理工程师 | 计算题公式汇总
  12. 电脑主板线路连接图解_台式机电源线接法图解(电脑主板接线图解高清图)
  13. Vscode中报错 CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
  14. MEDICI仿真NMOS器件晶体管语法笔记
  15. 淘宝标题优化技巧有哪些禁区注意事项
  16. ARM到底是冯诺依曼结构还是哈佛结构?
  17. LQ_IM68A硅麦测试报告
  18. JAVA 技术方向赏金任务-快递 E 栈训练任务
  19. IDC 基础设施包括哪些,它们的用途?
  20. 配置Office365企业版应用(更新)

热门文章

  1. 【转】ASP.NET MVC生命周期介绍
  2. 污水处理中php是什么药剂,污水处理中需要用到哪些药剂?
  3. sqlbulkcopy能用于mysql吗_张家界不锈钢螺旋管能用于造船工业吗?
  4. python串口通信_python 读取串口数据的示例
  5. python从某个字符串开始截取_Python字符串的截取
  6. c语言实验报告7,C语言实验报告7.doc
  7. 国风这么火,少不了古风建筑PNG格式
  8. 设计灵感|色彩叠加在海报设计中的妙用!
  9. APPLE苹果电子设备模型样机|展示你的专业设计最佳选择
  10. NEW RToax logo