shell mysql 备份_使用shell自动备份数据库

这是一个关于MySQL数据库的全量备份、增量备份以及删除过期备份的自动化脚本。脚本中包含了检查用户输入、创建备份目录、执行mysqldump进行全量备份、删除指定天数前的备份数据等功能。同时,还提供了增量备份的实现,通过mysqlbinlog获取一天内的增量数据。整个流程中,脚本会记录日志并根据配置删除过期备份,确保数据管理和存储的有效性。
摘要由CSDN通过智能技术生成

全备份

#!/bin/sh

#mysql地址

#检测用户是否手动输入了密码

mysql_host=""

#mysql用户

mysql_user=""

#mysql密码

mysql_password=""

#mysql数据库名

#如果不填写需要导出的数据库名称提示错误信息并终止执行,注意[]里面两边必须有空格

if [ ! -n "$1" ];then

echo "您没有输入数据库名称"

echo "格式:xxx.sh 数据库名称"

exit

fi

mysql_name="$1"

#mysql安装路径

mysql_path="/usr/bin/"

#备份文件存放路径

bak_path="/root/shell/mysqlBak/${mysql_name}"

#删除过期数据 true代表是 false代表否

delete_overdue_data="true"

#删除多少天前数据 默认30天

delete_overdue_data_days=30

#检测目录是否存在,如果不存在自动创建目录

if [ ! -x "${bak_path}" ];then

mkdir "${mysql_name}"

chmod 755 "${bak_path}"

fi

#备份时间

bak_date=`date +%F`

${mysql_path}/mysqldump --opt -u${mysql_user} -p${mysql_password} -h${mysql_host} ${mysql_name} | gzip > ${bak_path}/${bak_date}.sql.gz

#检测是否删除过期数据

if [ "${delete_overdue_data}" != "true" ];then

echo "备份数据完成..."

exit

fi

#删除过期备份数据

#获取今天日期

the_date_today=`date +%Y%m%d`

#获取要删除的文件

find_date_file=`date -d "${the_date_today} ${delete_overdue_data_days} days ago" "+%Y-%m-%d"`

#进入指定目录

cd ${bak_path}

#查找要删除的数据

ls -l|grep ${find_date_file}

#取得查找结果0不存在 1存在

result=$?

echo ${result}

if [ ${result} == 0 ];then

echo "删除过期数据"

`rm -f ${find_date_file}.*`

fi

全量备份

#!/bin/bash

# Name:qbk全备份脚本

# mysql qbk scripts

# By zxsdw.com

# Last Modify:2015-01-21

#定义脚本存放路径

#scriptsDir=/usr/sbin

#定义用户名及密码

user=root

userPWD=密码

#定义要备份的数据库

database=数据库

#定义完全备份文件存放路径

bakDir=/backup/mysql

#eMailFile=$bakDir/email.txt

#eMail=admin@zxsdw.com

#定义日志文件

LogFile=$bakDir/mysqlbak.log

DATE=`date +%Y%m%d`

echo " " >> $LogFile

echo " " >> $LogFile

echo "--------------------------" >> $LogFile

echo $(date +"%y-%m-%d %H:%M:%S") >>$LogFile

echo "-----------------" >> $LogFile

cd $bakDir

DumpFile=$DATE.sql.gz

mysqldump --flush-logs -u$user -p$userPWD --quick $database| gzip >$DumpFile

echo "Dump Done" >> $LogFile

echo "[$DumpFile]Backup Success!" >> $LogFile

daily_databakDir=$bakDir/daily_backup

cd $bakDir/daily_backup

find $daily_databakDir -name "daily*" -type f -mtime +35 -exec rm {} \; > /dev/null 2>&1

增量备份脚本:

#!/bin/bash

# Name:zbk增量备份

# mysql zbk scripts

# By zxsdw.com

# Last modify:2015-01-21

#定义数据库用户名及密码

user=root

userPWD=密码

