mysql mariadb 备份恢复、主从

备份类型分为:
完全备份、增量备份、差异备份
热备、温备、冷备

逻辑备份、物理备份

每种类型区别:

增量备份:根据上一次备份的增量备份或完全备份备份
差异备份:根据上一次备份的完全
温备:备份过程中只支持读
备份备份
热备:备份过程中支持读写
冷备:停服务备份
逻辑备份:schema和数据存储在一起,巨大的sql语句、单个巨大的备份文件,恢复备份较慢。优点可以还原于任何数据库引擎中(当数据文件达到G级别不建议使用)。

物理备份:相当于直接复制数据文件、备份速度较快恢复也较快,但只支持还原于相同数据库引擎中。

备份工具:
    mysqldump:完全备份+备份2进制文件完成增量备份(热备是靠巨大的事务完成,数据量较大时速度慢,不建议使用) 逻辑备份。
    lvm2:使用lvm快照功能实现备份,缺点需要锁表后执行快照功能以实现备份  物理备份。
    xtrabackup:完全备份+增量备份,数据文件G级别以上建议使用此方法 物理备份。

    …还有很多。
任何备份方式均不能实现时间点还原,因此,如果需要基于时间点还原需要配合二进制日志文件执行。

这里只演示用mysqldump和xtrabackup实现备份以及还原。

mysql  mariadb  备份恢复、主从

这里可以看到我有一个名为hellodb的库,库里面有一张students表,我就备份此表好了

mysql  mariadb  备份恢复、主从

-E:备份指定库的事件调度器
-R:备份存储过程和存储函数
–triggers:备份触发器
–master-data=2:指定此事件记载的2进制文件开始位置,及哪个文件
–flush-log:滚动一下日志,以方便用二进制日志文件进行时间点还原

–single-transaction:mysqldump热备时需要执行此选项,备份是启用一个大的事务完成的备份(在常用的两种数据库引擎中,myisam仅支持温备,innodb支持热备)
–databases:指定备份哪一个数据库

还实际工作中,我们还应该备份一下数据库的配置文件

接着我们就可以看一下我们备份出来的数据了

mysql  mariadb  备份恢复、主从

这里箭头所指出很重要,指明了此次备份完成后,二进制文件的截止事件位置,可以看到是一个新文件,而且处于刚开始的位置,这也是我们之前为什么要执行–flush-log的原因了,到时候我们根据时间点还原,不用去从哪个文件中间重读一遍。(当然这一切得先开启二进制文件)

现在我们在去删几条数据

mysql  mariadb  备份恢复、主从

我已经删了stuid为20-25之间的,也确实少了,现在假设存放数据的磁盘损坏了,并且二进制日志我们保存在其他位置(我们单独将二进制文件复制出来。)

mysql  mariadb  备份恢复、主从

我删除了数据目录下的所有文件(二进制文件已经备份出来了哦~)

接着我们重启mariadb,并且恢复备份的数据

mysql  mariadb  备份恢复、主从

可以看到我们之前备份出来的确实已经还原了,但连我们之前删除的stuid为20-25的也恢复出来了,接着我们继续做时间点还原

mysql  mariadb  备份恢复、主从

–start-positon=245: 指明开始重读的时间,之前已经提过了

另外我是CP二进制日志文件出来再TMP目录下的,实际应用过程中记得把二进制文件和数据文件分磁盘放!!!!!!!!!(另外二进制文件实际上都是写sql语句,以后如果需要修改什么可以直接修改在恢复),mysqldump的增量备份只有靠备份二进制文件来完成,这里就不演示了,已经演示了二进制日志还原了,无非就是每天flush-log一次然后直接CP命令复制出来即可

接着来xtrabackup

xtrabackup 是percona公司开源的项目,并没有收录进epel源中,需要在官网自行下载 https://www.percona.com/

mysql  mariadb  备份恢复、主从

发现在centos7的epel源中有一个测试版本??? 不过我已经在官网下了并且安装上了,就不管他了。

接着把数据库恢复最先的状态

