当前位置: 澳门新濠3559 > 操作系统 > 正文

三.文件/etc/crontab中每行任务的描述格式如下,

时间:2019-11-07 21:41来源:操作系统
环境:阿里云服务器CentOS7.4 + MySQL5.6 Linux服务器数据库(MySQL、ORACLE)简单的异地备份方案 在工作中需要数据库在每天零点自动备份所以需要建立一个定时任务.我选择在Linux下使用Cronta

环境:阿里云服务器CentOS7.4 + MySQL5.6

Linux服务器数据库(MySQL、ORACLE)简单的异地备份方案

在工作中需要数据库在每天零点自动备份所以需要建立一个定时任务.我选择在Linux下使用Crontab来添加定时任务执行shell文件.shell文件有数据库备份命令.

基本思路:

 

一.  Crontab 介绍

1、编写shell脚本,备份数据库到指定目录下

澳门新濠3559,Linux服务器MySQL数据库简单的异地备份方案

crontab命令的功能是在一定的时间间隔调度一些命令的执行。

2、编写Python脚本,把文件上传到OSS

  www.2cto.com  

二.查看/etc/crontab文件

3、把shell脚本和Python脚本添加Linux的crontab定时器,设置定时执行

首先简单说下:

vim  /etc/crontab

 

 

澳门新濠3559 1

首先,环境要配置好,Python环境,centos 7 自带Python,一般可以直接使用

1、执行脚本导出数据库。

三.文件/etc/crontab中每行任务的描述格式如下:

查看Python版本:python -V

 

minute hour day month dayofweek command

澳门新濠3559 2  

mysqldump -h127.0.0.1 -P3306 -uroot -ppassword dbname > /bak/db/backup.sql

    minute - 从0到59的整数
    hour - 从0到23的整数
    day - 从1到31的整数 (必须是指定月份的有效日期)
    month - 从1到12的整数 (或如Jan或Feb简写的月份)
    dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
    command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)

在创建一个目录/opt/backMySQL/xxx,在目录/opt/backMySQL下编写一个shell脚本backup.sh

 

    root表示以root用户身份来运行
    run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本

 1 #!/bin/sh
 2 cd /opt/backMySQL/xxx
 3 echo "You are in /opt/backMySQL/xxx"
 4 
 5 Now=$(date +"%Y-%m-%d")
 6 File=fileName-$Now.sql
 7 mysqldump -urooot -ppassword databaseName > $File
 8 echo "Your database backup successfully completed"
 9 #删除昨天的文件
10 SevenDays=$(date -d -1day +"%Y-%m-%d")
11 
12 if [ -f /opt/backMySQL/xxx/fileName-$SevenDays.sql  ]
13 then
14  rm -rf /opt/backMySQL/xxx/fileName-$SevenDays.sql
15  echo "You have delete 1 tays ago bak file"
16 else
17  echo "1 days ago bak file not exist"
18 fi

三.文件/etc/crontab中每行任务的描述格式如下,设置定时执行。2、使用scp将导出的数据库文件传输到其他服务器上,一般进行异地备份,容灾。

    对于以上各语句,星号(*)表示所有可用的值。例如*在指代month时表示每月执行(需要符合其他限制条件)该命令。
    整数间的连字号(-)表示整数列,例如1-4意思是整数1,2,3,4

把第6、12、14行中的fileName替换成你想要的文件名,第7行换成数据库的用户和密码

 

指定数值由逗号分开。如:3,4,6,8表示这四个指定整数。

执行这个脚本,就可以把数据库备份到/opt/backMySQL/xxx目录下了

scp -P 195 /bak/db/backup.sql [email protected]:/bak

符号“/”指定步进设置。“/<interger>”表示步进值。如0-59/2定义每两分钟执行一次。步进值也可用星号表示。如*/3用来运行每三个月份运行指定任务。

再编写一个Python脚本backupToOSS.py

 

以“#”开头的为注释行,不会被执行。

# -I- coding: utf-8 -*-
import os
import oss2

path = '/opt/backMySQL/naner_zhongkong/'

auth = oss2.Auth('您的AccessKeyId','您的AccessKeySecret')
bucket = oss2.Bucket(auth,'您的Endpoint','您的Bucket名')

#获取目录下的所有文件
f_list = os.listdir(path)

for i in f_list:
    # os.path.splitext():分离文件名与扩展名
    if os.path.splitext(i)[1] == '.sql':
        fileName = i
        bucket.put_object_from_file('remote.txt','content of object')    

其中195为ssh端口号,如果是默认的22,可以省略 -P 22。

如果一个cron任务需要定期而不是按小时,天,周,月来执行,则需要添加/etc/cron.d目录。这个目录下的所有文件和文件/etc/crontab语法相同,查看样例:

注意:Python语言缩进有规定语法,不能随意缩进,记住缩进增加只用在以:结束的语句之后,缩进4个空格,而之后必须恢复到之前的缩进格式

 

# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom scrīpt the first day of every month at 4:10AM
10 4 1 * * /root/scrīpts/backup.sh

