一、创建shell脚本
#!/bin/bash #数据库备份路径,需先创建该路径 backupdir=/home/mysql-data-bak #数据库账号 dbuser=myBak #数据库密码 dbpasswd=myBak123abc #数据库端口 dbportal=3306 #数据库端口 dbip=127.0.0.1 #需备份的数据名 dbname=my-test #备份时间 time=`date+%Y%m%d` #正式开始备份数据库 /usr/bin/mysqldump\ -u${dbuser}\ -p${dbpasswd} \ -P${dbportal}-h${dbip} \ --default-character-set=utf8 \ --databases${dbname} \ >$backupdir/${dbname}-$time.sql; #为节约硬盘空间,将备份的数据库压缩 tarczvfP $backupdir/${dbname}-$time.sql.tar.gz$backupdir/${dbname}-$time.sql; echo 'tardone'; #删除7天前备份,也就是只保存7天内的备份 find$backupdir -name "${dbname}-*.sql.tar.gz" -type f -mtime +7 -exec rm {} \; >/dev/null 2>&1 #删除原始sql文件,只留压缩后文件 rm-f $backupdir/${dbname}-$time.sql; echo 'remove done' echo'dump done';使用该shell脚本备份时需注意: 1.要给该shell脚本赋予可执行权限,相关命令为:chmod +x ***.sh
2.测试的时候可以直接进入sh目录下执行
./***.sh等执行完了看看数据库备份目录下,有没有备份文件。如果有,则表示脚本执行成功,没有则表示没有执行成功。
3.建议用于mysqldump的mysql账号权限最好是127.0.0.1的所有权限,密码数字+字母的组合。 另附上创建mysql账号语句:
CREATE USER 'myBak'@'%' IDENTIFIED BY 'myBak123abc'; GRANT ALL ON *.* TO 'myBak'@'127.0.0.1' identified by 'myBak123abc'; flushprivileges;4.运行该脚本会提示:
Warning:Using a password on the command line interface can be insecure.意为:在命令行界面上使用密码是不安全的. 该警告看着不顺眼,那有什么办法可以解决吗?有,方法其实很简单,在mysql的配置文件my.cnf中添 加mysqldump的用户名和密码,再将备份脚本用户名密码相关信息去掉。 相关过程如下: a.vim /etc/my.cnf b.添加mysqldump的账号和密码配置如下【ps:把你自己数据库的账号密码填上哦】
[mysqldump] user=your_backup_user_name password=your_backup_passwordc.重启数据库
service mysql restartd.修改脚本 将备份脚本用户名密码相关信息去掉
二.计划任务的配置 配置linux计划任务有以下两种方式: 1、 执行crontab -e 输入以下内容:
30 1 * * * sh /home/mysql-data-bak/my-test.sh2、 打开自动执行文件
vi /etc/crontab在etc中加入如下内容,让其自动执行任务。
30 1 * * * sh /home/mysql-data-bak/my-test.sh以上时间 30 1 * * *表示每天凌晨1点30自动执行/home/mysql-data-bak/my-test.sh脚本。
计划任务执行命令含义如下:
#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) ORsun,mon,tue,wed,thu,fri,sat #| | | | | #* * * * * user-name command to be executed