MySQL完全备份脚本:数据+二进制日志+备份日志

一. 脚本须知

  1.mysql数据文件和二进制日志文件最好保存在不同的分区或存储设备上

  2.备份完成后注意修改数据的权限以防止泄露重要信息,哪些主机哪些用户可以用来恢复

  3. 查看导出的2进制日志文件看是否符合逻辑和业务,2进制日志文件只能保证物理上数据即时点还原,却保证不了数据逻辑上正确恢复(比如drop语句)

  4.为了保证数据恢复没有问题建议在测试机上做一次数据恢复测试

  5.恢复测试OK可以放到crontab定时任务中

 1 #!/bin/bash
 2 #
 3 # Function:实现mysql完全备份
 4 # Notes:
 5
 6 # 定义备份使用到的相关变量(需要根据用户实际环境做相应的修改)
 7 backup_data=/backup/mysql/full
 8 backup_binlog=/backup/mysql/logbin
 9 mysql_binlog=/mydata/log-bin
10 mysql_bin_path=`ps -ef | grep -E "mysqld[[:space:]]+" | awk -F ‘ ‘ ‘{ print $8 }‘ | sed -r ‘[email protected][^/]+/[email protected]@‘`
11 mysql_user=root
12 mysql_password=mysqldba
13 logfile=/var/log/mysqldump.log
14
15 # 函数定义
16
17 ########################[MySQL健康检测]######################
18 health_check() {
19 if pgrep mysqld &> /dev/null;then
20     mysqld_pid=`pgrep -l mysqld | grep -E "mysqld\>" | awk ‘{ print $1 }‘`
21     echo "$(date +"%Y-%m-%d %H:%M:%S") $mysqld_pid [Note] Server Mysql is Running ..." >> $logfile
22 else
23     service mysqld start &> /dev/null || echo "$(date +"%Y-%m-%d %H:%M:%S") [Warning] Server MySQL is not running, backup failed" >> $logfile && return 5
24 fi
25 }
26
27 #######################[mysqldump完全备份]###################
28 full_backup(){
29 local backup_name=full-`date +%F-%T`.sql
30 [ ! -d $backup_data ] && mkdir -p $backup_data
31 ${mysql_bin_path}mysqldump -u$mysql_user -p$mysql_password --all-databases --lock-all-tables  --flush-logs --master-data=2 32 --triggers --routines --events --set-gtid-purged=off -r ${backup_data}/$backup_name &> /dev/null
33 if grep -q "CHANGE MASTER TO" ${backup_data}/$backup_name ;then
34     return 0
35 else
36     return 5
37 fi
38 }
39
40 ########################[Mysql 二进制日志备份]#####################
41 bin_backup(){
42 [ ! -d $backup_binlog ] && mkdir -p $backup_binlog
43 cd $mysql_binlog
44 tar -jcf bin-`date +"%F-%H‘%M‘%S"`.tar.bz2 * &> /dev/null
45 \mv -f bin*.tar.bz2 $backup_binlog
46 }
47
48 # 主函数main
49
50 health_check
51 if [ $? -eq 0 ];then
52     echo "$(date +"%Y-%m-%d %H:%M:%S") [Note] MySQL full backup start ..." >> $logfile
53 else
54     echo "$(date +"%Y-%m-%d %H:%M:%S") [Warning] Server MySQL is not running, backup failed" | mail -s "mysql backup is failed" [email protected]`hostname`
55 fi
56 full_backup
57 if [ $? -eq 0 ];then
58     echo "$(date +"%Y-%m-%d %H:%M:%S") [Note] MySQL full backup is finished" >> $logfile
59     chmod -R 600 $backup_data
60 else
61     echo "$(date +"%Y-%m-%d %H:%M:%S") [Warning] Function full_backup() execution failed, backup was interrupted" | cat | tee -a $logfile | mail -s "mysql backup is failed" [email protected]`hostname`
62 fi
63 echo "$(date +"%Y-%m-%d %H:%M:%S") [Note] MySQL binary log file backup is started ..." >> $logfile
64 bin_backup
65 if [ $? -eq 0 ];then
66     echo "$(date +"%Y-%m-%d %H:%M:%S") [Note] MySQL binary log file backup is finished " >> $logfile
67     chmod -R 600 $backup_binlog
68 else
69     echo "$(date +"%Y-%m-%d %H:%M:%S") [Warning] Mysql binary log file backup is not completed" | cat | tee -a $logfile | mail -s "mysql binary log backup failed" [email protected]`hostname`
70 fi 

