CentOS下mysql自动备份数据库 crontab定时任务
时间:2016-02-11 21:51 来源:linux.it.net.cn 作者:IT
数据库定时备份:
第一步、创建 /root/mysql_dump/mysql_back.sh 内容如下:
backupdir='/storage/wwwroot/data_back/'
time=`date +%Y%m%d_%H%M%S_%N`
mysqldump --opt -uroot -p'123456' dbname | gzip > $backupdir/dbname_$time.sql.gz
如果权限不足,给权限(不一定需要):
chmod +x /root/mysql_dump/mysql_back.sh
第二步、修改定时任务
#crontab -l 先查看当前的任务列表
#crontab -e 编辑
# 添加一行,root用户不需要指定执行的用户名, 比如 3点01分备份
1 3 * * * /root/mysql_dump/mysql_back.sh
# 不一定需要重启crontab服务
# service crond restart
cron 服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab。因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,比如crontab -e,实际上修改的配置文件是/var/spool/cron/root(推荐) ,而编辑/etc/crontab是针对系统的任务。
其他问题补充:
* 1、重启crontab的时候如果提示:
crond: unrecognized service
安装计划任务:
yum -y install vixie-cron
* 2、现在可以手动测试下我们上面的脚本是否能正常运行:
sh /root/mysql_dump/mysql_back.sh
如果你是在windows平台上编辑好的 sh文件,然后ftp上传到linux服务器后,可能会出现下述问题:
No such file or directory
这个其实是换行的问题造成的,win下换行是 \r\n,而linux的换行只是\n,\r在linux下是不显示的,所以一般不容易发现这个问题。
解决方法:把我们的这个文件格式从 dos 修改成 unix 即可。
vi /root/mysql_dump/mysql_back.sh
:set ff
回车,显示fileformat=dos,重新设置下文件格式:
:set ff=unix
保存退出::wq 或 :x!
3、还原数据库的方法:
# 登录
mysql -uroot -p123456
-- 热备只是备份数据库内部的表,以及数据
use dbname;
source /usr/local/mysql_dump/dbname_dump.sql;
exit;
*4、 cron服务是linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:
/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload
以上1-4行分别为启动、停止、重启服务和重新加载配置。
要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可。
名称 : crontab
使用权限 : 所有使用者
使用方式 :
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-l[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。
crontab文件的格式:M H D m d cmd.
crontab基本格式 :
* * * * * command
分 时 日 月 周 命令
M: 分钟(0-59)。每分钟用*或者 */1表示
H:小时(0-23)。(0表示0点)
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
补充一个定时任务脚本:
功能:每1分钟循环执行某个目录下的所有php文件。
#/home/wwwroot/default/admin/task/1m.sh
Website_url="http://www.xxx.net/admin/task/1m/"
Folder_A="/home/wwwroot/default/admin/task/1m"
for file_a in ${Folder_A}/*; do
temp_file=`basename $file_a`
#echo ${Website_url}${temp_file}
#wget -t 重试次数 -T 超时秒数 -b 后台执行
if [ ${temp_file:0-4} = '.php' ]; then
wget -b -q -t 2 -T 50 ${Website_url}${temp_file}
fi
#wget -q ${Website_url}${temp_file}
done
(责任编辑:IT)
数据库定时备份: 第一步、创建 /root/mysql_dump/mysql_back.sh 内容如下: backupdir='/storage/wwwroot/data_back/' time=`date +%Y%m%d_%H%M%S_%N` mysqldump --opt -uroot -p'123456' dbname | gzip > $backupdir/dbname_$time.sql.gz 如果权限不足,给权限(不一定需要):
chmod +x /root/mysql_dump/mysql_back.sh
第二步、修改定时任务
#crontab -l 先查看当前的任务列表
#crontab -e 编辑 # 添加一行,root用户不需要指定执行的用户名, 比如 3点01分备份
1 3 * * * /root/mysql_dump/mysql_back.sh
# 不一定需要重启crontab服务
# service crond restart
cron 服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab。因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,比如crontab -e,实际上修改的配置文件是/var/spool/cron/root(推荐) ,而编辑/etc/crontab是针对系统的任务。 其他问题补充: * 1、重启crontab的时候如果提示: crond: unrecognized service 安装计划任务:
yum -y install vixie-cron
* 2、现在可以手动测试下我们上面的脚本是否能正常运行:
sh /root/mysql_dump/mysql_back.sh
如果你是在windows平台上编辑好的 sh文件,然后ftp上传到linux服务器后,可能会出现下述问题: No such file or directory 这个其实是换行的问题造成的,win下换行是 \r\n,而linux的换行只是\n,\r在linux下是不显示的,所以一般不容易发现这个问题。 解决方法:把我们的这个文件格式从 dos 修改成 unix 即可。
vi /root/mysql_dump/mysql_back.sh
:set ff 回车,显示fileformat=dos,重新设置下文件格式:
:set ff=unix
保存退出::wq 或 :x! 3、还原数据库的方法:
# 登录
mysql -uroot -p123456 -- 热备只是备份数据库内部的表,以及数据 use dbname; source /usr/local/mysql_dump/dbname_dump.sql; exit; *4、 cron服务是linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:
/sbin/service crond start
/sbin/service crond stop /sbin/service crond restart /sbin/service crond reload 以上1-4行分别为启动、停止、重启服务和重新加载配置。 要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可。 名称 : crontab 使用权限 : 所有使用者 使用方式 : crontab file [-u user]-用指定的文件替代目前的crontab。 crontab-[-u user]-用标准输入替代目前的crontab. crontab-l[user]-列出用户目前的crontab. crontab-e[user]-编辑用户目前的crontab. crontab-d[user]-删除用户目前的crontab. crontab-c dir- 指定crontab的目录。 crontab文件的格式:M H D m d cmd. crontab基本格式 : * * * * * command 分 时 日 月 周 命令 M: 分钟(0-59)。每分钟用*或者 */1表示 H:小时(0-23)。(0表示0点) D:天(1-31)。 m: 月(1-12)。 d: 一星期内的天(0~6,0为星期天)。 补充一个定时任务脚本: 功能:每1分钟循环执行某个目录下的所有php文件。
#/home/wwwroot/default/admin/task/1m.sh
Website_url="http://www.xxx.net/admin/task/1m/" Folder_A="/home/wwwroot/default/admin/task/1m" for file_a in ${Folder_A}/*; do temp_file=`basename $file_a` #echo ${Website_url}${temp_file} #wget -t 重试次数 -T 超时秒数 -b 后台执行 if [ ${temp_file:0-4} = '.php' ]; then wget -b -q -t 2 -T 50 ${Website_url}${temp_file} fi #wget -q ${Website_url}${temp_file} done (责任编辑:IT) |