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

术语:主从复制——master slave replication(M-S模式)。

用途

  • 备份
  • 读写分离
  • 高可用和故障切换(需要做HA)
  • MySQL升级测试

原理

实际上,它的原理思路很简单。MySQL 中有一种日志叫做 bin 日志(二进制日志),这个日志会记录下所有修改了数据库的SQL语句。主从复制的原理其实就是"从"服务器向"主"服务器请求这个日志文件,"主"服务器会把这个 bin 日志复制到"从"服务器上执行一遍,这样"从"服务器上的数据就和"主"服务器上的数据相同了。

流程图:

图解:

  1. 主服务器必须启用二进制日志(log-bin),记录任何修改了数据库数据的事件;
  2. 从服务器开启一个线程(I/O Thread)把自己扮演成 MySQL 的客户端,通过 MySQL 协议,请求主服务器的二进制日志文件中的事件;
  3. 主服务器启动一个线程(Dump Thread),检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主服务器就会从第一个日志文件中的第一个事件一个一个发送给从服务器;
  4. 从服务器接收到主服务器发送过来的数据把它放置到中继日志(relay log)文件中。并记录该次请求到主服务器的具体哪一个二进制日志文件内部的哪一个位置(主服务器中的二进制文件会有多个,其名结尾以6位数递增);
  5. 从服务器启动另外一个线程(SQL Thread ),把 relay log 中的事件读取出来,并在本地再执行一次。

配置过程

主服务器(Master)

  • 启用二进制日志 log-bin;
  • 设置一个全局唯一的 server_id;
  • 提前准备好一个有复制权限(replication slave,replication client)的用户。

从服务器(Slave)

  • 启动中继日志 relay-log;
  • 设置一个全局唯一的 server_id;
  • 使用主服务器提供的有复制权限的用户连接至 Master;
  • 启动复制线程。

配置演示

测试环境

主服务器:192.168.43.75
从服务器:192.168.43.111
mysql版本:mysql-8.0
系统:主 Windows10,从 Windows7

主服务器配置

1.配置 my.ini

log-bin=master-log-bin
server-id=1
innodb-file-per-table=ON

2.重启服务,并进入MySQL

查看主服务器状态信息:

注:这里的文件名和位置值会在后面的配置中用到。

3.给复制用户授权

grant replication slave, replication client on *.* to repl_user@192.168.43.111;

或者对现有的超级用户修改可访问主机IP:
update user set host='%' where user='root';    # '%' 代表所有局域IP

一定要刷新权限:

flush privileges;

主服务器配置完成。

从服务器配置

1.配置 my.ini

log-bin=slave-log-bin
relay-log=relay-log
relay-log-index=relay-log.index
server-id=2
innodb_file_per_table=ON

2.重启并进入MySQL服务(略)

3.用主服务器提供的复制用户连接主服务器

change master to master_host='192.168.43.75',master_port=3306,master_user='repl_user',master_password='123456',master_log_file='master-log-bin.000005',master_log_pos=155;  # 这里的 master 日志文件和位置必须与主服务器当前状态一致!

4.启动复制线程

此时会启动 IO Thread 和 SQL Thread 这两个线程。

(停止复制线程:stop slave)

查看从服务器状态信息:

MySQL主从配置到此完成。

测试

在主服务器上新建一个数据库test:

在从服务器上查看:

测试通过,完美。

常见问题处理

当我们配置好MySQL主从同步时,原本是可以实现主从同步的,但是重启机器后就发现无法同步了。

MySQL Replication 中 slave 机器上有两个关键的线程,死一个都不行,一个是 Slave_IO_Running,一个是 Slave_SQL_Running。一个负责与主机的 IO 通信,一个负责自己的 slave mysql 语句执行。

1)如果是Slave_SQL_Running:No,如图。

解决办法:

> stop slave;
> set global sql_slave_skip_counter=1;
> start slave;

2)如果是Slave_IO_Running:No,如图。

解决办法:
查看主服务器状态:

查看从服务器状态:

找到问题所在:Master_Log_File没有对应。

> stop slave;
> change master to master_log_file='mysql-bin.000026',master_log_pos=0;
> slave start;
> show slave status\G;

得解。

  至此,转载请注明出处。

