定时备份mysql数据库 并删除7天前的备份 (windows linux )

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
@echo off



: basedata
set ip=10.39.28.234
set user=root
set password=root1234
set databaseName=crm_cloud

set /a backupDays=7
set mysqlBinPath=C:\Program Files (x86)\MySQL\MySQL Server 6.0\bin\
set mysqlBackupPath=C:\mysql_back\

set logs=%mysqlBackupPath%\logs.txt
set day=%date:~7,2%
set month=%date:~4,2%
set /a year=%date:~10,4%


if not exist %mysqlBackupPath% md %mysqlBackupPath%
echo %year%-%month%-%day% >> %logs%

set backupingFilePath=%mysqlBackupPath%\%databaseName%_%year%-%month%-%day%.sql
cd /d %mysqlBinPath%

echo backupdata >> %logs%
set errorlevel=0
echo errorlevel=%errorlevel%
mysqldump -h%ip% -u%user% -p%password% --default-character-set=gbk --opt --extended-insert=false --triggers -R --hex-blob -x %databaseName%>%backupingFilePath%
set /a myerrorlevel=%errorlevel%
echo myerrorlevel=%myerrorlevel%
if %myerrorlevel% leq 0 (
if exist %backupingFilePath% (
echo backupcomplete mysqlBackup_%year%-%month%-%day%.sql
echo  backupcomplete mysqlBackup_%year%-%month%-%day%.sql >> %logs%
) else (
echo backupfaile
echo backupfaile >> %logs%
pause
exit
)
) else (
echo backupfail
echo backupfail >> %logs%
if exist %backupingFilePath% (
del %backupingFilePath%
)
pause
exit
)
rem delete backupDays's backup


set /a day=1%day%-100-backupDays
rem 
if %day% lss 1 (
set /a daysTemp=day
call :daysOfLastMonth
) else set /a daysTemp=0
set /a day+=daysTemp
rem 
if day lss 10 (set day=0%day%)
set /a month=%month%
if %month% lss 10 (set month=0%month%)

set deleteBackupFilePath=%databaseName%%year%%month%%day%.sql
echo mysqlBackup_%year%-%month%-%day%.sql
echo mysqlBackup_%year%-%month%-%day%.sql >> %logs%
if exist %mysqlBackupPath%\%deleteBackupFilePath% (
del %mysqlBackupPath%\%deleteBackupFilePath%
 
echo delcomplete >> %logs%
) else (

echo the document isn't exist >> %logs%
)
echo -----------------------------------------------------end >> %logs%


:daysOfLastMonth
set /a month=%month%-1
set /a mod1=%year%%%4
set /a mod2=%year%%%100

if %month% lss 1 (
set month=12
set year=%year%-1
set day=31
) else (
if %month% == 2 (
set day=28
if %mod1% == 0 (
set day=29
if mod2 == 0 (
set day=28
)
)
) else (
for %%a in (1 3 5 7 8 10 12) do (
if %month% == %%a (
set day=31
goto :eof
)
)
set day=30
)
)
goto :eof 

以上为windows版本
----------------------------------------------------
以下为linux版本第一个
#!/bin/bash
#Write by oneleaf@gmail.com

#数据库服务器地址
DBHOST=localhost
#数据库登录名
USERNAME=root
#数据库密码
PASSWORD=
#需要备份的数据库 或 输入类似 db1 db2 的列表清单
DBNAMES="all"
#备份MYSQL时生成CREATE数据库语句
CREATE_DATABASE="yes"
#备份的目录
BACKUPDIR="/tmp/mysqlbackup"
#发生到邮件的地址
MAILADDR="test@example.com"
#邮件最大附件尺寸2M
MAILMAXATTSIZE="2000000"

#当前备份日期和时间
DATE=`date +%Y-%m-%d_%H_%M`
OPT="--quote-names --opt"

#检查备份路径是否存在,不存在则建立
if [ ! -e "BACKUPDIR"];thenmkdirp"{BACKUPDIR}"
fi