mysql  mariadb  备份恢复、主从

就在此状态下,我在此备份一次 

mysql  mariadb  备份恢复、主从

直接–databases指明备份哪个库,到哪个位置即可

mysql  mariadb  备份恢复、主从

最后我们看见completed ok!就代表成功了~ (另外这里提一句使用innobackupex,执行任何备份、恢复操作在结束处都应该见到complete ok,即代表成功

接着我们就在来改动一下并进行增量备份

mysql  mariadb  备份恢复、主从

新建了一张表,并且插入了两条数据,接着去进行增量备份吧

mysql  mariadb  备份恢复、主从

–incremental:指明这次增量备份

–incremental-basedir:指明以那一次为基础的增量


mysql  mariadb  备份恢复、主从

另外可以在备份出来的目录里面看见type 一个为FULL 一个为increment (并且xtrabackup是根据名为LSN的序列号进行增量备份的,可以看见上图两个备份是完全接上的

接着就可以去删数据目录了

mysql  mariadb  备份恢复、主从

先给完全备份进行事务的提交,这里只做了提交,因为我们后面还有增量备份,不一定需要回滚,说不定下个增量备份里面未提交的事务就已经提交了哟~ (另外此项操作其实可以不做,上问就提到过了xtrabackup属于物理备份,直接备份出来了文件,mariadb在启动时会自动进行事务的回滚和提交

接着需要把增量备份给他重建只完全备份上!

mysql  mariadb  备份恢复、主从

–incremental-dir:指明增量备份是哪一个,其他选项和上面介绍的一样

mysql  mariadb  备份恢复、主从

查看完全备份的checkpoints文件,可以看到最后记录的lsn号码已经是增量备份的了,接着可以拿去还原了~ 

在次提醒 以上所有操作 均需在末尾见到“complete ok” 即代表成功

mysql  mariadb  备份恢复、主从

–copy-back:代表还原,要注意的是指明的目录为完全备份的目录,并且同样要看到complete ok 

mysql  mariadb  备份恢复、主从

这里需要注意!! 在还原之前确定数据目录必须为空!!!否则还原报错, 还原过后注意权限是否正常,否则启动数据库报错!!!!

mysql  mariadb  备份恢复、主从

整个增量备份就是这样 ~ 完成了,另外如果需要进行时间点还原,仍然依赖二进制文件,步骤同上面的一样 就不演示了,至此备份恢复就到这

——————————————————————————————————————————————————————————————————————————————–

mysql主从

主服务器工作流程:

       主服务器的dump线程负责接收从服务器的二进制文件请求并发送给对方

从服务器工作流程

        从服务器的I/O线程负责向主服务器请求二进制文件,并记录与中继日志文件中

        从服务器的SQL线程负责读取中继文件中的sql语句,进行重放,以此达到数据同步的效果(上面备份的时候已经提到过了二进制文件记录的是所有sql语句,所以从服务器拿来过后进行重新运行一遍就OK了~

另外主从服务器的server id 不可重复,二进制文件中会标明serverid mysql的工作机制遇到同样的serverid 是不会进行重放的,以此避免循环复制

了解完这些过后配置就仅仅只有几步就可完成


主服务器启用二进制文件

标明serverid

提供一个有复制权限的账号


从服务器启用中继日志

标明serverid

使用有复制权限的账号

启动复制线程

mysql  mariadb  备份恢复、主从

主服务器my.cfg配置

mysql  mariadb  备份恢复、主从

从服务器my.cfg配置

接着就可以继续了,接着授权一个账号

grant replication client,replication slave on *.* to repli@192.168.20.105 identified by ‘111’;

只授予复制客户端和从服务器请求,并只给予105这个ip 因为我的从服务器是此IP

mysql  mariadb  备份恢复、主从

changemaster 指明从服务器是哪一个 其他选项挺好理解的。

master_log_file:指明从主服务哪个二进制文件开始同步

master_log_pos:指明从此文件哪个position开始同步

在主服务器授权完后使用 show master status 看一看,

mysql  mariadb  备份恢复、主从

启动线程变查看是否启动,接着我们就可以去主服务器创建数据库查看是否能同步了~至此主从也完了~

但是需要思考客户端进行写操作过后是否需要从服务器同步完成过后,在响应客户端,不然万一客户端进行读操作时被前端调度到了从服务器,从服务器还未同步,客户端访问之前提交的操作发现居然没有,这就很尴尬啊。

这个问题其实只需要装2个插件就能解决

semisync_master.so
semisync_slave.so
一个是主服务器安装,一个是从服务器安装,这里我是使用的yum安装,自行就有这两个插件

INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;

INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;

分别在主从上安装两个插件

mysql  mariadb  备份恢复、主从

安装完插件过后会看到变量中会多了几个参数,接着我们只需要分别在主从上把插件功能打开~如果需要设置等待的超时时长修改就可以了,记得先在从服务器停掉同步线程在进行

一切做完以后,我们可以查看具体同步进行的数据了~ 随便新建几个数据库

mysql  mariadb  备份恢复、主从

可以看到客户端有一个~ 平均同步时间875毫秒~ 同步总耗时3503,同步次数4次..等等~~~

双主也就是同时启用中继日志和二进制日志,并且同时指定对方为主服务器,就行了。但是双主会带来很多问题,例如自增长的字段混乱,如果恰好遇到同时插入使用了同样的自增号码,并且根本没有解决到写的负载。。等等等


原创文章,作者:N24_Ghost,如若转载,请注明出处:http://www.178linux.com/70324

(0)
N24_GhostN24_Ghost
上一篇 2017-03-01
下一篇 2017-03-01

相关推荐

  • dns主从

    一、前言 Dns全称domain name system,当我们访问一个网站时,在网站输入一个网址。但是网络是靠ip地址这个逻辑地址来标识地址的。而一个网址是如何转换为ip地址的?下面我们将简单讲解下dns的原理。 二、dns查询过程 在了解dns查询过程时,我们先了解一些有关dns的专业名词     根域:用来管理互…

    Linux干货 2015-10-01
  • N22第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可 [root@localhost ~]# who |cut -d' ' -f1 |sort -u   root   xuc 2、取出…

    Linux干货 2016-08-29
  • 一些不起眼但非常有用的 Vim 命令

    原文出处: xmodulo   译文出处:linux.cn – wangjiezhe   如果我的关于这个话题的最新帖子没有提醒到你的话,那我明确地说,我是一个 Vim 的粉丝。所以在你们中的某些人向我扔石头之前,我先向你们展示一系列“鲜为人知的 Vim 命令”。我的意思是,一些你可能以…

    Linux干货 2015-03-09
  • cat命令了解

    1 查看文件在LINUX下一切皆文件,光看见文件名和目录名对我们来说,还远远不够。今天,就来介绍一下可以打开文件的命令cat。当然,二进制的可执行文件,不能用cat。在CentOS7下,以/etc/profile文件为例,如下: 首先,怎么打开这个文件呢?直接执行:cat /etc/passwd. 这么多行,能不能看见行号呢?cat -n /etc/pass…

    Linux干货 2017-04-03
  • 使用haproxy代理LAMP、LNMP 实现WordPress发布

    haproxy简介 HAProxy是专业的反向代理软件,它可以支持4层和7层代理服务。其配置包含一下几个配置段: global:全局设置,通常与操作系统有关 defaults:配置默认参数,可以被frontend、backend、listen组件利用 frontend:接收亲请求的前虚拟节点 backend:后端服务集群的配置,一个backend可以对应多个…

    2017-05-17
  • Shell脚本编程中的if、case、for、while、until命令

    为何要学编程中的if、case、for、while、until命令?        作为一个运维工程师,总会听到自动化,实际自动化离不开编写shell脚本,而shell脚本中却又离不开编程中的if、case、for、while、until, 这些关键字。 了解编程中的if、case、for、while、until命令,…

    Linux干货 2016-08-19

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-07 11:01

    总结的很好,思路清晰,加油!