二.实例效果图

脚本执行完查看备份数据和日志

 

脚本执行过程跟踪

加入crontab任务

 

时间: 2024-10-30 23:32:55

MySQL完全备份脚本:数据+二进制日志+备份日志的相关文章

使用innobackupex命令备份数据库数据时报错提示日志文件大小与配置文件中的设定不一致解决方法

问题说明: 在使用xtrabackup工具备份mariadb数据库时提示如下错误: InnoDB: Error: log file ./ib_logfile0 is of different size 5242880 bytes InnoDB: than specified in the .cnf file 50331648 bytes! innobackupex: Error: The xtrabackup child process has died at /usr/bin/innoback

mysql单表导入数据,全量备份导入单表

(1)"导出"表 导出表是在备份的prepare阶段进行的,因此,一旦完全备份完成,就可以在prepare过程中通过--export选项将某表导出了: innobackupex --apply-log --export /backup/xbackup/full/ #这个需要在备份的目录下面执行. 后面的路径是备份的目录.(重要) 不是自己定义的目录. # innobackupex --apply-log --export /path/to/backup innobackupex --a

测试必备技能系列1 :通过mysql命令进行脚本数据导入

老徐,分享测试项目中实际能解决问题的干货! 今日分享: 如何通过mysql命令行,导入mysql脚本文件数据? ----- 解决实际的问题: 工作过程中,经常需要导入mysql脚本文件 很多同学可能会说,直接通过mysql客户端导入,轻松搞定: 但是,很多服务器,为了安全考虑,并不会开放第三方客户端登录权限(当然有很多其他方式处理,今天不探讨): 这个时候,怎么导入脚本? ----- 前提: 你已经会操作mysql 知道mysql是啥 会基本的mysql命令 知道 mysql -u root -

Xtrabackup全量备份/增量备份脚本

一.全量备份脚本 1.全量备份脚本 #!/bin/bash #Description:xtrabackup complete #Author:created by michael #2017-08-07 v0.1 # USER=root PASSWD=123456 BACKUP_DIR=/backup/mysql/complete DATE=$(date +"%F_%T") [[ -d $BACKUP_DIR ]] || mkdir $DATE_DIR innobackupex --u

实验:模拟场景中误删除mysql数据库表,然后使用全备份以及二进制日志文件恢复操作

一.实验环境: 1.准备两台虚拟机,一台用于破坏数据库,一台用于还原,两台在同一个网络 2.两台最小化安装centos 7系统,并直接yum安装maraidb数据库 3.准备一个测试数据库文件,例如,hellodb_innodb.mysql 测试库里面最少有两个表. 二.实验步骤: 1.开启数据库的二进制日志功能 vim /etc/my.cnf[mysqld] 下面加入log-bin 表示开启二进制日志功能 2.完全备份 mysqldump -A -F --master-data=2 --sin

MySQL数据备份脚本

#!/bin/bash #MySQL备份 dates=`date +%Y%m%d` datey=`date -d"30 days ago" +%Y%m%d` mkdir -p /home/backup cd /home/backup mysqldump -uroot -pwyqj_root fight_cancer > fight_cancer.$dates.sql mysqldump -uroot -pwyqj_root redmine > redmine.$dates.

脚本-每3天对数据库目录/var/lib/mysql做物理备份 把数据备份到系统/opt/dbbak目录

每3天对数据库目录/var/lib/mysql做物理备份 把数据备份到系统/opt/dbbak目录 #!/bin/bash DAY=`date+%Y-%m-%d` SIZE=`du-sh /var/lib/mysql` cd/opt/dbbak  2> /dev/null  || mkdir /opt/dbbak echo"Date: $DAY" > /opt/dbbak/dbinfo.txt echo"Total Database Size: $SIZE&quo

MySQL备份脚本V2(添加日志功能及备份后检查)

备份脚本 #!/usr/bin/env python #_*_coding:utf-8_*_ """ @File: backup_db.py @Author: OldTan @Email: [email protected] @Last Modified: 20180408 """ import os import datetime from threading import Thread from logs import log HOST = 

mysql innobackupex xtrabackup 大数据量 备份 还原(转)

原文:http://blog.51yip.com/mysql/1650.html 作者:海底苍鹰 大数据量备份与还原,始终是个难点.当MYSQL超10G,用mysqldump来导出就比较慢了.在这里推荐xtrabackup,这个工具比mysqldump要快很多. 一.Xtrabackup介绍 1,Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtra