• 售前

  • 售后

热门帖子
入门百科

mysql备份战略的实现(全量备份+增量备份)

[复制链接]
忆困血馆闻 显示全部楼层 发表于 2021-8-14 14:44:56 |阅读模式 打印 上一主题 下一主题
目次


  • 计划场景
  • 技能点
  • 服务器信息
  • 准备工作
  • 编写全量备份脚本(Mysql-FullyBak.sh)
  • 编写增量备份脚本
  • 设置定时任务crontab
  • 恢复操作
近来项目须要对数据库数据进行备份,通过查阅各种资料,计划了一套数据库备份战略,通过调试运行一周后,现在已经处于安稳运行状态。如今将思路分享出来,同时感谢gredn大佬。

计划场景

1)增量备份在周一到周六凌晨3点,复制mysql-bin.00000*到指定目次;
2)全量备份则使用mysqldump将整个数据库导出,每周日凌晨3点执行,并会删除上周留下的mysq-bin.00000*,然后对mysql的备份操作会保存在bak.log文件中。

技能点

Mysqldump、mysqlbinlog、crontab

服务器信息

主机:centos7;数据库:mysql5.7

准备工作

开启binlog日志功能
(1)新建目次,执行:
  1. #mkdir /home/mysql
  2. #cd /home/mysql
  3. #mkdir mysql-bin.      #增量日志文件目录
复制代码
(2)修改所属的用户/组:(不修改,mysql无法重启)
  1. #chown -R mysql.mysql mysql-bin
复制代码

(3)修改mysql配置文件,执行:
  1. #vim /etc/my.cnf
复制代码

其中,server-id体现单个结点的id,这里由于只有一个结点,以是可以把id随机指定为一个数,这里将id设置成1。若集群中有多个结点,则id不能相同(对于5.7以下版本不须要指定server-id);
log_bin指定binlog日志文件的存储路径,日志文件以mysql-bin开头。

(4)重启mysql,执行:
  1. #systemctl restart mysqld.service
复制代码
(5)检察日志文件:
  1. #cd /home/mysql/mysql-bin
复制代码

(6)进入数据库,检察启动结果:
  1. #show variables like '%log_bin%';
复制代码


编写全量备份脚本(Mysql-FullyBak.sh)

进入/home/mysql目次
新建目次:mkdir backup
进入backup目次,新建daily目次:mkdir backup
切换到/home/mysql目次,执行:
  1. #vim Mysql-FullyBak.sh
复制代码
参数分析:
–lock-tables
锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于MySQL数据库引擎为MyISAM 表,如果是 Innodb 表可以用 –single-transaction 选项。
–flush-logs
结束当前日志,生成新日志文件。
–delete-master-logs
扫除以前的日志,以释放空间。但是如果服务器配置为镜像的复制主服务器,用–delete-master-logs删掉MySQL二进制日志很伤害,因为从服务器大概还没有完全处理该二进制日志的内容。在这种环境下,使用 PURGE MASTER LOGS更为安全。
–quick
该选项在导出大表时很有用,它强制 MySQLdump 从服务器查询取得记载直接输出而不是取得所有记载后将它们缓存到内存中。
–single-transaction
该选项在导出数据之条件交一个 BEGIN SQL语句,BEGIN 不会壅闭任何应用步伐且能包管导出时数据库的一致性状态。它只适用于事件表,比方 InnoDB 和 BDB。本选项和 –lock-tables 选项是互斥的,因为lock-tables会使任何挂起的事件隐含提交。要想导出大表的话,应结合使用 –quick 选项。
–events
导失事件
–master-data=2
其中参数–master-data=[0|1|2]
0: 不记载
1:记载为CHANGE MASTER语句
2:记载为解释的CHANGE MASTER语句
–master-data=2 选项将会在输出SQL中记载下完全备份后新日志文件的名称,
用于日后恢复时参考,比方输出的备份SQL文件中含有:
CHANGE MASTER TO MASTER_LOG_FILE='MySQL-bin.000002′, MASTER_LOG_POS=106;

编写增量备份脚本

切换到/home/mysql目次,执行:
  1. #vim Mysql-DailyBak.sh
复制代码


设置定时任务crontab

(1)安装crontab(centos7默认已经安装):
  1. #yum install crontabs
复制代码
服务操作分析:
  1. #/bin/systemctl start crond.service //启动服务
  2. #/bin/systemctl stop crond.service //关闭服务
  3. #/bin/systemctl restart crond.service //重启服务
  4. #/bin/systemctl reload crond.service //重新载入
复制代码
配置:
  1. #/bin/systemctl status crond.service //服务状态
复制代码
参加开机主动启动:
  1. #chkconfig –level 35 crond on
复制代码
(2)在下令行输入:
  1. #crontab -e
复制代码
添加相应的任务,wq存盘退出
  1. #每个星期日凌晨3:00执行完全备份脚本
  2. 0 3 * * 0 /bin/bash -x /home/mysql/Mysql-FullyBak.sh >/dev/null 2>&1
  3. #周一到周六凌晨3:00做增量备份
  4. 0 3 * * 1-6 /bin/bash -x /home/mysql/Mysql-DailyBak.sh >/dev/null 2>&1
复制代码
分析:默认环境下,crontab执行一次任务后,会通过email关照用户,为避免每次发信息,参加/dev/null 2>&1

(3)检察定时任务:#crontab -l



参数与分析:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个下令的时候须要此参数 ;
  crontab -l //列出某个用户cron服务的详细内容;
  crontab -r //删除所有用户的cron服务;
  crontab -e //编辑某个用户的cron服务;
  比方:root检察本身的cron设置:crontab -u root -l
  比方:root删除用户fred的cron设置:crontab -u fred -r
补充:
(1)可直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务(针对整个系统的crontab文件);
(2)crontab执行定时任务的记载会写入到/var/log/cron这个文件中,该记载以帐号为区分。

恢复操作

恢复过程亦会写入日志文件,如果数据量很大,建议先关闭binlog日志功能
1、场景:假设早上9点的时候,数据库被攻击,drop了整个数据库!
2、恢复思路:
使用全备的sql文件中记载的CHANGE MASTER语句,binlog文件及其位置点信息,找出binlog文件中增量的那部分。
用mysqlbinlog下令将上述的binlog文件导出为sql文件,并剔除其中的drop语句。
通过全备文件和增量binlog文件导出的sql文件,就可以恢复到完整的数据。
3、恢复步骤:

(1)首先,解压最新的全量备份文件,进入备份文件目次,执行:
  1. #tar -zxvf XXX.sql.tgz
复制代码


(2)检察全备之后新增的binlog文件,执行:
  1. #grep CHANGE XXX.sql
复制代码

由图可知,这是全备时候的binlog文件位置,即mysql-bin.000003的154行,因此在该文件之前的binlog文件中的数据都已经包罗在这个全备的sql文件中。

(3)恢复mysql-bin.000003文件的154行之后的信息

进入到mysql-bin.000003目次,执行(sysecokit为数据库名);
  1. #mysqlbinlog --start-position=154 --database=sysecokit mysql-bin.000003 | mysql -uroot -p -v sysecokit
复制代码
(4)将其他binlog文件(除去mysql-bin.000003)导出sql文件,执行(-d指定命据库):
  1. #mysqlbinlog -d sysecokit mysql-bin.00000X >00Xbin.sql
复制代码


(5) vim编辑最新的00Xbin.sql删除其中的drop语句
(6)恢复全备数据,执行:
  1. #mysql -uroot -p < XXX.sql
复制代码
如:#mysql -uroot -p < 20180716.sql
(7)恢复增量数据,执行(syseco为数据库名称):
  1. #mysql -uroot -p syseco<00Xbin.sql
复制代码
如:#mysql -uroot -p syseco<004bin.sql
自此,已经完成所有工作,让我们检察一下运行一周后产生的文件:



到此这篇关于mysql备份战略的实现(全量备份+增量备份)的文章就先容到这了,更多相干mysql备份战略内容请搜索草根技能分享以前的文章或继承浏览下面的相干文章希望大家以后多多支持草根技能分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作