#定义数据库

database=数据库

#生成一个新的mysql-bin.00000X文件,如果err日志被清除,则自动新建一个。

/usr/local/mysql/bin/mysqladmin -u$user -p$userPWD flush-logs

#定义增量备份位置

daily_databakDir=/backup/mysql/daily_backup

#定义MYSQL数据日志目录

mysqlDataDir=/usr/local/mysql/var

#定义增量日志及目录

eMailFile=$daily_databakDir/email.txt

#eMail=admin@zxsdw.com

#定义变量DATE格式为20150127

DATE=`date +%Y%m%d`

#定义一个总的logFile日志

logFile=$daily_databakDir/mysql$DATE.log

#美化日志模板

echo " " > $eMailFile

echo "-----------------------" >> $eMailFile

#时间格式为15-01-27 01:06:17

echo $(date +"%y-%m-%d %H:%M:%S") >> $eMailFile

echo "-------------------------" >> $eMailFile

#定义删除bin日志的时间范围,格式为20150124010540

TIME=$(date "-d 3 day ago" +%Y%m%d%H%M%S)

#定义需要增量备份数据的时间范围,格式为2015-01-26 01:04:11

StartTime=$(date "-d 1 day ago" +"%Y-%m-%d %H:%M:%S")

###########开始删除操作美化日志标题##############

echo "Delete 3 days before the log" >>$eMailFile

#删除三天前的bin文件,及更新index里的索引记录,美化日志标题

mysql -u$user -p$userPWD -e "purge master logs before ${TIME}" && echo "delete 3 days before log" |tee -a $eMailFile

#查找index索引里的bin 2进制文件并赋值给 i。

filename=`cat $mysqlDataDir/mysql-bin.index |awk -F "/" '{print $2}'`

for i in $filename

do

#########开始增量备份操作,美化日志标题###########

echo "$StartTime start backup binlog" >> $eMailFile

#利用mysqlbinlog备份1天前增加的数据,并gzip压缩打包到增量备份目录

/usr/local/mysql/bin/mysqlbinlog -u$user -p$userPWD -d $database --start-datetime="$StartTime" $mysqlDataDir/$i |gzip >> $daily_databakDir/daily$DATE.sql.gz |tee -a $eMailFile

done

#如果以上备份脚本执行成功,接着运行下面的删除脚本

if [ $? = 0 ]

then

# 删除mtime>32的增量日志备份文件

find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1

cd $daily_databakDir

echo "Daily backup succeed" >> $eMailFile

else

echo "Daily backup fail" >> $eMailFile

#mail -s "MySQL Backup" $eMail < $eMailFile #备份失败之后发送邮件通知

#fi结束IF判断

fi

#把变量eMailFile的内容替换logFile内容

cat $eMailFile > $logFile

#如果上面的IF判断失败,再次运行删除mtime>32的增量日志备份文件

find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1

