iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL主从复制详解
  • 241
分享到

MySQL主从复制详解

MySQL主从复制详解 2017-03-30 14:03:47 241人浏览 无得
摘要

①主服务器将所有数据和结构更改记录到二进制日志中。 ②从属服务器从主服务器请求该二进制日志并在本地应用其内容。 ③io:请求主库,获取上一次执行过的新的事件,并存放到relaylog ④sql:从relaylog中将sql语句翻译给从

MySQL主从复制详解

①主服务器将所有数据和结构更改记录到二进制日志中。

②从属服务器从主服务器请求该二进制日志并在本地应用其内容。

io:请求主库,获取上一次执行过的新的事件,并存放到relaylog

sql:从relaylog中将sql语句翻译给从库执行

二.主从复制原理

1.主从复制的前提

①两台或两台以上的数据库实例

②主库要开启二进制日志

③主库要有复制用户

④主库的server_id和从库不同

⑤从库需要在开启复制功能前,要获取到主库之前的数据(主库备份,并且记录binlog当时位置)

⑥从库在第一次开启主从复制时,时必须获知主库:ip,port,user,passWord,logfile,pos

⑦从库要开启相关线程:IO、SQL

⑧从库需要记录复制相关用户信息,还应该记录到上次已经从主库请求到哪个二进制日志

⑨从库请求过来的binlog,首先要存下来,并且执行binlog,执行过的信息保存下来

2.主从复制涉及到的文件和线程

主库:

①主库binlog:记录主库发生过的修改事件
②dump thread:给从库传送(TP)二进制日志线程

从库:

①relay-log(中继日志):存储所有主库TP过来的binlog事件
②master.info:存储复制用户信息,上次请求到的主库binlog位置点
③IO thread:接收主库发来的binlog日志,也是从库请求主库的线程
④SQL thread:执行主库TP过来的日志

主从复制原理图

大前提条件:做主从复制之前,一定要保证主库和从库之间数据一致性

①通过change master to语句告诉从库主库的ip,port,user,password,file,pos

从库通过start slave命令开启复制必要的IO线程和SQL线程

从库通过IO线程拿着change master to用户密码相关信息,连接主库,验证合法性

从库连接成功后,会根据binlog的pos问主库,有没有比这个更新的

主库接收到从库请求后,比较一下binlog信息,如果有就将最新数据通过dump线程给从库IO线程

从库通过IO线程接收到主库发来的binlog事件,存储到tcp/IP缓存中,并返回ACK更新Http://master.info

将TCP/IP缓存中的内容存到relay-log中

SQL线程读取http://relay-log.info,读取到上次已经执行过的relay-log位置点,继续执行后续的relay-log日志,执行完成后,更新http://relay-log.info

三、主从复制搭建实战

主库操作:

1)修改配置文件

#编辑Mysql配置文件 [root@db01 ~]# vim /etc/my.cnf #在mysqld标签下配置 [mysqld] #主库server-id为1,从库不等于1 server_id =1 #开启binlog日志 log_bin=mysql-bin

2)创建主从复制用户

#登录数据库 [root@db01 ~]# mysql -uroot -poldboy123 #创建rep用户 mysql> grant replication slave on *.* to rep@"10.0.0.%" identified by "123";

从库操作:

1)修改配置文件

#修改db02配置文件 [root@db02 ~]# vim /etc/my.cnf #在mysqld标签下配置 [mysqld] #主库server-id为1,从库不等于1, 但从库之间的server_id可以相等 server_id =5 #重启mysql [root@db02 ~]# /etc/init.d/mysqld restart #记录主库binlog及位置点 [root@db01 ~]# mysql -uroot -poldboy123 mysql> show master status; | mysql-bin.000002 | 317 #登陆数据库 [root@db02 ~]# mysql -uroot -poldboy123 #执行change master to 语句 mysql> change master to -> master_host="10.0.0.51", -> master_user="rep", -> master_password="123", -> master_log_file="mysql-bin.000002", -> master_log_pos=317, -> master_port=3306; mysql> start slave; mysql> show slave statusG Slave_IO_Running: Yes Slave_SQL_Running: Yes

四.主从复制基本故障处理

IO线程报错解决思路

