Mysql高可用复制原理及主从实例测试解析

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

一、Mysql复制简介

    使用mysql复制功能可以将主数据的数据复制到多台从服务器上。默认情况下,采用异步传输方式,数据复制可以在各种不同的网路环境中进行。主从复制技术在企业生产中得到了广泛应用,它避免了数据库的单点故障,当一台服务器宕机,其他服务器一样可以提供稳定可靠的数据服务。


1 mysql 复制原理

    Mysql复制功能是将数据分布在多个系统上,这种机制是通过将Mysql的某一台服务器(master)的数据复制到其它服务器(slaves)上来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,从服务器接收到这些更新的日志内容,就按照日志内容在本机执行一遍,由此实现主从数据复制。主服务器写入日志时也维护着文件的一个索引以跟踪日志循环,当一个从服务器连接主服务器时,它通知主从服务器在日志中读取的最后一次成功更新的位置,从服务器接收那个时间点起发生的任何更新,然后封锁并等待主服务器通知新的更新。


2 mysql 复制优点

    高性能:通过将请求分配给多台不同的从服务器,提高性能及速度,在此种环境中,所有写操作必须在主服务器进行,读操作可以平均分配给多台从服务器。

    数据安全:数据通过主从复制,把主服务器的数据复制的一份或者多份,即实现了数据的安全备份

    数据分享:对于大型企业,各个地区的分公司也需要共享总部的数据资源,只需要用主从复制即可实现数据的共享,而且可以仅仅在需要时进行复制。


3 mysql 复制格式

    基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。

    基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。

    混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。


4 mysql 复制步骤

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

(1)  master将改变记录到二进制日志(binary log)中(二进制日志事件,binary log events);

(2)  slave将master的binary log events拷贝到它的中继日志(relay log);

(3)  slave重做中继日志中的事件,将改变反映它自己的数据。

wKioL1ib4BPx8u6UAABUrjWR9Ok685.gif

5 主从复制形式

    一主一从

    主主复制

    一主多从---扩展系统读取的性能,因为读是在从库读取的;

    多主一从---5.7开始支持

    联级复制---

wKioL1icI-qDtQ7hAAEgc_LqBSc851.png


半同步复制

    5.5版本集成到mysql,以插件的形式存在,需要单独安装

    确保事务提交后binlog至少传输到一个从库

    不保证从库应用完这个事务的binlog

    性能有一定的降低,响应时间会更长

    网络异常或从库宕机,卡主主库,直到超时或从库恢复

半同步原理图:

wKioL1icIcKgnku3AAGQYSjSMrs836.png


二、Mysql主从复制实例解析


首先了解数据库的主从复制部署注意要点

>>在主服务器上开启二进制日志,并设置唯一的服务器ID编号,设置后重启mysql生效。

>>在所有从服务器上设置唯一服务器ID编号,重启后生效。

>>在主服务器上创建让从服务器读取日志文件的账号,或者使用统一账户。

>>在进行数据复制前,需要记录主服务器上二进制日志的位置标记。


下面对整个主从复制过程详细解析


1 主服务器设置数据复制环境

在已安装或者使用过的数据库上创建数据库和数据表,演示如何对已经存在的数据进行数据同步备份

[root@master ~]# mysql -u root -p

mysql> create database hr;

mysql> use hr;

mysql> create table employees(

-> employee_id INT NOT NULL AUTO_INCREMENT,

-> name char(20) NOT NULL,

-> e_mail varchar(50),

-> PRIMARY KEY(employee_id));

mysql> INSERT INTO employees values

->(1,'TOM','tom@example.com'),

->(2,'Jerry','jerry@example.com');

mysql> exit

在主服务器上开启二进制日志并设置服务器编号,服务器唯一编号必须是1至232-1之间的整数,根据自己的实际情况进行设置。进行这些设置需要关闭MySQL数据库并编辑my.cnf或my.ini文件,并在[mysqld]设置段添加相应的配置选项。

[root@master ~]# vim /etc/my.cnf

[mysqld]

log-bin=Jacob-bin        #启用二进制日志,并设置二进制日志文件前缀

server-id=25           #设置服务器编号

[root@master ~]# service mysqld restart

[root@master ~]# service iptables stop


2 从服务器设置数据复制环境

在已安装或者使用过的数据库机器上设置,服务器ID必须设置为集群中唯一编号。对于从服务器而言,二进制日志功能无需开启,当然,根据业务需要也可以开启,比如主主复制中互为主从时需要都开启。

[root@slave ~]# vim /etc/my.cnf

[mysqld]

server-id=24

[root@slave ~]# service mysqld restart

[root@slave ~]# service iptables stop


3 创建数据复制账号

主服务器上必须至少有一个账户供从服务器连接使用。这个账户必须具有REPLICATION SLAVE权限,你可以为不同的从服务器创建不同的账户与密码,也可以使用统一的账户与密码。使用CREATE USER语句创建用户,使用GRANT语句为账户赋权。

[root@master ~]# mysql -u root -p

mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';

mysql> exit


