Linux下实现mysql数据库每天自动备份 1、基本操作步骤
a、创建备份目录
mkdir -m 777 /home/wwwroot/backup
b、创建备份脚本sh
vim /home/wwwroot/backup/sqlback.sh
mysqldump -uroot -p123456 databasename | gzip > /home/wwwroot/backup/sql/databasename_$(date +%Y%m%d).sql.gz
c、设置脚本权限为可执行
chmod 777 /home/wwwroot/backup/sqlback.sh
d、创建计划任务
vim /var/spool/cron/root
10 2 * * * /home/wwwroot/backup/sqlback.sh
e、查看计划任务执行日志
tailf /var/log/cron d、删除7天前的备份数据
find /home/wwwroot/backup/sql/ -mtime +7 -name "*.sql.gz" -exec rm -rf {} \; 2、mysqldump命令
a、只导出数据库表结构 mysqldump -h主机 -P端口 -u用户 -p密码 -d 数据库名 > 备份存储路径
b、导出数据库表结构及数据 mysqldump -h主机 -P端口 -u用户 -p密码 数据库名 > 备份存储路径
备注:密码有特殊字符例如:!@#时候可以变成\!\@\# (特殊字符转义一下) 3、crontab定时任务
a、crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务
b、任务调动有两类:系统任务调动和用户任务调动
系统任务调动:/etc/crontab文件 (创建命令时需要在5个8之后加上root command)
用户任务调动:/var/spool/cron文件夹中创建以用户组命名的文件(root或者userxxx) (执行命令时可不加用户名)
任务调动格式:
# .---------------- 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,fri,sat
# | | | | |
# * * * * * command
c、crontab服务操作
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //启动服务 4、删除7天前的备份数据
find /home/wwwroot/backup/sql/ -mtime +7 -name "*.sql.gz" -exec rm -rf {} \;
a、/home/wwwroot/backup/sql/ 想要清理的目录
b、-mtime 标准语句写法
c、+7 查找7天前的文件
d、-name 标准语句写法
e、"*.sql.gz" 查找文件后缀是以.sql.gz结束的所有文件
f、-exec 标准语句写法
g、rm -rf 强制删除文件,包括目录
h、{} \; 标准语句写法 5、10 2 * * * /home/wwwroot/backup/sqlback.sh > /home/wwwlogs/cron 2>&1
此处只解释:2>&1 标准错误2输出重定向到标准输出1
备注:MySQL 5.6 警告信息 mysqldump: [Warning] Using a password on the command line interface can be insecure的处理方式
vim /etc/my.cnf 最下面添加如下代码:
[mysqldump]
user=your_backup_user_name
password=your_backup_password
最后直接执行:
mysqldump databasename | gzip > /home/wwwroot/backup/sql/databasename_$(date +%Y%m%d).sql.gz