1.编写备份脚本
1.1 修改my.cnf文件
1.1.1在my.cnf文件中增加如下配置,存储数据库的用户名和密码
[mysqldump]
user=root
password=12345678
此举是为了避免使用/usr/bin/mysqldump -u root -p12345678报如下错误:
1.1.2 在my.cnf文件的[mysqld]后追加
skip-grant-tables
是为了避免如下报错:
重启数据库
service mysql restart
1.2 编写sh脚本备份数据库
#!/bin/bash
# Name:databasename_mysql_bak.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
# 参数说明:
# backupdir 保存路径的绝对地址
# 代码中 time=` date +%Y%m%d`也可以写为time=”$(date +”%Y%m%d”)” 找到当前日期时间格式
# 其中`符号是TAB键上面的符号,不是ENTER左边的’符号,还有date后要有一个空格。
#mysql_bin_dir:mysql的bin路径;
#dataname:数据库名;
#user:数据库用户名;
#password:用户密码;
#name:自定义备份文件前缀标识
# name:自定义备份文件前缀标识。
# -type f 表示查找普通类型的文件,f表示普通文件,d表示目录。
# -mtime +30 按照文件的更改时间来查找文件,+30表示文件更改时间距现在30天以前;如果是 -mmin +7 表示文件更改时间距现在7分钟以前。
# -exec rm -rf {} \; 表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号。
#数据库备份的位置
backupdir=/opt/mysqlbak
time=` date +%Y%m%d%H%M%S`
dirname=` date +%Y%m%d`'-mysql'
#需要备份的数据库的连接的用户名和密码和数据库(-uuser 和-ppassword 中间用空格隔开也是可以的 如:-u root )
#mysql_bin_dir/mysqldump -uuser -ppassword dataname | gzip > $backupdir/name$time.sql.gz
#mysql_bin_dir/mysqldump -u user -p password dataname | gzip > $backupdir/name$time.sql.gz
#每天创建一个新的文件夹
cd $backupdir
if [ ! -d $dirname ];then
mkdir $dirname
fi
/usr/local/mysql/bin/mysqldump work_plan | gzip > $backupdir/$dirname/mysql_$time.sql.gz
#传输至备份服务器,如果保留本机则不需要此步骤
#scp $backupdir/mysql_$time.sql.gz 22.122.51.158:/data/bakup/159/
#find $backupdir -name "name*.sql.gz" -type f -mtime +30 -exec rm -rf {} \;
#保留10日
find $backupdir -name "*-mysql" -type d -mtime +10 -exec rm -rf {} \;
2.配置定时任务
进入/etc/cron.hourly目录(一小时执行一次),新建文件,将上述脚本内容拷入,赋予权限:
cd /etc/cron.hourly
touch mysqlback.cron
# 将脚本内容复制进去,赋予权限
chmod 777 mysqlback.cron
大功告成