为了防止系统出现操作故障和系统故障导致数据丢失,需要将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质,下面将介绍linux中如何实现每天自动定时备份mysql数据库!
1.查看磁盘空间情况
定时备份,需要选择一个空间充足的磁盘空间,避免出现因空间不足导致备份失败数据丢失!
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 4.7G 33G 13% /
devtmpfs 487M 0 487M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 428K 496M 1% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/0
2.创建备份目录
在/home 路径下创建文件夹‘backup’
cd /home
mkdir backup
cd backup
2.创建备份Shell脚本
注意把以下命令中的DatabaseName换为实际的数据库名称,你也可以使用其实的命名规则!
vim bkDatabaseName.sh
输入/粘贴以下内容:
注意:
把 username 替换为实际的用户名;
把 password 替换为实际的密码;
把 DatabaseName 替换为实际的数据库名;
mysqldump -uusername -ppassword DatabaseName > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql
如果需要对备份进行压缩则粘贴:
mysqldump -uusername -ppassword DatabaseName | gzip > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz
备份多了磁盘占用越来越多,我们可以设置自动删除前一段时间的脚本
find $/home/backup -name "name_*.sql.gz" -type f -mtime +5 -exec rm {} \; > /dev/null 2>&1
name:自定义备份文件前缀标识。
-type f 表示查找普通类型的文件,f表示普通文件。
-mtime +5 按照文件的更改时间来查找文件,+5表示文件更改时间距现在5天以前;如果是 -mmin +5 表示文件更改时间距现在5分钟以前。
-exec rm {} \; 表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。
/dev/null 2>&1 把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的& 表示让该命令在后台执行。
3.添加可执行权限
chmod u+x bkDatabaseName.sh
添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用;
./bkDatabaseName.sh
4.添加计划任务
确认crontab是否安装:
如果报 command not found,就表明没有安装
crontab -l
显示出所有计划任务。
添加计划任务
执行命令:
crontab -e
这时就像使用vi编辑器一样,可以对计划任务进行编辑。
输入以下内容并保存:
00 3 * * * /home/backup/bkDatabaseName.sh
表示每天3点00分执行备份
crontab文件的一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
10 6 * * * date
0 */2 * * * date
0 23-7/2,8 * * * date
0 11 4 * mon-wed date
0 4 1 jan * date
注:crontab配置文件格式如下:
分 时 日 月 周 命令
Redhat方法:
Redhat的crontab采用按时间调用4个目录(/etc/cron.hourly:每小时;/etc/cron.daily:每天;/etc/cron.weekly:每周;/etc/cron.monthly:每月)中脚本出来运行的方式。
Redhat中只需要将刚才编辑的脚本复制到相应的目录即可。
5.重启crontab
/etc/rc.d/init.d/crond restart 或者service crond restart
6.测试任务是否执行
如果任务执行失败了,可以通过以下命令查看任务日志:
tail -f /var/log/cron
7.恢复数据备份文件:
非压缩备份文件恢复:
mysql -u root -p dataname < name2008010103.sql
从压缩文件直接恢复:
gzip < name2008010103.sql.gz | mysql -u root -p dataname
或者
zcat name2008010103.sql.gz | mysql -u root -p
附shell:
#!/bin/bash
#mysqldump -uuser -ppassword freedom > /home/backup/freedom_$(date +%Y%m%d_%H%M%S).sql
backupdir=/home/backup
time=$(date +%Y%m%d_%H%M%S)
mysqldump -uroot -p1qaz2wsx freedom | gzip > /home/backup/freedom_$time.sql.gz
find $backupdir -name "freedom_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1