MySQL 主从复制(实时热备)原理与配置的更多相关文章

  1. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  2. MySQL数据库双机热备------主-主备份配置

    MySQL数据库双机热备------主-主备份配置 实验环境: 主1数据库 192.168.1.1 centos6.5 x86_64 +MySQL5.5.35 主2数据库192.168.1.2  Wi ...

  3. Mysql主从分离与双机热备超详细配置

    一.概述 本例是在Windows环境,基于一台已经安装好的Mysql57,在本机安装第二台Mysql57服务. 读完本篇内容,你可以了解到Mysql的主从分离与双机热备的知识,以及配置期间问题的解决方 ...

  4. Mysql双主热备+LVS+Keepalived高可用操作记录

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  5. nginx笔记5-双机热备原理

    1动静分离演示: 将笔记3的Demo改造一下,如图所示: 改造完成后,其实就是在网页上显示一张图片 现在启动Tomcat运行起来,如图: 可以看到图片的请求是请求Tomcat下的图片. 现在,通过把静 ...

  6. MySQL双主热备问题处理

    1. Slave_IO_Running: No mysql> show slave status\G *************************** 1. row *********** ...

  7. Mysql主从同步的实现原理与配置实战

    1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover ...

  8. Centos7 Mysql主从双机热备的实战记录

    操作系统:centos7 服务器:主:172.19.242.69   从:172.19.242.70 1. 服务器 由于Mysql不同版本之间的(二进制日志)binlog格式可能会不太一样,因此最好的 ...

  9. keepalived+mysql双主热备

    这里使用keepalived实现mysql的双主热备高可用 实验环境: 主机名 IP 系统版本 软件版本 master 192.168.199.6/vip:192.168.199.111 Rhel7. ...

随机推荐

  1. Python 變量 Variable 動態綁定

    為何 Python 變量沒有 Data Type 概念 ? 可以與任意 Data Type 綁定? Python 變量 Variable 與其他程式語言不同之處在於: > variable 不是 ...

  2. 记录:c#实现微信,支付宝扫码支付(一)

    因为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能. 微信支付分为6种支付模式:1.付款码支付,2.native支付,3.jsapi支付,4.a ...

  3. Thymeleaf常用语法:数据延迟加载

    在处理模板时,可以由模板逻辑决定是否加载数据,以提高性能.在Spring Boot控制器中设置数据时,使用LazyContextVariable可以实现这功能. 开发环境:IntelliJ IDEA ...

  4. 如何通过RMAN使用传输表空间迁移到不同的Endian平台 (Doc ID 371556.1)

    How to Migrate to different Endian Platform Using Transportable Tablespaces With RMAN (Doc ID 371556 ...

  5. airtest自动化测试工具的环境安装与使用

    AirtestIDE的下载与安装 AirtestIDE已经帮你集成了所有的环境,自带录制脚本栏,自动生成脚本,自带编辑器还自带模拟器. 下载地址是Airtest的官网:http://airtest.n ...

  6. WPf 带滚动条WrapPanel 自动换行 和控件右键菜单

    原文:WPf 带滚动条WrapPanel 自动换行 和控件右键菜单 技能点包括 WPf 样式的引用 数据的验证和绑定 比较适合初学者 前台: <Window.Resources> < ...

  7. R的环境系统

      r环境概念 环境:用来具体存储对象的地方. 规则1:每一个对象都存储在一个环境当中. 规则2:每一个环境都与一个父环境相连接,构成一个分层的环境系统. 规则3:子环境与父环境的连接是单向的. pa ...

  8. k8s发布文件记录

    1.环境变量配置项 apiVersion: v1 # api版本 kind: ConfigMap # 配置项 metadata: name: common-key-svc # 名字 namespace ...

  9. 【转】Ubuntu 16 安装 python 依赖出现 error: command 'i686-linux-gnu-gcc' failed with exit status 1

    问题 在 Ubuntu 下安装 python 依赖的时候出现以下错误 build/temp.linux-i686-3.5/_openssl.c:498:30: fatal error: openssl ...

  10. LeetCode 599: 两个列表的最小索引总和 Minimum Index Sum of Two Lists

    题目: 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. Suppose Andy and Doris want to cho ...