# IO线程报错: 解决思路: 1.网络 [root@db02 ~]# ping 10.0.0.51 1)硬件层,路由,交换机,网络设备 2)网线 3)安全组规则 4)插错网线口 2.端口 [root@db02 ~]# telnet 10.0.0.51 3306 #关闭防火墙 systemctl stop firewalld #防火墙添加允许mysql端口 firewalld-cmd --add-service=mysql firewalld-cmd --add-port=3306/tcp 3.用户名 mysql> grant replication slave on *.* to rep@"%" identified by "123"; 4.密码,先登录测试 [root@db03 data]# mysql -urep -p123 -h10.0.0.51 如果报错 #rep@"db03",需在参数,跳过反向解析 vim /etc/my.cnf skip_name_resolve #搭建主从时,用户名、密码、主机域、端口一定要一致。 change master to master_host="10.0.0.51",#1 master_user="rep",#2 master_password="123",#3 master_log_file="mysql-bin.000003", master_log_pos=169853, master_port=3306;

SQL线程报错

处理方法一:

#临时停止同步 mysql> stop slave; #将同步指针向下移动一个(可重复操作) mysql> set global sql_slave_skip_counter=1; #开启同步 mysql> start slave;

处理方法二:

#编辑配置文件 [root@db01 ~]# vim /etc/my.cnf #在[mysqld]标签下添加以下参数,把线程号添加到配置文件 slave-skip-errors=1032,1062,1007

但是方法一、方法二都是有风险存在的,只是跳过错误,不能从根本上解决问题

处理方法三:

1)重新备份数据库,恢复到从库
2)给从库设置为只读

#在命令行临时设置 set global read_only=1; #在配置文件中永久生效 read_only=1

注意:登录用户如果是all权限,包含了super超级权限,还是可以进行操作的

  1. all 权限,即使配置文件设置了只读,还是都可以操作的。
  2. 不加all权限。哪怕给他指定select,insert, delete ,create 权限,都是不能操作,只能只读的。

例如:

#设置配置文件永久生效 [root@db03 ~]# vim /etc/my.cnf read_only=1 #重启 [root@db03 ~]# /etc/init.d/mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL. SUCCESS! #查看 mysql> show variables like "read_only"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.00 sec)

1. all 权限

[root@db03 ~]# mysql mysql> grant all on *.* to rea@"%" identified by "123"; Query OK, 0 rows affected (0.00 sec) [root@db03 ~]# mysql -urea -p123 -h 10.0.0.53 mysql> create database aaa; Query OK, 1 row affected (0.01 sec)

2.不是all权限

mysql> grant select,create,delete,insert on *.* to rea1@"%" identified by "123"; Query OK, 0 rows affected (0.00 sec) [root@db03 ~]# mysql -urea1 -p123 -h10.0.0.53 mysql> create database bbb; ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement mysql> drop database test; ERROR 1290 (HY000): The MySQL Server is running with the --read-only option so it cannot execute this statement ...

五.延时从库

普通的主从复制可能存在不足

1)逻辑损坏怎么办?
2)不能保证主库的操作,从库一定能做
3)高可用?自动failover?
4)过滤复制

企业中一般会延时3-6小时

延时从库配置方法

#停止主从 mysql>stop slave; #设置延时为180秒 mysql> change master to master_delay= 180; #开启主从 mysql>start slave; #查看状态 mysql> show slave statusG SQL_Delay: 60 #或者做主从的时候直接指定延时 change master to master_host="10.0.0.51", ... master_delay=3600; 3.延时从库停止方法 #停止主从 mysql> stop slave; #设置延时为0 mysql> change master to master_delay = 0; #开启主从 mysql> start slave;

企业案例:

总数据量级500G,正常备份去恢复需要1.5-2小时

1)配置延时3600秒

mysql>change master to master_delay = 3600;

2)主库

drop database db;

3)怎么利用延时从库,恢复数据?

提示:
1、从库relaylog存放在datadir目录下
2、mysqlbinlog 可以截取relaylog内容
3、show relay log events in "db01-relay-bin.000001";

处理的思路:

1)停止SQL线程

2)截取relaylog到误删除之前点

  • http://relay-log.info 获取到上次运行到的位置点,作为恢复起点
  • 分析relay-log的文件内容,获取到误删除之前position

模拟故障处:

1)关闭sql

2)模拟数据

3)开启从库延时3600s

4)破坏,模拟删库故障。(以下步骤在5分钟内操作完成。)

5)从库,关闭SQL线程

6)截取relay-log

恢复relay.sql

方法一:取消从库身份,恢复数据,从库当主库

方法二:从库导出来的数据传给主库,恢复数据

模拟环境

1.主库

#一直写数据 [root@db01 ~]# sh mysqldump.sh #全备 [root@db01 ~]# mysqldump -uroot -p1 -A --triggers -R --master-data=2 --single-transaction |gzip >/backup/full.gz Warning: Using a password on the command line interface can be insecure. #查看 [root@db01 ~]# ll /backup/ total 376 -rw-r--r-- 1 root root 384381 Nov 17 09:22 full.gz #查看mysql-bin和起点 [root@db01 ~]# zcat /backup/full.gz |head -25 -- CHANGE MASTER TO MASTER_LOG_FILE="mysql-bin.000001", MASTER_LOG_POS=517; #scp到对端 [root@db01 ~]# scp /backup/dbdb.sql 172.16.1.54:/tmp [root@db01 ~]# mysql -uroot -p1 mysql> grant replication slave on *.* to rep@"%" identified by "123";

从库

#准备初始化环境 [root@db04 ~]# /etc/init.d/mysqld stop [root@db04 ~]# rm -fr /application/mysql/data; # at 45118 #191117 13:38:58 server id 1 end_log_pos 88964 CRC32 0x905241e7 Query thread_id=2671 exec_time=0 error_code=0 SET TIMESTAMP=1573969138; drop database db1 #截取这段数据导出并发送给主库 [root@db04 data]# mysqlbinlog --start-position=283 --stop-position=45118 /opt/mysql/data/db04-relay-bin.000002 >/tmp/db_zeng.sql [root@db04 data]# scp /tmp/db_zeng.sql 172.16.1.51:/backup/

7.主库将两段内容导入并查看数据完整性

[root@db01 data]# mysql -uroot -p1  select count(*) from db1.t1; +----------+ | count(*) | +----------+ | 900 | +----------+ 1 row in set (0.00 sec)

8.从库开启sql线程 将延时关闭查看是否同步

[root@db04 data]# mysql mysql> start slave sql_thread; mysql> stop slave; mysql> change master to master_delay=0; mysql> start slave; #查看 mysql> select count(*) from db1.t1; +----------+ | count(*) | +----------+ | 900 | +----------+ 1 row in set (0.00 sec)

9.再次开启延时

mysql> stop slave; mysql> change master to master_delay=3600; mysql> start slave; Query OK, 0 rows affected (0.01 sec)

 

您可能感兴趣的文档:

--结束END--

本文标题: MySQL主从复制详解

本文链接: https://www.lsjlt.com/news/5856.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL主从复制详解
    ①主服务器将所有数据和结构更改记录到二进制日志中。 ②从属服务器从主服务器请求该二进制日志并在本地应用其内容。 ③IO:请求主库,获取上一次执行过的新的事件,并存放到relaylog ④SQL:从relaylog中将sql语句翻译给从...
    99+
    2017-03-30
    MySQL主从复制详解
  • Redis主从复制详解
    单机Redis存在的问题 无法故障转移 ,无法避免单点故障 磁盘空间的瓶颈 QPS瓶颈 Redis主从复制的作用 提供数据副本 扩展读性能 配置方法 通过命令 通过配置文件 演示 为方便演示,在一台服务器上...
    99+
    2022-10-18
  • 详细分析MySQL主从复制
    前言: 在MySQL中,主从架构应该是最基础、最常用的一种架构了。后续的读写分离、多活高可用架构等大多都依赖于主从复制。主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多,笔者也来凑凑热闹...
    99+
    2022-05-13
    MySQL 主从复制
  • MySQL主从复制原理详情
    目录前言:一、为什么需要主从复制?二、什么是mysql的主从复制?三、mysql复制原理具体步骤四、mysql主从同步延时分析五、主从复制的配置1、基础设置准备2、安装mysql数据...
    99+
    2022-11-13
  • MySQL主从复制详细介绍
    一、主从复制的目的 ​ MySQL内建的复制功能是构建基于MySQL的大规模、高性能应用的基础,复制功能的目的是构建高性能的应用,同时也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。比较常见的用途有以下几种: 数据分布:备份...
    99+
    2023-08-20
    mysql 数据库 服务器
  • 详解MySQL主从复制及读写分离
    目录前言一、相关概述二、读写分离三、MySQL主从复制实验部署四、MySQL读写分离实验前言 在企业实际应用中,成熟的业务通常数据量都比较大,而单台MySQL服务器在安全性、高可用性...
    99+
    2022-11-12
  • MySQL 主从复制原理与实践详解
    本文实例讲述了MySQL 主从复制原理与实践。分享给大家供大家参考,具体如下: 简介 MySQL 的主从复制又叫 Replication、AB 复制。至少需要两个 MySQL 服务(可以是同一台机器,也可以是不同机器...
    99+
    2022-05-11
    MySQL 主从复制
  • mysql主从复制
    一.主从复制简介 2015年5月28日11时,12小时后恢复,损失:平均每小时106.48W$ 1)高可用 2)辅助备份 3)分担负载 复制是 MySQL 的一项功能,允许服务器将更改从一个实例复制到另一个实例。 1)主服务器将所有数据和...
    99+
    2019-04-07
    mysql主从复制
  • 【MySQL】主从复制
    纸上得来终觉浅,绝知此事要躬行。 概述 复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多...
    99+
    2015-07-01
    【MySQL】主从复制
  • mysql 主从复制
    1, 准备二台机器或者服务器 ,保持mysq 版本一样或者版本相差不大; 主机:114.215.198.39 从机:116.62.234.228 2    新建一个数据库 我的数据库是hlqzxm; 进入主机的mysql 配置文件中修改配置...
    99+
    2021-10-15
    mysql 主从复制 数据库入门 数据库基础教程 数据库 mysql
  • mysql主从复制
    两台mysql版本号为5.7以上   主库配置文件设置(注意设置在[mysqld]项中) 主库的ip地址为:192.168.1.1 server-id=1 #唯一id,主库设置1 log-bin=mysql-bin #日志记录...
    99+
    2018-10-04
    mysql主从复制 数据库入门 数据库基础教程 数据库 mysql
  • mysql主从复制--一主一从
    1、启动实例3306和33072、检查主库配置[root@client 3306]# egrep  "log-bin|server|sock"  my.cnfsocket &n...
    99+
    2022-10-18
  • 一文详解MySQL Binlog日志与主从复制
    目录1. Binlog日志的介绍2. 主从复制2.1 主从复制的流程2.2 GTID2.3 复制模型2.4 MGR模式2.5 并行回放1. Binlog日志的介绍 Binlog是Bi...
    99+
    2022-11-13
    MySQL Binlog日志 MySQL 主从复制
  • MySQL的主从复制==>详细步骤
    目录 前言 一、准备工作 1、提前准备好两台服务器,分别安装Mysql 2、使用克隆弄出另一台服务器的注意事项 二、配置==>主库Master  1、修改Mysql数据库的配置文件/etc/my.cnf 2、 重启Mysql服务 3、登录M...
    99+
    2023-09-08
    mysql 数据库 java
  • 详解Redis主从复制实践
    目录复制简介服务介绍实现方式1. 服务启动时配置2. 命令行配置3. 配置文件配置4.配置说明效果测试1.主服务器添加数据2.从服务器获取数据实现原理实现策略1.全量复制2.部分复制...
    99+
    2022-11-12
  • mysql主从复制怎么理解
    这篇文章主要介绍了mysql主从复制怎么理解的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql主从复制怎么理解文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2022-10-19
  • centos8 mysql 主从复制
    ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 目录 Linu...
    99+
    2023-08-31
    数据库 mysql 服务器
  • Mysql之主从复制
    文章目录 一.Mysql主从复制介绍 1.Mysql主从复制原理2.Mysql的复制类型3.Mysql主从复制的工作过程 二.搭建 Mysql主从复制1.首先关闭防火墙2.Mysql主从服...
    99+
    2023-09-04
    mysql java 数据库
  • mysql+ssl主从复制
    主从复制原理 作为主服务器Master, 会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 (从服务器I/O thread会负责来读取master binary log, 然后写入自身r...
    99+
    2022-10-18
  • MySQL-5.5.33主从复制
    搭建主从同步需要在两个电脑上分别安装 MySQL ,我这里安装的是 CentOS6.7 64位,MySQL-5.5.33。MySQL 是二进制包安装的:http://aby028.blog.51cto.co...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作