1 功能介绍
脚本名 bakrec_mysql.sh
脚本存放路径 保证统一
备份路径 须根据具体服务器的分区情况,放到一个剩余空间较大的分区.
备份目录名 统一为backupdb
各个参数说明如下:
-a: backup all database #全库备份
-e: backup each database#分库备份
-d: backup single/multi database#备份指定的一个库或者多个库
-t: backup single/multi table of single database#备份一个库下面的一个表或者多个表
-b: backup binlog#备份binlog日志,备份过程,每次记录最后的二进制文件号,将之前范围内的binlog打包(bz2格式),放在$DIR_BACKUP目录下
-r: recover all database(!require password!)#恢复全库,为保安全,恢复时需要输入密码
-o: recover single database/talbe,you should be designation database name(!require password!)#恢复单库或单表,恢复时需要输入密码
-p: create connect mysql password#创建连接mysql的密码文件,存放位置$DIR_MySQL/etc目录下,权限是600
-s: configuration rsyncd#创建rsyncd服务(因backup机上有rsyncd服务,故不需要在每台DB server上创建rsyncd服务)
If you want ceate a rsyncd, you should enter 'bakrec_mysql.sh -s cet'
If you want restart rsyncd, you should enter 'bakrec_mysql.sh -s rst'
-c: sync to backup center#同步到backup机
2 备份策略 2.1 分库备份
在脚本的LIST_EXCLUDE_DB='(test|information_schema|performance_schema)'可以过滤不备份的数据库.
备份路径 根据服务器具体分区情况而定
备份目录名统一 backupdb
关于是否打开binlog的函数解释
function backup()
{
read_pwd
LOGBIN_STATUS=`$CMD_MYSQL -u$USER -p$PASSWD -N -s -e "SHOW VARIABLES LIKE 'log_bin'" | gawk '{print $2}'`
if [ $LOGBIN_STATUS = "ON" ]; then
MASTER='--master-data=2'
else
MASTER=' '
fi
}
这个函数的功能是检测MySQL服务器有没有打开binlog日志,如果打开,则在备份的时候添加--master-data=2这个参数,否则不添加.
分库备份在脚本中的实现函数为backup_each
function backup_each()
{
backup
for db in $($CMD_MYSQL -u$USER -p$PASSWD -N -s -e "SHOW DATABASES"|egrep -v $LIST_EXCLUDE_DB)
do
$CMD_MYSQLDUMP -u$USER -p$PASSWD -x -R $MASTER $db --databases |gzip >$HOSTNAME.$db.$TIME.sql.gz
done
# delete 7 days ago
for db in $($CMD_MYSQL -u$USER -p$PASSWD -N -s -e "SHOW DATABASES"|egrep -v $LIST_EXCLUDE_DB)
do
if [ ! -f $HOSTNAME.$db.$TIME_7.sql.gz ]; then
echo
else
rm $HOSTNAME.$db.$TIME_7.sql.gz -f
fi
done
}
功能说明:
依次备份除列表之外的所有库,在本机会自动删除7天之前的备份
2.2 binlog备份
binlog备份在脚本中的实现函数为backup_binlog
function backup_binlog()
{
if [ -s $DIR_BACKUP/mysql-bin.queue ]; then
read POS < $DIR_BACKUP/mysql-bin.queue
cd $DIR_DATA
tar -jcvf $DIR_BACKUP/$TIME_YM/$HOSTNAME.$POS.$TIME.bz2 `gawk -F'/' '{print $2}' $BINLOG_NAME.index |sed -n "/$POS/,//p"`
cd -
if [ -f $DIR_BACKUP/$TIME_YM/$HOSTNAME.$POS.$TIME_7.bz2 ]; then
rm $DIR_BACKUP/$TIME_YM/$HOSTNAME.$POS.$TIME_7.bz2 -f
fi
fi
# write last pos
gawk -F'/' '{print $2}' $DIR_DATA/$BINLOG_NAME.index | tail -n 1 >$DIR_BACKUP/mysql-bin.queue
}
逻辑如下:
1,如果检测到$DIR_BACKUP/mysql-bin.queue这个文件,并且文件大小大于0个字节.则读取这个文件内容,并付给变量POS,然后执行tar –jcvf命令,并删除7天之前的备份,否则直接执行gawk命令.
2,gawk命令的意思是把当前binlog日志的编号记录到$DIR_BACKUP/mysql-bin.queue文件内.
2.3 推到备份机
实现功能代码如下
c)
rsync -czrpt --password-file=$DIR_BIN/bakrec_mysql.password $DIR_BACKUP/$TIME_YM backupdbuser@192.168.0.1::backup/$HOSTNAME
result_status
;;
rsync参数的意思如下:
c: 打开校验开关,强制对文件传输进行校验
z: 对备份的文件在传输时进行压缩处理(节省网络带宽,消耗本机CPU)
r: 对子目录以递归模式处理
p: 保持文件权限
t: 保持文件时间信息
同步的目录$DIR_BACKUP/$TIME_YM
backup主机IP地址192.168.0.1
result_status函数功能,如果该语句执行失败,则发送邮件给db-request
2.4 backup机设置
在backup机上面修改rsync配置,添加模块backup上面的配置如下
uid = root
gid = root
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backupdb.cn5]
path = /backup
hosts allow = *
hosts deny = *
ignore errors
read only = no
list = no
auth users = user
secrets file = ****/password
说明
password为rsync连接的密码文件,格式
user:password
权限600
3 使用说明 3.1 定义变量
根据服务器情况,可能会修改如下变量
DIR_MYSQL='/usr/local/mysql'
DIR_BACKUP="/tmp/backup"
对于rpm安装,或者非常规的安装,可能还需要修改
CMD_MYSQLDUMP="$DIR_MYSQL/bin/mysqldump"
CMD_MYSQL="$DIR_MYSQL/bin/mysql"
3.2 创建MySQL密码文件
执行脚本,加-p参数,自动创建$DIR_MYSQL/etc/passwordfile文件,输入密码,脚本会自动写入该文件
# bash bakrec_mysql.sh -p
Please enter MySQL(user=root)'s password:
验证密码文件创建成功与否,以及权限600
# ls -l $FILE_PASSWD
查看密码文件内容
# cat $FILE_PASSWD
3.3 创建rsync密码文件
权限600
3.4 测试备份与推送
bash –x 脚本名 测试的参数
可以看到脚本的执行过程.
-c参数是将备份目录内容,推送到backup机
3.5 crontab设置
crontab执行脚本出错总结:
1) 脚本本身问题
2) 脚本执行权限问题
3) 脚本名字拼写问题,指定了错误的脚本名
4) 遗漏了脚本中需要的密码文件
5) 备份的目录不存在
相关推荐
"mysql自动实现备份脚本" 提供了一种高效的方法,通过编写Bash shell脚本来自动化这一过程。下面将详细介绍这个脚本的工作原理、重要性以及如何配置和使用。 1. **Bash脚本简介** Bash是Unix和Linux系统中的默认...
"Windows下MySql自动备份脚本(有备份日志,且可以删除历史备份)"的资源提供了一个解决方案,它是一个批处理脚本(MysqlAutoBackup.bat),能够自动化执行MySQL的备份过程,同时生成备份日志并清理历史备份。...
"mysql 自动备份数据库脚本" 提供了一种自动化的方法,通过Windows的定时任务服务(taskschd.msc)来定期执行数据库的备份,避免了手动操作的繁琐和可能的人为错误。 MySQL的自动备份主要涉及以下几个核心知识点: ...
以下是一些关于如何创建和使用MySQL自动备份shell脚本的详细说明: 首先,我们需要一个能够执行备份、压缩、清理旧备份并(可选地)将备份文件传输到远程位置或发送电子邮件通知的脚本。以下两个示例提供了不同选项...
### MySQL自动化备份方案详解 #### 一、方案背景与需求分析 在当今信息化时代,数据安全成为企业关注的焦点。数据库作为存储企业核心数据的重要工具,其安全性与稳定性至关重要。对于许多公司而言,数据库服务器...
### Linux平台Mysql自动备份脚本详解 #### 一、引言 在信息化时代,数据安全至关重要。数据库作为存储业务核心数据的关键组件,其稳定性和可靠性直接影响到整个系统的可用性。MySQL作为全球广泛使用的开源关系型...
MySQL自动备份数据库脚本是IT运维中的重要环节,它能够定期保存数据库数据,防止数据丢失,确保业务连续性。在本场景中,我们有一个名为`auto_mysql_back.sh`的shell脚本,它用于自动化MySQL数据库的备份过程。下面...
本文将详细解析如何使用提供的“Windows server服务器下MySql自动定时备份脚本-可以删除历史备份.zip”来实现这一目标。 该压缩包包含两个文件:`MySqlAutoBackup-1.4.bat`和`说明.txt`。`MySqlAutoBackup-1.4.bat`...
### MySQL备份脚本知识点解析 #### 一、脚本概述 该脚本主要实现了MySQL数据库的备份功能,并根据当前日期创建对应的备份文件夹与备份文件,同时对备份文件进行了压缩处理。此脚本适用于Windows环境。 #### 二、...
3. **自动化备份**:在批处理文件中,你可以设置一个定时任务(如 Windows 的计划任务)来定期执行这个命令。例如,你可以每天凌晨执行一次备份。 4. **考虑增量备份和差异备份**:除了全量备份,你还可以考虑实施...
### MySQL自动备份脚本知识点详解 #### 一、脚本背景及目的 本文介绍的MySQL自动备份脚本主要用于在线环境中对MySQL数据库进行定期备份,并同时实现了本地与远程FTP服务器的双重备份策略。此脚本已经经过了长时间的...
8. **自动化备份** 为了提高效率,通常会将备份脚本集成到自动化流程中,如使用Linux的cron job或者Windows的任务计划程序。 9. **备份策略** 根据业务的恢复点目标(RPO)和恢复时间目标(RTO),制定合适的备份策略...
最后,为了实现自动化,你需要将这个脚本添加到计划任务中。在Linux系统中,可以使用`cron`服务来安排任务。例如,如果你希望每天凌晨1点运行备份脚本,可以在crontab中添加以下条目: ```bash 0 1 * * * /path/to/...
这里我们关注的是使用shell脚本来实现MySQL的自动化备份。shell脚本是一种强大的工具,能够帮助我们编写一系列命令,实现批处理操作,提高工作效率。下面我们将深入探讨如何利用shell脚本来执行MySQL备份。 首先,...
MySQL自动备份脚本是数据库管理中的一个重要环节,它确保了数据的安全性和可恢复性。在IT行业中,数据丢失可能会导致重大损失,因此定期备份是非常必要的。以下是对标题和描述中涉及的知识点的详细说明: 1. **...
1、mysql数据库自动备份与清理2、支持mysql 5.7与mysql 8.03、基于mysql enterprise backup备份4、支持备份数据通过ftp上传或通过rsync上传5、支持自定义备份数据定期清理
`backup-3306.sh` 是一个针对MySQL服务端口3306的备份脚本。定期备份数据库至关重要,以防数据丢失或损坏。此脚本可能会包含连接到MySQL服务器、锁定表以防止数据更改、导出所有数据库或特定数据库、压缩备份文件并...
根据给定的文件信息,我们可以总结出以下关于MySQL备份脚本的重要知识点: ### MySQL备份脚本概述 在IT行业中,数据安全是至关重要的,而数据备份则是保障数据安全的关键环节之一。MySQL作为广泛使用的数据库管理...
一个典型的`xtrabackup`备份脚本可能包含以下部分: - **环境变量设置**:定义数据库连接信息,如用户名、密码、主机名等。 - **备份路径**:指定备份文件的存储位置。 - **备份操作**:根据需求选择全量或增量备份...
MySQL自动备份脚本是数据库管理中的重要工具,它能够定期保存数据库的数据,以防意外丢失或系统故障。在本文中,我们将深入探讨MySQL自动备份脚本的原理、编写方法以及如何利用shell脚本来实现这一功能。 首先,...