转载请注明出处:https://blog.csdn.net/l1028386804/article/details/79761984
1、编辑crontab任务
sudo vi /etc/crontab #编辑crontab任务输入
59 23 * * * root /usr/local/mysql/backup/backup.sh >> /usr/local/mysql/backup/error.log 2>&1 #表示每天23点59分以root用户执行/usr/local/mysql/backup/backup.sh备份脚本,错误日志输出到/usr/local/mysql/backup/error.log,方便查找问题修改后的/etc/crontab 内容如下:
!/bin/sh source /etc/profile SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # 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,fri,sat # | | | | | # * * * * * user-name command to be executed 59 23 * * * root /usr/local/mysql/backup/backup.sh >> /usr/local/mysql/backup/error.log 2>&1
2、编辑备份数据库的脚本
vim /usr/local/mysql/backup/backup.sh #编辑脚本内容在脚本中输入以下内容
#!/bin/sh time="$(date +"%Y%m%d%H%M")" sudo /usr/local/mysql/bin/mysqldump 数据库名 | gzip > /usr/local/mysql/backup/adshare_$time.sql.gz #备份并压缩文件 find /usr/local/mysql/backup/ -name "adshare_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1 #删除7天前的备份文件#注:这里不用sudo /usr/local/mysql/bin/mysqldump -u 用户名 -p密码 数据库名 | gzip 这种形式,不然会报Warning: Using a password on the command line interface can be insecure. 这里我们将数据库用户名和密码保存在数据的conf配置文件中,例如我的配置文件是/etc/my.cnf,在my.cnf中加入
[mysqldump] user=用户名 password=密码
3、给备份文件夹和脚本文件授权
sudo chmod 777 backup #给backup文件夹授权 sudo chmod 777 backup.sh #给backup.sh 文件授权
4、启动或重启crond定时任务
sudo /etc/rc.d/init.d/crond start 启动脚本,如果脚本已经启动则用sudo /etc/rc.d/init.d/crond restart 重启脚本5、遇到的问题
备份脚本手动执行没有任何问题,但是放在crontab定时任务中就出现备份的脚本文件为空,查资料后发现有的人说是因为mysqldump的路径写的是相对路径,改成绝对路径即可,但是我的路径写的是绝对路径,后面查看error.log日志发现报sudo: sorry, you must have a tty to run sudo 错误。执行 sudo vim /etc/sudoers 将Defaults requiretty 修改为Defaults:nobody !requiretty,表示仅 nobody 用户不需要控制终端。按esc输入::wq!强制保存,这样文件就能正常备份了。