`
xiaoyao8903
  • 浏览: 21575 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

实现MySql延迟复制,高逼格的数据库操作(二)

 
阅读更多

昨天我讲了mysql的主从单双向复制,有人提出说讲一下主从单双向复制的优缺点,还有关于双向复制中唯一主键冲突问题。今天我就稍微的在最后补充一下,我可能补充的不是很好,更多的我希望各位去自己手动实践一下,然后在实践中发现归纳这些优缺点,在实践中掌握这一个技能。如果单纯的是我说,我明白了,你明白吗?

今天主要还是讲一下关于实现双向主从复制之后,我们一般都会进一步实现的延迟复制,为什么要延迟复制,我在我的25讲最后有提到,大家有疑问的可以翻一翻。另外补充一下如何实现一主多从和多个互为主的原理。mysql的读写分离我应该会放到明天讲。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

开班第二十七天:

今天的课程大纲:

  1. 补充一主多从和多个互为主的实现原理

  2. 实现延迟复制的工具:percona。

  3. 编写脚本实现自动化延迟复制服务

  4. 补充网友提问和意见

详细讲解:

  • 补充一主多从和多个互为主的实现原理

昨天如果你自己实现了mysql的主从复制,那么我想一主多从你应该也会做,因为无非就是多一个slave,多一个id。关于多个互为主的实现,我们可以这样实现,A-->B-->C-->A,这样就会避免应该会出现的问题,防止重复插入,同时在配置文件中写入这样一条代码:log-slave-updates。原理不难,主要靠自己实践,千万不要做伸手党,因为那样一点点用都没有,哪怕一点点。如果有朋友遇到问题的,可以先自己尝试解决一下,如果解决不了就进群,大家一起讨论一下。

  • 实现延迟复制的工具:percona。

延迟复制,我们想要实现的功能大概是这样的,假如我slave延迟一小时更新数据,那么master在12点插入数据,slave在13点更新,master在12:59分插入数据,slave在13:59分插入数据。那么我们如何实现呢,首先我们关闭slave的SQL进程,我们之前介绍了二进制文件,我们读取二进制文件主要通过postion来定位,我们可以通过读取postion以及读取postion的时间来确定我们什么时候执行postion对应的sql命令。percona就实现了这样的功能,它其实也是个脚本,我们也可以用shell或者python写一个这样的脚本,原理都一样。

这里需要注意的是,在mysql5.6以后,我们执行change master的同时可以指定延迟时间,它本身就实现了延迟复制的功能,那么在mysql5.6之前呢,我们还是通过percona来实现。我现在mysql的版本是5.1.73,所以我使用percona,如果大家没有找到工具的rpm包,在我的微信公众号中回复:percona,获取这个工具。

1.安装percona

因为这个rpm有依赖,我们用yum进行安装,yum install percona-toolkit-2.2.7-1.noarch.rpm.

2.安装好之后,可以通过man手册查看这个工具提供了那些命令,这里我主要就讲pt-slave-delay,这个命令就实现了设置从服务器延迟复制,设置它,那么就应该需要连接到从服务器中,所以需要在从服务器中为这个工具创建一个用户来连接。

我们通过阅读man手册可以知道创建这个用户需要的权限有三个,分别是super。process。replication,后面的ip特别说明一下,你在那个主机上运行这个脚本,就写那个主机的ip,不一定要是master上运行。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)3现在运行这个脚本,同时介绍一下必要的参数,--delay表示我延迟1m在slave更新master的数据,--interval表示我每5秒看看是否要启动SQL进程,--daemonize表示后台运行,--log,因为我每5秒检查一次,它就会每5秒输出一次,输出到终端中不妨便,我直接输出到日志文件中,我通过查看日志文件就行了。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)4.查看日志文件。tail -f /var/log/delay.log。查看slave的状态,可以看到SQL进程默认是关闭的。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

5.测试,我在master中插入一条数据(insert into toutiao values(NULL,"toutiao4")),通过观察日志,看是否在一分钟后,slave会更新数据。

通过观察日志文件,我们发现在21:57:43的时候,开启了SQL进程,更新之后,然后就关闭了SQL进程,查看从服务器数据表信息,的确插入了这条记录。《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

  • 编写脚本实现自动化延迟复制服务

1.前面我们已经实现了如何设置slave延迟复制,但是大家有没有感觉每次都要输这么一长串命令,不觉的很烦吗,所以我们可以通过编写一个脚本来自动化的实验mysql延迟复制的功能。先讲一下这个脚本应该有的功能,Usage:{start|stop|restart|showlog|status}。脚本我就用shell写了,基本的case语句,这个脚本贴出来很麻烦,加群或者公众号,回复autoslavedelay,获取。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)2.怎么用着这个脚本呢,如果哪个朋友使用这个脚本,首先要改一下脚本的内容,host,user,password,log都需要改。改成什么,应该不用我再说了。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)3.现在把脚本添加到/etc/init.d/中,同时chmod a+x一下,之后就可以使用service 脚本名 start|restart|stop了。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)4.后面的功能就不演示了,都一样的。

  • 补充网友提问和意见

mysql主从复制的单向复制,优点很明显,master实现业务,slave实现存储,这样我们的master就能够更多去实现业务,在master宕机之后,slave还能继续的技工服务,不过缺点也有,slave单单只作复制,是不是很浪费,后面会讲如何高效的使用slave。同时单向复制有一个很大的问题就是master的误操作,也会更新到slave中,但是这个问题今天已经用延迟复制解决了。

双向复制优缺点,不讲了,感觉你都配置好了,再问优缺点是不是有点晚了。双向复制是基于单向复制的,单向复制的缺点可能就是双向复制所要解决的。

解决双向复制唯一主键冲突,我们可以设置master和slave从不同的基数开始,然后设置增长步数,这样我们可以实现在master中是13579,slave中2468,当然方法有其他的,我需要再想想,因为我又不是特别厉害,我也需要一直学才行。

总结:

今天主要讲了关于延迟复制的原理和实现方法,希望大家能够明白为什么要使用延迟复制,以及延迟复制能给我们带来什么好处。最后,我今天在地铁上看了一篇文章,程序员面试官写的,他说程序员无论你面试的职位高低,还是你原来的职位高低,一张笔试题试卷,就能告诉你需要什么人,最技术不要太虚,很多内容,我认为这个还是非常重要的,所以跟大家分享一下。

分享到:
评论

相关推荐

    C#实现Mysql数据库操作实例(含源码)

    在本文中,我们将深入探讨如何使用C#语言来实现对MySQL数据库的操作。C#是一种广泛应用于Windows和Web应用程序开发的强大编程语言,而MySQL则是一种高效、开源的关系型数据库管理系统。结合两者,我们可以创建功能...

    Android 实现连接MySQL数据库

    在Android应用开发中,有时需要实现与服务器端的MySQL数据库进行交互,比如用户登录、数据同步等场景。本文将详细讲解如何在Android中实现连接到MySQL数据库,以及相关的技术要点。 首先,理解基本概念:Android是...

    SpringBoot第 12 讲:SpringBoot+MySQL主从复制、读写分离

    主从复制是MySQL数据库的一种高可用性解决方案,其中一台服务器(主服务器)处理所有写操作,而其他服务器(从服务器)同步主服务器上的数据变化,从而形成一个读写分离的环境。这种设计模式有助于减轻主服务器的...

    Java连接MySql数据库,并且实现插入、删除、更新、选择操作.pdf

    Java 连接 MySql 数据库,并实现插入、删除、更新、选择操作 Java 连接 MySql 数据库是 Java 程序员中非常常见的一种操作。通过使用 JDBC(Java Database Connectivity,Java 数据库连接)驱动程序,可以轻松地连接...

    Mysql经典高逼格/命令行操作(速成)(推荐)

    MySQL是一种广泛使用的开源关系型数据库管理系统,其命令行操作是数据库管理员和开发人员日常工作中不可或缺的部分。本篇文章将深入探讨MySQL命令行操作的基础知识,帮助初学者快速掌握MySQL的使用。 首先,安装...

    jsp操作mysql数据库的范例

    jsp操作mysql数据库 jsp操作mysql数据库 jsp操作mysql数据库 jsp操作mysql数据库 jsp操作mysql数据库

    MySql数据库同步复制

    MySQL 数据库同步复制是...总之,MySQL的数据库同步复制功能通过主从模式和双机互备模式提供了数据冗余和高可用性,是构建高可靠数据库系统的关键技术。正确配置和管理复制,可以显著提高系统的容错能力和数据安全性。

    使用C和C++连接MySQL数据库并进行常用的数据库操作

    实现了简单的学生(或职工)信息管理系统,源于大学时的数据库课程设计使用C和C++连接MySQL数据库并进行常用的数据库操作。实现了简单的学生(或职工)信息管理系统,源于大学时的数据库课程设计使用C和C++连接MySQL...

    MySQL数据库操作 ppt

    MySQL数据库操作.ppt MySQL数据库操作.ppt

    MySQL 5.1 版数据库

    - MySQL 5.1支持创建触发器和存储过程,提供了更复杂的业务逻辑处理能力,可以在数据库级别实现一定的业务逻辑。 6. **安全性和权限管理**: - 用户权限管理更加细化,可以设置更精确的访问控制,增强了数据库的...

    c#操作MySQL数据库封装类

    在C#编程中,操作MySQL数据库通常涉及到使用ADO.NET库或者第三方库如MySql.Data.dll。这个"c#操作MySQL数据库封装类"很可能是为了简化数据库交互,提供一个易于使用的接口,以提高代码的可读性和可维护性。下面我们...

    基于C和C++连接MySQL数据库实现简单的学生(或职工)信息管理系统,源于大学时的数据库课程设计.zip

    使用C和C++连接MySQL数据库并进行常用的数据库操作。实现了简单的学生(或职工)信息管理系统,源于大学时的数据库课程设计.zip 使用C和C++连接MySQL数据库并进行常用的数据库操作。实现了简单的学生(或职工)信息...

    mysql数据库字段复制

    MySQL数据库字段复制是一个常见的需求,尤其在数据迁移、备份或者多环境同步的场景下。PHP作为流行的服务器端脚本语言,常被用来处理这类任务。本文将深入探讨如何使用PHP来实现MySQL数据库字段的高效复制。 首先,...

    MYSQL官方最新测试数据库 test_db.zip

    2. **SQL语言**:SQL是用于操作数据库的语言,包括增(INSERT)、删(DELETE)、改(UPDATE)和查(SELECT)等操作。掌握SQL基础是使用MySQL的前提。 3. **表结构与数据类型**:理解如何创建表,定义字段,选择合适...

    h2数据导入mysql数据库(看评论酌情下载)

    h2 数据库导入 MySQL 数据库 h2 数据库导入 MySQL 数据库是指将 h2 数据库中的数据导入到 MySQL 数据库中,以便更好地存储和...h2 数据库导入 MySQL 数据库需要通过一步步的操作,以确保数据的一致性和类型的兼容性。

    C#操作Mysql创建数据库,数据表,增、删、改数据

    本教程将详细介绍如何使用C#与Mysql进行交互,包括创建数据库、数据表以及执行基本的CRUD(Create、Read、Update、Delete)操作。 首先,我们需要在C#项目中引入Mysql的数据提供者——`MySql.Data.dll`。这个库允许...

    通过Data文件夹备份和还原实现Mysql数据库的备份以及还原

    本文将详细讲解如何通过Data文件夹备份和还原实现MySQL数据库的备份及恢复,这是一种简单直接的方法,尤其适合小型数据库或者开发测试环境。 首先,我们需要理解MySQL的数据存储结构。MySQL数据库的数据文件主要...

    OPC服务器软件KEPServer实现与MySQL连接

    KEPServer 软件实现与 MySQL 连接需要安装和配置 MySQL 数据库、KEPServer 软件和 ODBC 驱动,同时需要配置 KEPServer 软件与 MySQL 数据库之间的数据交互。通过 KEPServer 软件实现与 MySQL 连接,可以实现实时数据...

Global site tag (gtag.js) - Google Analytics