执行:python backupToOSS.py


 除了root用户之外的用户可以执行crontab配置计划任务。所有用户定义的crontab存储在目录/var/spool/cron下,任务会以创建者的身份被执行。要以特定用户创建一个crontab,先以该用户登录,执行命令crontab -e,系统会启动在VISUAL或者EDITOR中指定的的编辑软件编辑crontab。文件内容与/etc/crontab格式相同。示例如下:

可以把文件上传到OSS上了

  www.2cto.com  

0 3 * * * /home/dbbackup/db1backup.sh backup
0 4 * * * /home/dbbackup/db2backup.sh backup

设置定时器

现在需要编写一个sh脚本,并设定到定时任务中

表示每天3点执行/home/dbbackup/db1backup.sh backup,4点执行/home/dbbackup/db2backup.sh backup,如果是每五分钟执行一次可改为:

crontab -e

 

*/5 * * * * /home/dbbackup/db2backup.sh backup

澳门新濠3559 3

sh脚本内容如下:

当更改的crontab需要保存时,文件会保存在成如下文件/var/spool/cron/username。文件名会根据用户名而不同。

表示在每天1:05执行backup.sh、每天1:15执行backupToOSS.py

 

cron服务会每分钟检查一次/etc/crontab、/etc/cron.d/、/var/spool/cron文件下的变更。如果发现变化,就会下载到存储器中。因此,即使crontab文件改变了,程序也不需要重新启动。推荐自定义的任务使用crontab -e命令添加,退出后用/etc/init.d/crond restart命令重启crond进程,官方文件说不用重启进程,但我遇到不重启无法运行任务的情况。开始不知道/etc/crontab文件中的run-parts是什么意思,直接把命令按照/etc/crontab的格式加上总是无法运行,后来才知道run-parts是指后面跟着的是文件夹。

 

[java] 

 四.crontab服务的启动关闭

 

#!/bin/sh  

sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

定时具体设置参考

  

Linux中利用crontab创建计划任务 http://www.linuxidc.com//Linux/2013-06/86401.htm

http://www.osyunwei.com/archives/5039.html

filename=`date '+%Y%m%d-%H%M%S'`  

Linux中用crontab例行工作安排 http://www.linuxidc.com//Linux/2013-06/85441.htm

 

filename="${filename}bak.sql"  

Linux crontab不执行问题排查 http://www.linuxidc.com//Linux/2013-06/85432.htm

Linux定时执行Python脚本

  

Ubuntu使用crontab定时任务 http://www.linuxidc.com//Linux/2013-05/84770.htm

https://www.cnblogs.com/zichun-zeng/p/4235585.html

mysqldump -h127.0.0.1 -P3306 -uroot -ppassword dbname > /bak/db/${filename}  

Linux计划任务(at batch crontab anacron) http://www.linuxidc.com//Linux/2013-03/81584.htm

 

  

Linux任务计划 (at,crontab) http://www.linuxidc.com/Linux/2015-09/122970.htm

scp -P 195 /bak/db/${filename} [email protected]:/bak  

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-02/128323.htm

  

澳门新濠3559 4

echo "success"  

sh文件不要忘记使用 chmod +x backup.sh 进行授予可执行权限。

假设我们将sh文件存放与opt目录下,需要配置一下定时任务

 

编辑文件:vi /etc/crontab 设定每天凌晨4点半执行

30 04 * * * root /bin/sh /opt/db/backup-database.sh

 

可以使用命令:cat /var/log/cron  查看定时任务执行日志

如上处理后,服务器就会自动进行数据库备份并上传到异地服务器上了,但是有个问题还需要解决,那就是让scp命令不需要密码才行。

 

具体配置方法参考:

 

下面说一下oracle与mysql的不同之处

 

oracle备份一般情况需要使用 su - oracle 切换到oracle用户下才能执行,下面说一下直接在root用户下如何进行操作。

 

特殊的地方就是,有的操作需要root用户(比如无密码scp操作,我这里只是举例),有的操作需要oracle用户(exp导出用户)。

关键命令:su - oracle -c "/opt/expdatabase.sh" 

意思是在root用户下不需要切换到oracle用户,而直接使用oracle用户的角色执行 expdatabase.sh 文件。

  www.2cto.com  

我们需要在 root 下的 sh 文件中调用 expdatabase.sh 文件。

 

shell 脚本如下:

 

1、主 sh 脚本,root 执行

 

[java] 

#!/bin/sh  

  

filename=`date '+%Y%m%d-%H%M%S'`  

filename="${filename}bak.dmp"  

  

su - oracle -c "/u01/oradata/bak/expdatabase.sh ${filename}"  

  

scp -P 195 /u01/oradata/bak/${filename} [email protected]:/bak/202.102.41.35  

  

echo "Execution completed"  

 

2、需要用oracle用户的角色来执行的sh脚本 expdatabase.sh

[java] 

#!/bin/sh  

  

#进入oracle home  

cd /u01/oracle  

#加载oracle用户环境变量  

. ./.bash_profile  

  

exp user/[email protected] file=/u01/oradata/bak/$1 full=y  

 

Linux服务器MySQL数据库简单的异地备份方案 www.2cto.com 首先简单说下: 1、执行脚本导出数...

编辑:操作系统 本文来源:三.文件/etc/crontab中每行任务的描述格式如下,

关键词:

  • 上一篇:没有了
  • 下一篇:没有了