一、复制概述

Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

1.1 mysql支持的复制类型

  1. 基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。       
  2. 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从mysql5.0开始支持。
  3. 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

1.2 复制的作用

  1. 备份,确保数据安全;做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据的丢失。
  2. 数据分布,提升I/O性能;随着日常生产中业务量越来越大,I/O访问频率越来越高,单机无法满足,此时做多库的存储,有效降低磁盘I/O访问的频率,提高了单个设备的I/O性能。
  3. 读写分离,使数据库能支持更大的并发;在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

1.3 复制的原理

整体上来说,复制有3个步骤:

  1. master将修改(增、删、改)记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events)
  2. slave将master的binary log events拷贝到它的中继日志(relay log)
  3. slave执行中继日志中的事件,将修改的数据同步到它自己的数据中

1.4 复制应用的注意点

从库同步主库数据的过程是串行化的,也就是说主库上并行的操作,在从库上会串行执行。在高并发场景下,从库的数据会比主库慢一些,是有延时的。所以经常出现,刚写入主库的数据可能是读不到的,要过几十毫秒,甚至几百毫秒才能读取到。而且这里还有另外一个问题,如果主库宕机,然后数据恰好还没同步到从库,那么没同步的数据可能在从库上是没有的,有些数据可能就丢失了。所以建议mysql主从同步一般在读远远多于写,而且读的时候一般对数据时效性要求没那么高的应用场景。

mysql实际上有两个机制用来解决主从同步数据库丢失和延时的问题。一个是半同步复制,用来解决主库数据丢失问题;一个是并行复制,用来解决主从同步延时问题。

所谓半同步复制,semi-sync复制,指的就是主库写入binlog日志之后,就会强制将此时数据立即同步到从库,从库将日志写入自己本地的relay log之后,接着会返回一个ack给主库,主库接收到至少一个从库的ack之后才会认为写操作完成了。

所谓并行复制,指的是从库开启多个线程,并行读取relay log中不同库的日志,然后并行重放不同库的日志,这是库级别的并行。

二、配置主从

2.1 同步master数据库的数据到slave数据中

2.1.1 在主节点(192.168.0.58)数据库备份数据

mysqldump -uroot -pmysql --all-databases --lock-all-tables > ./master_db.sql

参数说明:

  • --all-databases :备份所有数据库
  • --lock-all-tables :备份时锁住所有表,防止操作时有数据修改
  • >:导出
  • ./master_db.sql :备份数据存放的位置

2.1.2 在从节点(192.168.0.68)数据库还原数据

使用 scp 将备份文件发送到 从数据库节点

 scp master_db.sql root@192.168.0.68:~

使用命令恢复备份数据

mysql -uroot -p123456 < master_db.sql

2.2 修改master数据库和slave数据库的配置文件

2.2.1 在master数据库配置文件中设置log_bin和server-id,并重启mysql服务

2.2.2 登录master数据库创建用于slave数据库同步数据使用的账号

grant replication slave on *.* to "slave"@"%" identified by "slave";
flush privileges;

2.2.3 获取master数据库的二进制日志信息

File为使用的日志文件名称,Position为使用的文件位置,这两个参数会在配置slave数据库时用到

2.2.4  在slave数据库配置文件中设置server-id,并重启mysql服务

2.2.5 进入slave数据库配置连接master数据库

change master to master_host="192.168.0.58",master_user="slave",master_password="slave",master_log_file="mysql-bin.000004",master_log_pos=154;
flush privileges;

参数说明:

  • master_host:master数据库服务器的ip地址
  • master_user 和 master_password:master中为slave创建的创建
  • master_log_file: 前面查询到的master数据库使用的日志文件名称
  • master_log_pos: 前面查询到的master数据库使用的日志文件位置

2.2.6 开启同步状态

start slave;
show slave status \G; -- \G让查询结果便于查看

2.2.7 验证主从复制

在master数据库创建数据库,并在slave数据库中查看

MySQL主从复制作用和配置的更多相关文章

  1. Mysql主从复制原理及配置

    Mysql主从复制原理及配置 1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其 ...

  2. MySQL主从复制原理及配置过程

    一.Mysql数据库的主从复制原理过程: (多实例的安装请参考我的另一篇文章:https://www.cnblogs.com/Template/p/9258500.html) Mysql的主从复制是一 ...

  3. MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现

    一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  4. MySQL主从复制作用和原理

    一.什么是主从复制?主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 二.主从复制的作用1.做数据的热备,作为后备数据库,主数据库服务器故障后, ...

  5. MySQL 主从复制(实时热备)原理与配置

    MySQL是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失.为了保证MySQL数据库的可靠性,就要会一些提高可靠性的技术.MySQL主从复制可以做到实时热备数据.本文介绍MySQL主从复制原理 ...

  6. MySQL主从复制(Master-Slave)实践

    MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...

  7. mysql主从复制的一些东西的整理

    最近给新上线的项目进行主从结构的搭建,因此整理些有用的东西出来,供作记录: 一.mysql主从复制的一般配置步骤: 1.准备两台数据库环境,或者单台多实例的环境,能够正常的启动和登陆. 2.配置my. ...

  8. mysql主从复制、redis基础、持久化和主从复制

    一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...

  9. MySQL主从复制与读写分离[修改]

    作者:lixiuran 日期:2014年5月2日   备注[本人根据网上资源修改,参考http://www.cnblogs.com/luckcs/articles/2543607.html] 测试环境 ...

随机推荐

  1. 【Java 基础】Java 根据Class获取对象实例

    Spring在代码中获取bean的几种方式 方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法 ...

  2. Java Log4j 配置文件

    ### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制抬 ### log4j.appender.stdout = org.apache.lo ...

  3. 【力扣】337. 打家劫舍 III

    在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为"根". 除了"根"之外,每栋房子有且只有一个" ...

  4. 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程)

    1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...

  5. 你的Redis怎么持久化的

    一.持久化套路 OK,一般我们在生产上采用的持久化策略为 (1)master关闭持久化 (2)slave开RDB即可,必要的时候AOF和RDB都开启 该策略能够适应绝大部分场景,绝大部分集群架构. 为 ...

  6. Nginx中指令

    Rewrite模块 1 return指令 Syntax: return code [text]; return code URL; return URL; Default: - Context: se ...

  7. Tableau如何绘制双柱折线组合图

    一.数据准备如下所示 二.将日期拖拽至列,销售额拖拽至行,结果如下所示 三.右键日期排序-选择手动排序 四.将指标拖拽至标记卡上 五.创建计算字段增长率 SUM(IF YEAR(日期)=2017 th ...

  8. vue3官网介绍,安装,创建一个vue实例

    前言:这一章主要是vue的介绍.安装.以及如何创建一个vue实例. 一.vue介绍 vue3中文官网:建议先自己看官网. https://v3.cn.vuejs.org/ vue是渐进式框架,渐进式指 ...

  9. 异步FIFO总结+Verilog实现

    异步FIFO简介 异步FIFO(First In First Out)可以很好解决多比特数据跨时钟域的数据传输与同步问题.异步FIFO的作用就像一个蓄水池,用于调节上下游水量. FIFO FIFO是一 ...

  10. powerdesigner 连接数据库

    powerdesigner 连接数据库如图: