MySQL自动化运维之用mysqldump和mysqlbinlog实现某一数据库的每周全备和每天差异备份,并添加到执行计划【热备】

案例:

线上有一数据库,需要每周全备一次,每天差备一次[安全起见还是差备吧,不要增备,不要吝啬磁盘哦,而且差备恢复还很快]

1、每周对数据库hellodb做完全备份

crontab任务计划:

10 01 * * 1 /bin/bash /work/dump-complete-hello.sh          ===>每周周一凌晨1点10分执行全备脚本/work/dump-complete-hello.sh

全备脚本/work/dump-complete-hello.sh内容如下:

#!/bin/bash
# 全备文件存放位置
weekbackup=/complete/hello-`date +%F`.sql
# 用mysqldump执行全备
# --database后跟要备的数据库
# --master-data记录CHANGE MASTER TO语句,2表示把这一行注释
# --flush-logs锁定表之后执行flush logs命令,切换binlog文件
# --single-transaction:单个事物,由于数据库hellodb里面的表都是innodb存储引擎,支持事物,可以保证备份时数据处于一致状态
/usr/local/mysql/bin/mysqldump --database hellodb --master-data=2 --flush-logs --single-transaction > $weekbackup
# 后边的语句是为了创建一个存放全备文件存放位置的语句,增量备份时需要用到
cat > weekbackup.sh << EOF
#!/bin/bash
EOF
echo "wb=$weekbackup" >> weekbackup.sh

2、每日对数据库hellodb做差异备份:

crontab 任务计划:

20 02 * * * /bin/bash /work/dump-incre.sh ==>每天凌晨2点20分执行差备脚本/work/dump-incre.sh

差备脚本/work/dump-incre.sh内容如下:

#!/bin/bash
# source 一下/work/weekbackup.sh,该脚本是由最近一次全备脚本产生的,提供全备文件存放位置
. /work/weekbackup.sh
# 获取当前数据库使用的二进制文件
binlog=`/usr/local/mysql/bin/mysql -e ‘show master status‘ | grep ‘bin‘ | awk ‘{print $1}‘`
# 从最近一次全备文件中获取全备终止time
time=grep ‘completed‘ $wb | awk ‘{printf "%s %s\n",$5,$6}‘

# 通过mysqlbinlog对数据库hellodb进行差异备份
# --start-position 指明增量备份的起始position,其值为全备的终止position
# /var/log/mysql/binarylog/$binlog 为当前数据库正在使用的二进制日志文件
/usr/local/mysql/bin/mysqlbinlog --start-datetime="$time" /var/log/mysql/binarylog/$binlog > /increment/incre-`date +%F%H%M%S`.sql

3、恢复测试:

全备恢复:

[[email protected] data]# mysql < /complete/hello-2015-01-13.sql
            [[email protected] data]# mysql
            Welcome to the MariaDB monitor.  Commands end with ; or \g.
            Your MariaDB connection id is 7
            Server version: 5.5.36-MariaDB-log MariaDB Server
            Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
            Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
            MariaDB [(none)]> show databases;
            +--------------------+
            | Database           |
            +--------------------+
            | information_schema |
            | hellodb            |
            | mysql              |
            | newdb              |
            | performance_schema |
            | tempdb             |
            | test               |
            +--------------------+
            7 rows in set (0.00 sec)
            MariaDB [(none)]> use hellodb;
            Database changed
            MariaDB [hellodb]> show tables;
            +-------------------+
            | Tables_in_hellodb |
            +-------------------+
            | classes           |
            | coc               |
            | courses           |
            | scores            |
            | students          |
            | teachers          |
            | toc               |
            +-------------------+
            7 rows in set (0.00 sec)

差备恢复:

[[email protected] data]# mysql < /increment/incre-2015-01-13.sql
            [[email protected] data]# mysqll
            -bash: mysqll: command not found
            [[email protected] data]# mysql
            Welcome to the MariaDB monitor.  Commands end with ; or \g.
            Your MariaDB connection id is 9
            Server version: 5.5.36-MariaDB-log MariaDB Server
            Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
            Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
            MariaDB [(none)]> use hellodb;
            Database changed
            MariaDB [hellodb]> show tables;
            +-------------------+
            | Tables_in_hellodb |
            +-------------------+
            | classes           |
            | coc               |
            | courses           |
            | scores            |
            | students          |
            | tb1               |
            | teachers          |
            | toc               |
            +-------------------+
            8 rows in set (0.00 sec)
            MariaDB [hellodb]> select * from tb1;
            +------+
            | name |
            +------+
            | wjs  |
            +------+
            1 row in set (0.01 sec)

从上面的结果可知全备和差异备份都可恢复,那就可以投入正常使用了,可以交差了 ,哈哈

时间: 2024-08-28 16:17:02

MySQL自动化运维之用mysqldump和mysqlbinlog实现某一数据库的每周全备和每天差异备份,并添加到执行计划【热备】的相关文章

MySQL自动化运维平台建设

MySQL自动化运维工具Inception 一.Inception简介 Inception是集审核.执行.回滚于一体的一个自动化运维系统,它是根据MySQL代码修改过来的,用它可以很明确的,详细的,准确的审核MySQL的SQL语句,它的工作模式和MySQL完全相同,可以直接使用MySQL客户端来连接,但不需要验证权限,它相对应用程序(上层审核流程系统等)而言,是一个服务器,在连接时需要指定服务器地址及Inception服务器的端口即可,而它相对要审核或执行的语句所对应的线上MySQL服务器来说,

自动化运维—tomcat服务起停(mysql+shell+django+bootstrap+jquery)

项目简介: 项目介绍:自动化运维是未来的趋势,最近学了不少东西,正好通过这个小项目把这些学的东西串起来,练练手. 基础架构: 服务器端:web框架-Django 前端:html css jQuery bootstrap 脚本:shell 适用系统:redhat5.8/redhat6.6 平台已实现功能: 中间件和数据库软件的启停和状态检查 (tomcat,nginx,apache,oracle,mysql) 完整功能设计图: 效果图: 架构图(简要): 项目源码:https://github.c

MySQL数据库性能优化及自动化运维实践教程!DBA日常工作

MySQL数据库性能优化及自动化运维实践教程!本文作者将站在更加全面的角度分享他在这一年多 DBA 工作中的经验,希望可以给大家带来启发和帮助. DBA 的日常工作 我觉得 DBA 真的很忙,我们来看看 DBA 的具体工作:备份和恢复.监控状态.集群搭建与扩容.数据迁移和高可用. 上面这些是我们 DBA 的功能,了解这些功能以后要对体系结构有更加深入的了解,你不知道怎么处理这些故障和投诉的事情. 所以我们要去了解缓存/线程.SQL 优化.存储引擎.SQL 审计以及锁与实务:体系结构更深一点,就去

cheungssh自动化运维

CheungSSH自动化运维部署 1.安装包 CheungSSH.tar.gz # tar zxf CheungSSH.tar.gz # cd bin/ # sh install-CheungSSH.sh 注: 服务器ip填写本地ip:192.168.36.129 选择yum安装 若提示数据库错误,要安装musql进行mysql_secure_installtion进行root密码设置 再执行sh install-CheungSSH.sh输入mysql的root密码,mysql服务器选择127.

新书《Linux集群和自动化运维》目录

推荐序一 在全球"互联网+"的大背景下,互联网创业企业的数量如雨后春笋般大量产生并得到了快速发展!对"互联网+"最有力的支撑就是Linux运维架构师.云计算和大数据工程师,以及自动化开发工程师等! 但是,随着计算机技术的发展,企业对Linux运维人员的能力要求越来越高,这就使得很多想入门运维的新手不知所措,望而却步,甚至努力了很久却仍然徘徊在运维岗位的边缘:而有些已经工作了的运维人员也往往是疲于奔命,没有时间和精力去学习企业所需的新知识和新技能,从而使得个人的职业发

Ansible自动化运维工具部署及使用

一.Ansible介绍 1.简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inven

漫谈自动化运维——实现标准化

自动化介绍 和大数据.云计算一起热火朝天的就是自动化运维了,然后就有了现在很火的职位DevOps.各个培训机构雨后春笋般,推出了Python自动化运维培训.不知道培训的效果怎样.但是感觉有点误导的意味. 有个朋友参加了某培训机构的Python自动化运维培训,培训完后就给我说他要做自动化运维.当时我就懵圈了,在想他都没做过运维就培训了下Python,然后直接可以实现自动化运维了.仔细聊了以下,原来是他想多了,他所说的只是实现了自动化最后的一步--平台化. 所谓运维自动化就是将日常运维中大量的重复性

自动化运维工具Ansible之Playbooks循环语句

在使用ansible做自动化运维的时候,免不了的要重复执行某些操作,如:添加几个用户,创建几个MySQL用户并为之赋予权限,操作某个目录下所有文件等等.好在playbooks支持循环语句,可以使得某些需求很容易而且很规范的实现. with_items是playbooks中最基本也是最常用的循环语句. - name: add several users   user: name={{ item }} state=present groups=wheel   with_items:      - t

企业实战脚本案例3:批量管理自动化运维100台小规模服务器

批量管理自动化运维100台小规模服务器 目录 1.脚本背景介绍 2.脚本技术需求分析 2.1 SSH免登陆认证 2.2 Expect实现key分发 2.2 PSSH家族命令详解 3.脚本功能及实现过程 3.1 脚本运行环境介绍 3.2 脚本功能介绍 3.3 脚本编写思路 3.4 脚本编写案例 一.脚本背景介绍 在企业中经常会用遇到小规模的集群服务器,在日常的管理中经常会遇到重复性的动作,如更新备上百台服务器上的ssh公钥.备份上百台服务器上的/etc/passwd配置文件等等,通常情况下采用专用