4 读取主服务器二进制日志信息

在进行主从数据复制之前首先查看主服务器的二进制日志文件的基本信息,主服务器二进制文件名称及当前日志记录位置在对从服务器的设置中需要用到。

[root@master ~]# mysql -u root -p

mysql> FLUSH TABLES WITH READ LOCK;

mysql> SHOW MASTER STATUS;

+--------------------------------+------------+---------------------+-------------------------+-------

| File|Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+--------------------------------+------------+---------------------+-------------------------+-------

jacob-log.000001|1226        |                                |                                |

+--------------------------------+------------+---------------------+--------------------------+------

mysql> UNLOCK TABLES;


5 对现有数据库备份并导入从服务器

如果在使用数据复制以前,数据库系统中已经存在数据资源,使用mysqldump工具对这些资料进行数据备份,在主服务器上使用该工具对数据备份后即可在从服务器上进行数据还原操作。当数据达到主从一致后,就可以使用数据复制功能进行自动从此同步操作。

[root@master ~]# mysqldump --all-databases --lock-all-tables > /tmp/dbdump.sql

[root@master ~]# scp /tmp/dbdump.sql 192.168.1.8:/tmp/

[root@slave ~]# mysql -u root -p < dbdump.sql


配置从服务器连接主服务器进行数据复制

数据复制的关键操作是配置从服务器去连接主服务器进行数据复制,需要配置从服务器建立网络连接所有必要的信息。使用CHANGE MASTER TO语句即可完成该项工作,MASTER_HOST指定主服务器主机名或IP地址,MASTER_USER为主服务器上创建的拥有复制权限的账户名称,ASTER_PASSWORD为该账户的密码,MASTER_LOG_FILE指定主服务器二进制日志文件名称,MASTER_LOG_POS为主服务器二进制日志当前记录的位置。START SLAVE开启从服务器功能进行主从连接,SHOW SLAVE STATUS查看从服务器状态。

[root@slave ~]# mysql -u root -p

mysql> CHANGE MASTER TO

-> MASTER_HOST='192.168.1.7',

-> MASTER_USER='slave',

-> MASTER_PASSWORD='123456',

-> MASTER_LOG_FILE='jacob-log.000001',

-> MASTER_LOG_POS=1226;

mysql> START SLAVE;

mysql> SHOW SLAVE STATUS\G;


7 数据同步测试验证

在主数据库上创建数据库及表,然后去从服务器查看是否同步。

[root@master ~]# mysql -u root -p

mysql> create database test2;

mysql> use test2;

mysql> create table t_table(

->name char(20),

-> age int,

-> note varchar(50));

mysql> INSERT INTO t_table values

-> ('linda',23, 'Beijing'),

-> ('jerry',33, 'shanghai'),;

mysql> exit

[root@slave ~]# mysql -u root -p

mysql> select * from test2.t_table;

mysql> exit



三、主从复制存在的问题及解决方法

mysql主从复制存在的问题:

    主库宕机后,数据可能丢失

    从库只有一个sql Thread,主库写压力大,复制很可能延时

解决方法:

    半同步复制---解决数据丢失的问题

    并行复制----解决从库复制延迟的问题


复制出错处理:

    常见:1062(主键冲突),1032(记录不存在)

解决方法:

    手动处理

    跳过复制错误设置:set global sql_slave_skip_counter=1









本文转自super李导51CTO博客,原文链接: http://blog.51cto.com/superleedo/1896421,如需转载请自行联系原作者




相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
143
分享
相关文章
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
694 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
139 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
266 11
深度干货 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
数据库高可用(High Availability,HA)是指在系统遇到故障或异常情况时,能够自动快速地恢复并保持服务可用性的能力。如果数据库只有一个实例,该实例所在的服务器一旦发生故障,那就很难在短时间内恢复服务。长时间的服务中断会造成很大的损失,因此数据库高可用一般通过多实例副本冗余实现,如果一个实例发生故障,则可以将业务转移到另一个实例,快速恢复服务。
深度干货  如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
深度干货 | 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
数据库高可用(High Availability,HA)是指在系统遇到故障或异常情况时,能够自动快速地恢复并保持服务可用性的能力。如果数据库只有一个实例,该实例所在的服务器一旦发生故障,那就很难在短时间内恢复服务。长时间的服务中断会造成很大的损失,因此数据库高可用一般通过多实例副本冗余实现,如果一个实例发生故障,则可以将业务转移到另一个实例,快速恢复服务。
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
636 5
深入体验阿里云通义灵码:测试与实例展示
阿里云通义灵码是一款强大的代码生成工具,支持自然语言描述需求,快速生成高质量代码。它在测试、代码质量和用户体验方面表现出色,能够高效地生成 Python 和 Java 等语言的代码,助力开发者提升开发效率和代码质量。无论是新手还是资深开发者,都能从中受益匪浅。
深入体验阿里云通义灵码:测试与实例展示
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
410 1
MySQL主从复制原理和使用
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
332 3

热门文章

最新文章

推荐镜像

更多