因为一些小项目和个人博客随时可能用到mysql,所以我在云服务器上安装了mysql。误删除的数据很难找回,所以想写一个脚本实现MySQL数据库数据的自动备份,定期删除以前的备份文件。这篇文章写的很详细,适合小白阅读。当然,这只是一个非常简单的数据备份,并不适合企业项目。关于数据安全的文章,可以看我之前的文章:从最近的数据库删除事件,想到“Linux下改变rm命令实现回收站机制”1.选择合适的磁盘空间进行备份之前,尽量选择一个有足够空间的磁盘。我们使用df命令查看磁盘空间:df-h2.创建备份目录。从上面可以看出,主目录/下层空间足够了。cd/mkdirbackup也可以自己选择创建目录:3.创建备份脚本创建backup.sh脚本,编辑vimbackup.sh或vibackup.sh这里直接在shell当前所在目录创建.我在/目录下创建脚本文件,按i进入插入模式,就可以开始写脚本文件了。注:编辑模式下的案例均为英文输入模式。首先我们要知道MySQL的备份命令:mysqldump这里主要有两种写法,但是原理是一样的:一种写法mysqldump-uusername-ppassworddatabase_name>/backup/database_name_$(date+%Y%m%d%H%M%S).sql注意:1.将username、password、database_name替换成自己的数据库用户名、密码和要备份的数据库名2.database_name_$(date+%Y%m%d%H%M%S)生成备份文件的名称可以自定义,其中文件名是数据库名+下划线+具体时间,$(日期+%Y%m%d%H%M%S)可以得到当前日期,%Y%m%d%H%M%S分别对应年、月、日、时、分、秒。压缩备份:mysqldump-uusername-ppassworddatabase_name|gzip>/backup/database_name$(date+%Y%m%d%H%M%S).sql.gz也可以选择备份所有数据:mysqldump-uusername-ppassword--all-databases>/backup/database_name_$(日期+%Y%m%d%H%M%S).sqlmysqldump-uusername-ppassword--all-databases|gzip>/backup/database_name$(date+%Y%m%d%H%M%S).sql.gz复制以上代码请注意空格和回车。写法2db_user="username"db_password="password"db_name="database_name"#你备份文件的story目录,你要改这个dirbackup_dir="/backup"#备份文件的日期格式(dd-mm-yyyy)time="$(date+"%Y%m%d%H%M%S")"#!/bin/bashmysqldump-u$db_user-p$db_password--all-databases>$backup_dir/sqldata_$time。sql#!/bin/bashmysqldump-u$db_user-p$db_password--all数据库|gzip>$backup_dir/$db_name"_"$time.sql.gz备份所有数据:#!/bin/bashmysqldump-u$db_user-p$db_password--all-databases>$backup_dir/sqldata_$time.sql#!/bin/bashmysqldump-u$db_user-p$db_password--all-databases|gzip>$backup_dir/$db_name"_"$time编辑.sql.gz脚本后按ESC退出编辑模式,直接输入:wq保存退出。3.赋予可执行权限chmodu+xbackup.sh或chmod+xbackup.sh此命令必须在文件所在路径下执行,或chmodu+x/direction/backup.shchmod+x/direction/backup。shu代表用户。g代表用户组。o代表其他。a代表所有。chmod是权限管理命令的缩写,改变一个文件的权限模式。chmodu+xfile.sh意思是给当前目录下file.sh文件的属主增加可执行权限。chmod+x和chmoda+x一样,意思是增加所有用户的可执行权限。4.测试脚本首先手动测试我们写的脚本的正确性和可执行性找到文件所在位置,或者添加路径,启动命令:./backup.sh./backup.sh然后弹出两行warning:没关系,这是MySQL警告我们密码是明文使用的,哈哈。这与它无关。这个时候我们切换到/backup目录下,看看脚本是否执行成功!脚本执行成功!可以看到已经有了备份文件,证明我们的脚本是正确的。5、创建定时备份任务,执行crontab命令。如果输出commandnotfound,说明没有安装。这是先安装crontab。网上有教程,这里就不赘述了。我的Linux服务器系统是Centos7,安装了crontab。执行命令:crontab-e和vim编辑一样,输入英文后按i进入插入模式,可以添加定时任务。1~59分钟,每分钟用*或*/1表示,小时数为00或0第二列为1~23小时(0表示0点)第三列为1~31日第四列columnismonth1~12Fifthcolumnweek0~6(0meansSunday)第六列是要运行的命令。03***/backup.sh,这个命令的意思是每天凌晨3点执行脚本一次,时间可以自己调整,注意使用脚本的绝对路径。6、定期删除备份文件光是盲目备份是不行的。不管磁盘有多大,用完了就用完了。再说了,保存很久以前的数据也没有意义。我们需要备份的是近期最新的数据,所以定时删除文件定时删除是很有必要的,我们只需要在脚本文件中添加如下命令即可:#deletethebackup7daysagofind/backup/mysql/-name$db_name"*.sql.gz"-typef-mtime+7-execrm-rf{}\;>/dev/null2>&1#删除一分钟前的备份find/backup/mysql/-name$db_name"*.sql.gz"-typef-mmin+1-execrm-rf{}\;>/dev/null2>&1-typef表示搜索普通类型文件,f表示普通文件,可以省略。-mtime+7根据文件更改时间查找文件,+7表示文件更改时间为7天前;如果是-mmin+7,表示文件更改时间为7分钟前。-execrm{};表示执行一个shell命令,exec选项后面是要执行的命令或脚本,然后是一对{},一个空格和一个\,最后是一个分号;/dev/null2>&1重定向标准错误到标准输出,并把它放在/DEV/NULL下。通俗地说,就是把所有的标准输出和标准错误都扔进垃圾桶;其中的&表示让命令在后台执行。下面是所有命令的截图:这里是所有代码,没有格式化,适合复制粘贴:mysqldump-uusername-ppassword--all-databases>/backup/mysql/mbook_$(date+%Y%m%d%H%M%S).sqlmysqldump-uusername-ppassword--all数据库|gzip>/backup/mysql/mbook_$(date+%Y%m%d%H%M%S).sql.gzfind/backup/mysql/-名称$mbook"*.sql.gz"-typef-mtime+30-execrm-rf{}\;>/dev/null2>&1find/backup/mysql/-name$mbook"*.sql"-typef-mtime+30-execrm-rf{}\;>/开发/空2>&1
