系统环境:
Linux系统:CentOS 6.5 64位
mysqldump:版本 10.13 发行版 5.5.40
目标要求:
每天01:30备份project_manager数据库,并将备份文件保存到指定路径(/newdisk/backupsql),同时在该目录下保留最近三天的备份文件。
操作流程:
首先确保系统已经安装了【mysqldump】,直接查看安装位置,后面会用到,代码如下:
which mysqldump
系统会告诉你具体的路径,比如“/usr/bin/mysqldump”,
为了安全起见,我们不直接在脚本文件中添加数据库链接信息,而是创建一个.my.cnf文件(文件名以点开头,表示为隐藏文件):
touch ~/.my.cnf
编辑该文件,默认文件路径为[/root],添加以下内容:
[mysqldump] user=用户名 password=密码
设置正确的数据库用户和密码,这里的用户一般指的是root,设置完成后效果如下图:
有人可能会问,那我要备份的数据库是PHP的怎么办?别着急,我们继续。前面的操作中,我们确定了【mysqldump路径】和需要引用的【数据库信息】。然后在【/www/b】目录下新建【backup.sh】文件。因为我不喜欢用shell新建文件,所以我是使用FTP链接直接新建【backup.sh】。新建文件后,代码如下:
#!/bin/bash # 备份的数据库名 DB_NAME="zbp_1012" # 设置备份路径 BACKUP_PATH="/www/b" # 生成备份文件名 BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).sql" # 使用mysqldump备份数据库,注意替换/usr/bin/mysqldump路径 /usr/bin/mysqldump $DB_NAME > $BACKUP_PATH/$BACKUP_FILE # 删除旧的备份文件(保留最近3天的备份) find $BACKUP_PATH -type f -mtime +3 -name "backup_*.sql" -exec rm {} \;
代码中必须修改的信息如下图红框处所示,数据库名称、备份路径、mysqldump路径。这里的[zbp_1012]是我们需要备份的数据库名称,不是root用户,千万不要搞错了。看图:
完成后别忘了赋予执行权限,命令如下:
chmod +x /www/b/backup.sh
其中[/www/b]为实际目录位置。
PS:这里需要注意一点,如果你的[backup.sh]文件不是在Linux下用命令编辑的,还需要执行以下命令,如果是在Linux下新建并编辑的,可以忽略此命令:
sed -i 's/\r$//' /www/b/backup.sh
该命令会使用 sed 工具将脚本文件中的 DOS 格式换行符(\r)替换为空格,从而将其转换为 Unix 格式。说得简单点,就是 Windows 换行符的表示方式,会导致 Linux 系统中解释器无法正确识别需要转换。如果直接使用 Linux,直接忽略这行代码就行了。执行代码时不会有任何提示。大概是这样的:
确认之后我们创建一个cron任务:
crontab -e
编辑cron任务,添加下面一行,每天01:30执行备份脚本(注意:请务必将[/www/b/backup.sh]替换为实际脚本路径)。代码如下:
30 1 * * * /www/b/backup.sh >> /www/b/backup.log 2>&1
然后直接输入[i]进入编辑模式,最下面会出现[INSERT]字样,然后右键点击最后一行,粘贴代码,然后按键盘[Esc]结束编辑模式,再依次按冒号[:]和[wq],表示保存并退出,如图:
注意,[/www/b/backup.s]h 是你的脚本文件的路径,[/www/b/backup.log] 是你要保存日志的文件路径。>> 表示将输出追加到文件,2>&1 表示将标准错误(2)重定向到标准输出(1),这样错误和正常输出都会记录在日志文件中。
代码中的时间[05 14]是在14:05测试效果,大家可以改成自己的实际需求,切记编辑模式一定要是英文,不能是中文,否则会出错,编辑完成后运行以下命令查看:
crontab -l
OK,现在你的数据库备份任务已经设置好了,设置完成后最好用下面的命令来测试一下代码是否有问题,命令:
bash /www/b/backup.sh
现在开始运行脚本文件,并刷新FTP路径就可以发现数据库文件已经备份了,如图:
到此为止备份就完成了,当然可能还会有些小瑕疵,但是不影响正常备份,为了保证备份正常,最好把数据库下载到本地测试一下是否完整。好了,有其他问题的话就留言反馈吧,一步步测试好累,我要休息一下了~~~