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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云解析 DNS,旗舰版 1个月
简介:

一、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
分享
相关文章
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
深度干货 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
数据库高可用(High Availability,HA)是指在系统遇到故障或异常情况时,能够自动快速地恢复并保持服务可用性的能力。如果数据库只有一个实例,该实例所在的服务器一旦发生故障,那就很难在短时间内恢复服务。长时间的服务中断会造成很大的损失,因此数据库高可用一般通过多实例副本冗余实现,如果一个实例发生故障,则可以将业务转移到另一个实例,快速恢复服务。
深度干货  如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
深度干货 | 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
数据库高可用(High Availability,HA)是指在系统遇到故障或异常情况时,能够自动快速地恢复并保持服务可用性的能力。如果数据库只有一个实例,该实例所在的服务器一旦发生故障,那就很难在短时间内恢复服务。长时间的服务中断会造成很大的损失,因此数据库高可用一般通过多实例副本冗余实现,如果一个实例发生故障,则可以将业务转移到另一个实例,快速恢复服务。
深入体验阿里云通义灵码:测试与实例展示
阿里云通义灵码是一款强大的代码生成工具,支持自然语言描述需求,快速生成高质量代码。它在测试、代码质量和用户体验方面表现出色,能够高效地生成 Python 和 Java 等语言的代码,助力开发者提升开发效率和代码质量。无论是新手还是资深开发者,都能从中受益匪浅。
深入体验阿里云通义灵码:测试与实例展示
【赵渝强老师】MySQL的基准测试与sysbench
本文介绍了MySQL数据库的基准测试及其重要性,并详细讲解了如何使用sysbench工具进行测试。内容涵盖sysbench的安装、基本使用方法,以及具体测试MySQL数据库的步骤,包括创建测试数据库、准备测试数据、执行测试和清理测试数据。通过这些步骤,可以帮助读者掌握如何有效地评估MySQL数据库的性能。
198 5
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
1851 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
130 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
78 3
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
83 2

热门文章

最新文章

推荐镜像

更多