### 回答1: 好的,以下是一个备份MySQL数据库Shell脚本示例: ```bash #!/bin/bash # MySQL数据库备份脚本 # 设置备份文件名和目录 BACKUP_DIR="/var/backups/mysql" DATE=$(date +%Y-%m-%d_%H-%M-%S) DB_NAME="mydatabase" FILENAME="$BACKUP_DIR/$DB_NAME-$DATE.sql" # 设置MySQL登录信息 MYSQL_USER="root" MYSQL_PASSWORD="password" # 执行备份 mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD $DB_NAME > $FILENAME # 压缩备份文件 gzip $FILENAME # 删除7天前的备份文件 find $BACKUP_DIR -type f -name "*.gz" -mtime +7 -exec rm {} \; ``` 上述脚本将会备份名为 "mydatabase" 的MySQL数据库,并将备份文件保存在 "/var/backups/mysql" 目录下。脚本将创建一个新的备份文件名,格式为 "mydatabase-YYYY-MM-DD_HH-MM-SS.sql",其中 "YYYY-MM-DD_HH-MM-SS" 是当前日期和时间。备份完成后,脚本将使用 gzip 压缩备份文件,并删除7天前的备份文件。 请注意,为了安全起见,建议将MYSQL_USER和MYSQL_PASSWORD的值设置为有效的MySQL用户名和密码,而不是将其硬编码在脚本中。 ### 回答2: shell脚本备份MySQL数据库是一种自动化的数据库备份方式,它通过编写shell脚本来实现备份任务的执行。下面是一个简单的用于备份MySQL数据库shell脚本示例: #!/bin/bash # 设置备份目录 BACKUP_DIR="/opt/backup/db" # 设置MySQL登录信息 DB_USER="root" DB_PASSWORD="yourpassword" # 设置备份文件名 BACKUP_FILE="db_backup_$(date +%Y%m%d%H%M%S).sql" # 创建备份目录 mkdir -p $BACKUP_DIR # 备份MySQL数据库到指定目录 mysqldump -u $DB_USER -p$DB_PASSWORD --all-databases > $BACKUP_DIR/$BACKUP_FILE # 判断备份是否成功 if [ $? -eq 0 ]; then echo "MySQL数据库备份成功,备份文件名为:$BACKUP_FILE" else echo "MySQL数据库备份失败" fi 在上述脚本中,首先定义了备份目录、MySQL登录信息和备份文件名的变量。然后,通过mkdir命令创建备份目录。接下来,使用mysqldump命令将MySQL数据库备份到指定目录,并将备份文件命名为当前日期和时间。最后,通过判断mysqldump命令执行的返回值来确定备份是否成功,并输出相应的提示信息。 使用该脚本进行MySQL数据库备份只需在终端中执行bash命令加上脚本路径即可,如:bash /path/to/backup_mysql.sh。执行完毕后,备份文件将保存在指定的备份目录中。 这种shell脚本备份MySQL数据库的方式可以自动化执行备份任务,提高工作效率,同时也方便了备份文件的管理和查找。 ### 回答3: shell脚本备份MySQL数据库是通过编写一个脚本文件来实现自动备份和恢复MySQL数据库的操作。下面是一个简单的示例: #!/bin/bash # Shell脚本备份MySQL数据库 # 定义备份存储目录和时间戳 backup_dir="/path/to/backup" timestamp=$(date +%Y%m%d%H%M%S) # 定义MySQL数据库的连接参数 db_user="root" db_password="password" db_host="localhost" db_name="database_name" # 创建备份目录 if [ ! -d "$backup_dir" ]; then mkdir -p $backup_dir fi # 使用mysqldump命令备份数据库 mysqldump -u$db_user -p$db_password -h$db_host $db_name > $backup_dir/${db_name}_${timestamp}.sql # 检查备份是否成功 if [ $? -eq 0 ]; then echo "数据库备份成功!" else echo "数据库备份失败!" fi # 清理过期备份(保留最新的N个备份) backup_count=$(ls -l $backup_dir | grep -c "^-" 2>/dev/null) if [ $backup_count -gt 10 ]; then oldest_backup=$(ls -tr $backup_dir | head -1) rm -f $backup_dir/$oldest_backup fi # 恢复MySQL数据库(如果需要) # mysql -u$db_user -p$db_password -h$db_host -e "DROP DATABASE $db_name;" # mysql -u$db_user -p$db_password -h$db_host -e "CREATE DATABASE $db_name;" # mysql -u$db_user -p$db_password -h$db_host $db_name < $backup_dir/latest.sql 这个脚本的功能是备份指定的MySQL数据库,将备份文件保存到指定的目录中,并可根据需要恢复数据库。脚本中使用mysqldump命令来导出数据库,并使用mysql命令来恢复数据库备份文件保留最新的10个,超过数量的将自动删除最旧的备份文件。可以根据实际需求修改备份目录、数据库连接参数和保留备份数量等设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值