#删除备份路径下的所有文件
rm -fv {BACKUPDIR}/*
  
   #检查是否需要生成CREATE数据库语句
   if [ "
{CREATE_DATABASE}" = "yes" ]; then
   OPT="OPTdatabases"elseOPT="{OPT} --no-create-db"
fi

#检查是否是备份所有数据库
if [ "DBNAMES"="all"];thenDBNAMES="alldatabases"fiBACKUPFILE={DATE}.sql.gz

cd {BACKUPDIR}
  
   #备份数据库
   `which mysqldump` --user=
{USERNAME} --password=PASSWORDhost={DBHOST} OPT{DBNAMES} |gzip > "{BACKUPFILE}"
  
   #获取备份文件的尺寸
   BACKFILESIZE=`du -b
{BACKUPFILE}|sed -e "s/\t.*//"`
   #检查是否需要分割
   if [
{BACKFILESIZE} -ge {MAILMAXATTSIZE} ]; then
   #分割数据库,合并使用 cat
{BACKUPFILE}.* > BACKUPFILEwhichsplitb{MAILMAXATTSIZE} BACKUPFILE{BACKUPFILE}.
   for BFILE in BACKUPFILE.doecho"BackupDatabases:{DBNAMES}; Use cat BACKUPFILE.>{BACKUPFILE}" | mutt MAILADDRs"MySQLBackupSQLFilesfor{HOST} - DATE"a"{BFILE}"
   done
else
   echo "Backup Databases: DBNAMES"|mutt{MAILADDR} -s "MySQL Backup SQL Files for HOST{DATE}" -a "${BACKUPFILE}"
fi
--------------------------------------------------------------------------
以下为第二个版本
ubuntu定时备份mysql,首先要写一段shell脚本,用来备份mysql数据库,再通过crontab定时执行备份mysql数据库的shell脚本。

1.备份mysql的shell脚本如下:
?
1
2
3
4
5
6
    
#!/bin/bash
date_str=(date +%Y%m%d-%T)
   cd /home/steven/backup
   mysqldump -h localhost -u root --password=xxxx -R -E -e \
     --max_allowed_packet=1048576 --net_buffer_length=16384 databaseName\
      | gzip > /home/steven/backup/juziku_
date_str.sql.gz
把上面这个脚本存放位置:/home/steven/mysql_backup.sh (当然,也可以放在其他位置)

再赋于执行的权限,通过下面命令:
sudo chmod +x /home/steven/mysql_backup.sh

完成这步,我们就来执行一下这段脚本,看能不能备份mysql数据库。
在命令行输入
./mysql_backup.sh
就可以看到备份好的数据库文件了


2.完成上面这步,就可以备份mysql数据库了,接下来,我们再通过crontab定时执行这段脚本。
使用crontab -e命令,这个命令的使用比较简单。
在命令行输入中,直接输入 crontab -e
就会打开一个编辑窗口,最后一行会有内容格式的提示:
# m h dom mon dow command
具体意义表示:分钟 小时 日期 月份 星期 命令,在某月(mon)的某天(dom)或者星期几(dow)的几点(h,24小时制)几分(m)执行某个命令(command),*表示任意时间。例如:0 3 * * * /home/steven/mysql_backup.sh就是:每天早上3点,执行mysql_backup.sh脚本。

我们只要在里面添加一行就行了,内容如下:
?
1
2
    
# 备份mysql数据库 每天早上3点整执行
  0 3 * * * /home/steven/mysql_backup.sh

这样,每天早上3点,就会自动备份mysql数据库了。
-=----------------------------------------
第三个版本 
我只需要
1、创建保存备份文件的目录:/home/mysql_data
 
cd /home 
mkdir mysql_data 
2、创建备份脚本文件:/home/mysql_data/mysql_databak.sh
 
cd /home 
cd mysql_data 
touch mysql_databak.sh 
vim mysql_databak.sh 
输入以下内容: 
1
 
#!/bin/sh 
2
 
