windows/linux自动备份mysql并删除7天前的备份

2 篇文章 0 订阅
2 篇文章 0 订阅

自动备份mysql数据库脚本程序

备份会不断占用磁盘大小,需要删除早期的备份

一.windows系统

1.D盘根目录创建bkupmysql.bat文件,复制以下内容

@echo off
cls
set dbuser=root
set dbpass=passwd
set DaysAgo=7
set mysqlpath=d:\mysqlbak
set mysql=D:\SOFT_PHP_PACKAGE\mysql\bin\mysql.exe
set mysqldump=D:\SOFT_PHP_PACKAGE\mysql\bin\mysqldump.exe
set dt=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%
set logfile=d:\bkinfo.log
set logfail=d:\bkfail.log
if not exist "%mysqlpath%"  md "%mysqlpath%"
for /f "delims=" %%i in ('%mysql% -u%dbuser% -p%dbpass% -e"show databases"^|findstr -v "^Database$ ^test$ ^information_schema$ ^performance_schema$ ^mysql$"') do (
%mysqldump% -f -u%dbuser% -p%dbpass% %%i >%mysqlpath%\%%i-%dt%.sql 2>>%logfail% 
If  %errorlevel%==0 (
forfiles /p %mysqlpath% /s /m %%i-*.* /d -%DaysAgo% /c "cmd /c  del /f /q /a @path"
echo %date%   sucess    %%i >>%logfile%
) else (
echo %date%   fail      %%i >>%logfile%
)
)

 

2.添加任务计划每天4点执行

schtasks /create /tn "bkupmysql" /ru system /tr d:\bkupmysql.bat /sc daily /st 04:00

 

二.linux系统

1.创建bkupmysql.sh,复制以下内容

#!/bin/bash
dbuser='root'
dbpass='passwd'
DaysAgo=7
mysqlpath='/home/backup/mysql'
mysql='/www/wdlinux/mysql/bin/mysql'
mysqldump='/www/wdlinux/mysql/bin/mysqldump'
exclude_db='^Database$\|^mysql$\|^information_schema$\|^performance_schema$\|^test$'
logfile='/root/bkinfo.log'
#logfail='/root/bkfail.log'
now=`date "+%Y-%m-%d %H:%M:%S"`
echo $now
test -e $mysqlpath||mkdir -p $mysqlpath
db_array=`$mysql -u$dbuser -p$dbpass -e'show databases;'|grep -v $exclude_db`
if [ $? -eq 0 ];then
   for dbname in ${db_array[*]}
   do
      $mysqldump -f -u$dbuser -p$dbpass $dbname >$mysqlpath/$dbname-$(date +%Y%m%d%H%M%S).sql
      if [ $? -eq 0 ];then
          find $mysqlpath -type f -mtime +$[DaysAgo-1] -name "$dbname-*" -exec rm -f {} \;
          echo $now 'sucess'    $dbname >> $logfile
      else
          echo $now 'fail  '    $dbname >> $logfile
      fi
   done
else
   echo $now 'All fail' >> $logfile
fi

2.添加任务计划每天4点执行

crontab -e
0 4 * * * /bin/sh /root/bkupmysql.sh >>/root/bkfail.log 2>&1
您可以使用`cron`定时任务来实现定时备份MySQL数据库,并设置备份数据只保留7。 首先,您需要创建一个Shell脚本来执行MySQL备份操作。打开一个文本编辑器,输入以下内容: ```bash #!/bin/bash # 定义备份目录和文件名 backup_dir="/path/to/backup/directory" backup_file="mysql_backup_$(date +%Y%m%d%H%M%S).sql" # 执行备份命令 mysqldump -u <username> -p<password> <database_name> > "$backup_dir/$backup_file" # 删除旧的备份文件 find "$backup_dir" -name "mysql_backup_*" -type f -mtime +7 -exec rm {} \; ``` 请确保将`/path/to/backup/directory`替换为实际的备份目录,并将`<username>`、`<password>`和`<database_name>`替换为实际的MySQL用户名、密码和数据库名。 保存脚本文件,并赋予执行权限: ```bash chmod +x mysql_backup.sh ``` 接下来,您需要设置一个cron定时任务来定期执行该脚本。运行以下命令编辑cron表: ```bash crontab -e ``` 在打开的文件中添加以下行,每执行一次备份任务(此处假设您希望在每的凌晨1点执行): ``` 0 1 * * * /path/to/mysql_backup.sh ``` 保存并关闭文件。现在,每凌晨1点,cron将自动执行您的备份脚本,并将生成的备份文件保存在指定的目录中。旧的备份文件将在每次备份时被删除,以确保只保留最近7备份数据。 请注意,为了安全起见,确保仅允许具有足够权限的用户访问备份目录和脚本文件,并妥善保管MySQL数据库的用户名和密码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值