在CentOS系统下实现MySQL自动全量备份
来源:互联网 发布:袁劲松 思维 知乎 编辑:程序博客网 时间:2024/05/16 19:44
本文转载自:http://www.softeng.cn/?p=175,本文已获得作者授权,未经作者同意,不可转载。
前言
在Linux操作系统上实现MySQL的自动备份,主要需要两个资料,一个是MySQL数据库备份所需要的脚本,一个是crontab这样的定时任务执行程序。这个脚本可以是任何语言的,只要最终能够将MySQL数据库,导出成SQL文件或者其他你需要的文件即可,而定时任务执行程序,可以是Linux下常用的crontab,也可以是其他定时任务程序。
本文是以shell脚本及crontab定时任务为基础,实现的MySQL数据库定时自动全量备份。其功能具体描述为:
+ 实现当前Linux服务器上MySQL服务器里的所有库的全量数据+结构备份;
+ 实现备份脚本只保留近15天,15天以前的备份脚本自动删除;
+ 实现每天在指定的时间开始进行备份工作。
准备工作
使用如下命令安装crontab(已安装的可以跳过)
yum install -y vixie-cron crontabs
创建mysql备份文件的存放路径
mkdir -p /alidata/backup/databasesmkdir -p /alidata/backup/databases/mysql
这里的路径可以根据实际情况修改,但是如果修改了这里的路径,也需要修改下面备份脚本里的路径。这里的路径只需要具有root权限就可以了。
MySQL备份脚本
下面先贴出本文所需要使用的MySQL备份脚本
#!/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/alidata/server/mysql/bin:/root/bin:~/binexport PATH#current datetimeDATE=$(date -d '+0 days' +%Y%m%d%H%M)#backup directoryBACKUP_ROOT=/alidata/backup/databasesBACKUP_DIR=mysqlDATA_DIR=mysql_$DATE#get all database nameSQL_STRING="SELECT SCHEMA_NAME AS db FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'information_schema', 'performance_schema');"DBS=$(echo $SQL_STRING | mysql -Bs)#package nameZIP_NAME="mysql_"$DATE".tar.gz"#remove backup of the database before 15 daysfind $BACKUP_ROOT/$BACKUP_DIR -name "mysql_*.tar.gz" -type f -mtime +15 -exec rm {} \;for DBNAME in $DBSdo echo "backup "$DBNAME; if [ ! -d ${BACKUP_ROOT}/${DATA_DIR} ]; then mkdir -p ${BACKUP_ROOT}/${DATA_DIR} fi SQL_FILE=$DBNAME-$DATE".sql" /alidata/server/mysql-5.6.21/bin/mysqldump --default-character-set=utf8 $DBNAME > $BACKUP_ROOT/$DATA_DIR/$SQL_FILEdone#Use tar to package all sql filescd $BACKUP_ROOTtar -czvPf $BACKUP_DIR/$ZIP_NAME $DATA_DIR#After the success of the package to delete sql fileif [ $? = 0 ]; then rm -rf $BACKUP_ROOT/$DATA_DIRfiecho "mysql backup finished!"
下面对上面的备份用脚本进行解释。
首先,可以看到,在脚本开始时,对系统变量PATH进行了重新的复制和导入,这是因为使用crontab执行脚本时,不像是平时人工使用ssh连接登录CentOS系统那样,因为没有登录动作,所以没有用户,所以就没有了系统变量,这样在命令中涉及到的一个命令,可能会变为未定义的命令,无法执行,所以,这里先定义环境变量。这里需要说明,每台电脑的环境变量都不尽相同,所以可以使用
echo $PATH
命令进行查看,然后将其结果,复制到这个位置上,替换这个脚本中的内容;
第二,可以看到整个脚本中,并未出现MySQL的用户名和密码,这是因为本文所描述的情况中,使用的是MySQL 5.6的版本,在5.6的版本中,若将MySQL的用户名、密码在脚本中输入和执行,会被警告为不安全的做法,所以需要将备份所需要的用户名和密码存放在MySQL的配置文件,即my.cnf文件中,具体形式如下
[mysql]user=rootpassword=123456[mysqldump]user=rootpassword=123456
其中,mysql的部分是mysql命令所使用的用户名和密码,mysqldump的部分是mysqldump命令所使用的用户名和密码,这里一定要这样分开写清楚,否则会被提示为没有权限;
第三,这个脚本的大致流程是,查询到所有的数据库名称,然后使用dump命令导出每个数据库的结构和数据,将其放在一个临时文件夹中(临时文件夹的名字为:mysql_+年月日时分秒),当所有的数据库都导出完毕后,将这个临时文件打包并放入预先准备好的文件夹中。在上述过程中,还有一个漏掉的逻辑就是,找到修改时间已经超过15天的压缩包,并将其删除。
总体来说,这个脚本还是非常好理解的。
设置定时任务
假设我们现在做备份的是一台正在上线使用的服务器,我们通过分析服务器的访问情况后,得到每天凌晨的2:30至3:30之间是访问量最低的时间段,那我们就需要在这段时间内完成数据库的备份。接下来使用crontab实现这个功能,首先使用
crontab -e
命令打开定时任务列表,类似于使用vim编辑文本,我们设置每天的2:35开始进行数据库备份,则具体内容如下:
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,f ri,sat# | | | | |# * * * * * user-name command to be executed35 2 * * * /root/backup_mysql.sh
其中35代表执行的分钟,2代表执行的小时,后面的*代表每天每月每周,后面的内容是要执行的脚本所存放的路径,这里是将脚本存放在root用户的home目录下,即/root目录,这里具体可以查看crontab相关的资料文档。
至此,我们完成了,每天凌晨2:35分自动备份当前服务器上除mysql、information_schema、performance_schema以外,所有MySQL数据库的操作。
总结
本文的重点还是自动备份脚本,其中需要注意如何获取当前MySQL服务器中的所有数据库;如何在配置文件中配置mysql命令及mysqldump命令所使用的用户名和密码;如何实现删除15天之前的压缩包等几个知识点,解决了这些问题,自动化备份就变的简单的多了。
- 在CentOS系统下实现MySQL自动全量备份
- 在CentOS实现mysql数据库的自动备份备份
- MySQL 实现每日全量备份,定时增量备份,自动恢复脚本
- linux下mysql定时全量备份
- mysql全量备份
- CentOS系统下如何设置mysql每天自动备份_Mysql
- mysql全量备份、增量备份实现方法
- mysql增量、全量备份
- CentOS系统mysql数据库自动备份脚本
- CentOS下每天自动备份mysql数据库
- CentOS下每天自动备份mysql数据库
- CentOS下的Mysql自动备份
- linux(CentOS) 下mysql自动备份
- linux(CentOS) 下mysql自动定时备份
- 如何在linux下实现mysql数据库每天自动备份
- 如何在linux下实现mysql数据库每天自动备份
- 如何在linux下实现mysql数据库每天自动备份
- mysql全量备份、增量备份
- 静态链接库与动态链接库
- jQuery ajax jsonp 使用模型
- 倒序的九九乘法表
- python assert
- 局域网测速软件 iperf 的简要使用方法
- 在CentOS系统下实现MySQL自动全量备份
- 模型调用数据库数据,控制器输出模板
- Shell中 [ 和 [[ 的异同
- Nexus私服使Maven更加强大
- AVG PC Tuneup 2017(顶级系统优化大师)官方中文破解版64位V16.76.3.18604下载 | 内置avg pc tuneup 2017激活码
- git 码云上传本地项目代码
- Java高并发
- 结构型模式--桥接模式
- 稳压电源 连载10:提高稳定性的措施