/etc/init.d/mysqld stop   #执行备份前先停止MySql,防止有数据正在写
入,备份出错           
3
 
date=` date +%Y%m%d `      #获取当前日期 
4
 
DAYS=7                     #DAYS=7代表删除7天前的备份,即只保留最近
7天的备份 
5
 
BK_DR=/home/mysql_data   #备份文件存放路径
 
6
 
DB_DR=/var/lib/mysql/pw85   #数据库路径 
7
 
LINUX_USER=root           #系统用户名 
8
 
tar zcvf BKDR/mysqldatadate.tar.gz DB_DR  #备份数据
    
   ========================================第2页========================================
   9
    
   /etc/init.d/mysqld start  #备份完成后,启动MySql 
   10 
   chown -R
LINUX_USER:LINUXUSERBK_DR  #更改备份
数据库文件的所有者 
11
 
find BKDRname"mysqldata"typefmtime+DAYS -exec rm {} \

#删除7天前的备份文件(注意:{} \;中间有空格) 
12
 
deldate=` date -d -7day +%Y_%m_%d ` #删除ftp服务器空间7天前的备份
 
13
 
ftp -n<open 192.168.1.1 21 #打开ftp服务器。21为ftp端口
 
14
 
user admin 123456 #用户名、密码 
15
 
binary #设置二进制传输 
16
 
cd mysqlbak #进入ftp目录(注意:这个目录必须真实存在)
 
17
 
lcd /home/mysql_data #列出本地目录
 
18
 
prompt 
19
 
mput mysql_datadate.tar.gzmysqldatadate.tar.gz #上传目录中的
文件 
20
 
mdelete mysql_datadeldate.tar.gzmysqldatadeldate.tar.gz #删除
ftp空间7天前的备份 
21
 
close #关闭
 
22
 
bye ! #退出
 
3、修改文件属性,使其可执行 
chmod +x /home/mysql_data/mysql_databak.sh
 
4、修改/etc/crontab #添加计划任务
 
vi /etc/crontab #在下面添加 
 
5 23 * * * root /home/mysql_data/mysql_databak.sh #表示每天23点05分
执行备份
 
5、重新启动crond使设置生效
 
/etc/rc.d/init.d/crond restart
 
chkconfig crond on #设为开机启动
 
service crond start #启动
 

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
176
分享
相关文章
Nexpose 8.2.0 for Linux & Windows - 漏洞扫描
Nexpose 8.2.0 for Linux & Windows - 漏洞扫描
65 20
Nexpose 8.2.0 for Linux & Windows - 漏洞扫描
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
93 28
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
44 15
|
22天前
|
Metasploit Pro 4.22.7-2025040601 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.7-2025040601 (Linux, Windows) - 专业渗透测试框架
60 1
Metasploit Pro 4.22.7-2025040601 (Linux, Windows) - 专业渗透测试框架
|
1天前
|
Nexpose 8.4.1 for Linux & Windows - 领先的漏洞管理解决方案
Nexpose 8.4.1 for Linux & Windows - 领先的漏洞管理解决方案
14 0
Nexpose 8.4.1 for Linux & Windows - 领先的漏洞管理解决方案
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
43 0
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
|
2月前
|
linux命令详细说明以及案例
本文介绍了常用的 Linux 命令及其详细说明和示例,包括:`ls`(列出目录内容)、`cd`(更改目录)、`rm` 和 `mv`(删除与移动文件)、`grep`(搜索文本)、`cat`(显示文件内容)以及 `chmod`(更改文件权限)。每个命令均配有功能描述、选项说明及实际案例,帮助用户更好地掌握 Linux 命令的使用方法。
159 56
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
98 24
|
10天前
|
Linux命令的基本格式解析
总的来说,Linux命令的基本格式就像一个食谱,它可以指导你如何使用你的计算机。通过学习和实践,你可以成为一个真正的“计算机厨师”,创造出各种“美味”的命令。
52 15
Linux系统之su命令的基本使用
Linux系统之su命令的基本使用
72 2
Linux系统之su命令的基本使用

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等