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)
上一篇 2017-03-01 13:59
下一篇 2017-03-01 23:18

相关推荐

  • 马哥教育网络班21期+第八周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:也叫做桥接器,工作在OSI七层中第二层数据链路层,主要是用来连接两个局域网的一种存储或者转发设备,它能将一个大的LAN分隔      为多个网段,也可以将多个LAN互联为一个逻辑LAN,网桥是在数据层上实现的局域网互联;即使…

    Linux干货 2016-09-08
  • centos7上实现LAMP,并搭建wordpress

    实验:LAMP的架构,并搭建wordpress              1、准备环境,                      #mkdir src    …

    2017-08-07
  • N25–第十二周作业

    1、  请描述一次完整的http请求处理过程; (1)建立和处理连接:接收请求或者拒绝请求; (2)接收请求:接收来自于网络上的主机请求报文中对某特定的资源的一次请求的过程; (3)处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息 (4)访问资源:获取请求报文中请求的资源 (5)构建响应报文; (6)发送响应报文; (7)记录…

    2017-03-28
  • N22-妙手-第七周博客作业第四题:RAID各级别的特性

    什么是RAID RAID的全称是Redundant Array of Independent Disks – 独立磁盘冗余阵列。基本思想是将多个相对便宜的硬盘组合成为一个硬盘阵列,使其在性能上达到或超过一块价格昂贵、容量巨大的硬盘。RAID通常被用在服务器上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统会把其当做一块硬盘。RAID分为不同的等…

    Linux干货 2016-09-27
  • MBR与GPT分区结构的不同及磁盘分区命令总结

    一、MBR分区结构 主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是目前比较流行的一种分区结构。磁盘的0磁道0扇区称为MBR,它的大小是512字节,这个区域被分为三个部分: 第一部分为boot loader(主引导程序),占446字节; 第二部分为Partition table(分区表),即DPT,占64字节,每个分区项…

    Linux干货 2016-08-29
  • Shell脚本-循环基础

    Shell脚本-循环基础 背景: 正在学习Shell脚本之循环,发现Shell的循环和其他编程语言大同小异,逻辑上都是相通的,但在使用格式上却有点不同,在学习完Shell循环后,将学习的心得体会记录下来,以备今后复习。 介绍: 什么是Shell脚本:       shell script是利用shell的功能…

    2017-08-26

评论列表(1条)

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

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