zoukankan      html  css  js  c++  java
  • linux下实现mysql数据库定时备份

    https://www.cnblogs.com/taomylife/p/8022104.html

    https://www.cnblogs.com/huxiaoguang/p/10847401.html

    https://blog.csdn.net/sinat_33201781/article/details/94443092

    1. 创建备份目录

      mkdir -p /data/dbback/mysql
      
    2. 创建备份shell脚本

      vim /data/dbback/bkDatabaseName.sh
      

      输入或粘贴以下内容

      需要先在/etc/my.cnf中添加以下内容

      打开etc/my.cnf,在[mysqldump]下增加:
      user=root
      password=cw123456

      #!/bin/bash
      
      # 需要备份的数据库列表
      db_list="mysql sys test"
      # 数据库备份目录
      backup_dir="/data/dbback/back_dir"
      # 当前日期
      date=`date +%Y%m%d`
      # 当前日期前7天日期
      olddate=`date +%Y%m%d -d "-7 days"`
      # 日志备份目录
      backlog_dir="/data/dbback/back_log"
      
      echo $olddate
      
      # 创建当天的备份数据和日志文件目录
      mkdir -p $backlog_dir/$date
      mkdir -p $backup_dir/$date
      # 删除七天前备份数据和日志文件
      rm -rf $backlog_dir/$olddate
      rm -rf $backup_dir/$olddate
      
      for db_name in $db_list
      do
      echo "$db_name back begin at  `date +%H:%M:%S`" >> $backlog_dir/$date/back.log
      mysqldump $db_name --skip-lock-tables | gzip > $backup_dir/$date/$db_name"_"$date.sql.gz
      echo "$db_name back end at  `date +%H:%M:%S`" >> $backlog_dir/$date/back.log
      done
      
      echo "all back over!" >> $backlog_dir/$date/back.log
      
    3. 添加可执行权限

      chmod +x bkDatabaseName.sh
      

      执行脚本 ./bkDatabaseName.sh

      报错Warning: Using a password on the command line interface can be insecure.参考官网http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html做修改。

      http://www.jiadingqiang.com/3438.html

      直接把上面的脚本中的用户名和密码去掉,修改为“mysqldump dbname>"db_name > "backup_dir/dbname""db_name"_"time.sql",但是要在配置文件中加上用户名和密码。可以在my.cnf内指定。

      打开etc/my.cnf,在[client]下增加:
      user=root
      password=root
      但是这样就所有块的操作都能共享了,生产环境上为了安全还是尽量分开(所以也可以在[mysqldump]下增加)。

    4. 创建定时任务

      systemctl start crond
      systemctl status crond
      systemctl enable crond
      

      检测或安装 crontab,通过命令判断crontab有没有,没有的话先安装。

    5. 安装cron

      yum -y install vixie-cron
      yum -y install crontabs

      说明:
      vixie-cron 软件包是 cron 的主程序;
      crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

    6. 添加计划任务

      执行命令:

      crontab -e
      

      这时就像使用vi编辑器一样,可以对计划任务进行编辑。

      输入以下内容并保存: (每天凌晨一点备份数据库

      00 01 * * * /data/dbback/bkDatabaseName.sh
      

      附 Crontab 格式

      crontab [选项]

      选项:

      -e: 编辑crontab定时任务

      -l: 查询crontab任务

      -r: 删除当前用户所有的crontab任务

      分 时 日 月 周 执行命令
      第 1 列分钟 1~59,每分钟用 * 或者*/1表示,整点分钟数为00或0
      第 2 列小时 1~23(0 表示 0 点)
      第 3 列日 1~31
      第 4 列月 1~12
      第 5 列星期 0~6(0 表示星期天)
      第 6 列要运行的命令
      
      项目 含义 范围
      第一个“*” 一小时当中的第几分钟 0-59
      第二个“*” 一天当中的第几小时 0-23
      第三个“*” 一个月当中的第几天 1-31
      第四个“*” 一年当中的第几月 1-12
      第五个“*” 一周当中的星期几 0-7(0和7都代表星期日)
      时间 含义
      45 22 * * * 命令 在22点45分执行命令
      0 17 * * 1 命令 每周1 的17点0分执行命令
      0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令
      40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令
      */10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令
      0 0 1,15 * 1 命令 每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。
      特殊符号 含义
      * 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
      代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
      - 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令
      */n 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令
  • 相关阅读:
    也谈一下关于兔子的问题
    关于sql函数返回表
    关于1000瓶水的问题
    WWF的疑问
    天干和地支
    在若干个整数中找到相加之和为某个整数的所有组合的算法
    输出一个数组的全排列
    新的博客, 新的里程
    学习搜索引擎心得(10.2511.25)
    下一个阶段(用C++重写Lucene的计划)
  • 原文地址:https://www.cnblogs.com/chenxiaoge/p/13335420.html
Copyright © 2011-2022 走看看