暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

linux的定时器-备份mysql

IT学习道场 2022-06-16
235

之所以发布这篇文章,在重新审查已发布的博文时发现以前发布的【mysql的安全措施了解下定时器中描述不全,存在数据备份失败问题,这里补充下解决方案,带来的失误,深感抱歉,具体现象表现为:

    shell脚本手动执行没问题,crontab定时执行失败
    复制

    问题描述:


       Shell脚本手动执行可以正常运行,并得到正确结果;使用Crontab定时调度的时候,Shell脚本执行出来的结果数据量为0。


    原因:


         Linux中用crontab执行定时任务不会缺省的从用户profile文件中读取环境变量参数,所以经常导致在手工执行某个脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错。这是因为用户登录Linux操作系统的时候,”/etc/profile”, “~/.bash_profile”等配置文件会被自动执行,而crontab定时调度的时候可能不会执行配置文件。

    解决方案:

    Shell脚本缺省的 #!/bin/sh 开头换行后的第一行添加,可以参考 菜鸟教程

      source etc/profile
      source ~/.bash_profile
      复制

      最终mysql的备份脚本mysql_dump.sh内容如下:



        #! bin/bash
        source etc/profile
        source ~/.bash_profile


        login_user="root"
        login_passwd=""
        vDate=`date +%Y%m%d`
        backup_dir="/home/data/backups/"$vDate"/"


        echo$backup_dir


        if[ ! -d $backup_dir ];then
        mkdir -p $backup_dir
        fi


        # 将需要备份的数据放入
        db_array=("数据库1名字""数据库2名字" "数据库3名字") #配置要备份的数据库


        fordb_name in ${db_array[*]}
        do
        mysqldump -u root -p$login_passwd $db_name > $backup_dir$db_name.sql
        done


        # 删除7天前备份的文件
        find backup_dir -atime +7 -name "*.sql"-exec rm -rf {} \


        echo"备份结束"
        复制

        定时任务执行

        使用linux的crontab命令定时执行备份数据的脚本

          crontab -e
          复制

          编辑定时任务,按 i 进入编辑模式

          这里凌晨二执行一次定时器规则

            00 02 * * * /bin/sh test/mysql_dump.sh
            复制

            编辑完保存即可,(夜猫子熬不到半夜两点)

            按 【Esc】然后 输入 :wq 保存退出

            定时任务的执行最小单位为分钟,详情代表如下:

              *    *    *    *    *
              - - - - -
              | | | | |
              | | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
              | | | +---------- 月份 (1 - 12)
              | | +--------------- 一个月中的第几天 (1 - 31)
              | +-------------------- 小时 (0 - 23)
              +------------------------- 分钟 (0 - 59)
              复制

              注意要开启你的定时器,定时器常用操作命令如下:

                crontab -e  # 创建自己的一个任务调度,此时会进入到vi编辑界面,来编写我们要调度的任务


                crontab -l # 列出定时的任务


                crontab -r con_name # 删除crontab文件


                which ifconfig # 获取命令路径




                /sbin/service crond start 启动服务


                /sbin/service crond stop 关闭服务


                /sbin/service crond restart 重启服务


                /sbin/service crond reload 重新载入配置


                /sbin/service crond status //启动服务


                chkconfig –level 35 crond on 加⼊开机⾃动启动:


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


                service crond status //查看状态


                chkconfig crond on //设置开机自动启动crond服务:
                systemctl enable crond.service // 设置开机自动启动crond服务:


                chkconfig –list crond //开机级别的crond服务运行情况 ,2、3、4、5级别开机会自动启动crond服务
                chkconfig crond off//取消开机自动启动crond服务:
                crontab -e配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务
                crontab -l //列出当前的所有调度任务
                crontab -l -u jp //列出用户jp的所有调度任务
                crontab -r //删除所有任务调度工作


                每天早上6点
                0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。


                每两个小时
                0 */2 * * * echo "Have a break now." >> /tmp/test.txt


                晚上11点到早上8点之间每两个小时和早上八点
                0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt


                每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
                0 11 4 * 1-3 command line


                1月1日早上4点
                0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/


                每小时执行/etc/cron.hourly内的脚本
                01 * * * * root run-parts /etc/cron.hourly
                每天执行/etc/cron.daily内的脚本
                02 4 * * * root run-parts /etc/cron.daily


                每星期执行/etc/cron.weekly内的脚本
                22 4 * * 0 root run-parts /etc/cron.weekly


                每月去执行/etc/cron.monthly内的脚本
                42 4 1 * * root run-parts /etc/cron.monthly


                每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。
                5,15,25,35,45,55 16,17,18 * * * command


                每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
                00 15 * * 1,3,5 shutdown -r +5


                每小时的10分,40分执行用户目录下的innd/bbslin这个指令:
                10,40 * * * * innd/bbslink


                每小时的1分执行用户目录下的bin/account这个指令:
                1 * * * * bin/account




                复制






                文章转载自IT学习道场,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论