zoukankan      html  css  js  c++  java
  • 斑马斑马-04-白云之上-mysql定时自动备份实现

    原文链接:https://blog.csdn.net/qq_31659985/java/article/details/84668379

    mysql_backup.sh 用于备份数据

    mysql_restore.sh 用于恢复数据

    remove_backup.sh 用于删除一段时间以前的备份文件

    一、数据备份

    1.创建备份目录

      我们把备份文件放在/data/backup/mysql下面,把脚本放在/data/backup 下面

      创建文件夹:mkdir -p  /data/backup/mysql

    2.创建脚本文件

      创建mysql_backup.sh文件

       

       vi mysql_backup.sh 

    #!/bin/bash
    # 需要的话,自己改这里哦
    #db_user='root'
    #db_password=`cat /data/www/mysql_password`
    db_name='test'
    backup_dir='/data/backup/mysql/'
    current_time=$(date +'%Y-%m-%d_%H%M%S')
    filepath=$backup_dir$current_time'.sql.gz'
    #此处没有使用 $db_password $db_user, 已经写入到配置文件中
    echo '开始导出数据库...'
    mysqldump --defaults-extra-file=/data/backup/my_mysql.cnf  $db_name | gzip > $filepath
    echo '导出成功,文件名为: '$filepath
    mysql_backup.sh 

    上面的脚本没有使用到 $db_passoword, 需要的话,大家也可以不用创建配置文件,直接把 -p$db_password -u$db_user拼接到 mysqldupm 命令后面

    使用 gzip 命令压缩的话,可以节省 80% 的空间
    mysql 5.6以上会提示在命令行输入密码不安全,会有一行 notice ,但是也能导出成功
    如果直接使用密码的话,就会报下面这个警告
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    解决不报错的办法就是把密码写到配置文件中去,文件内容参考如下,配置文件我们可以在新建一个

    vi my_mysql.cnf

    [mysqldump]
    max_allowed_packet    = 400M
    host=11.19.113.203
    user=root
    password='111111111111'
    [mysql]
    host=11.19.113.203
    user=root
    password='111111111111'
    View Code

     大家需要把上面的参数改成自己的就好了,可别漏了这一步哦。

    其中 mysqldump 下的参数是给导出的命令使用的,mysql 下的参数是导入的时候使用的

    3.对脚本分配可执行权限

      chmod +x ./mysql_backup.sh

    4.对脚本进行测试

      导出

      sh ./mysql_backup.sh

      查看

      ll ./mysql 

      解压并比较文件大小

      gzip -dc ./mysql/2020-03-26_223108.sql.gz > ./mysql/2020-03-26_223108.sql

    5.如果在执行过程中报错

      mysql_backup.sh: line 11: mysqldump: command not found

    1、先用一条find命令查找mysqldump的所载路径

    find  / -name mysqldump -print

    2、mysql:command not found建立软连接(这个我们上一篇中已经建立)
    ln -s  /usr/local/mysql/bin/mysql  /usr/bin
    3、mysqldump:command not found 建立软连接
    ln -s  /usr/local/mysql/bin/mysqldump  /usr/bin 

    二、数据恢复

    1.使用还原目录 

      我们已经把备份文件放在/data/backup/mysql下面,把备份脚本放在/data/backup 下面 

      同样,把mysql_restore.sh文件也放在/data/backup 下面 

    2.创建脚本文件 

      创建mysql_restore.sh文件  

       vi mysql_restore.sh 

    #!/bin/bash
    
    if [ -z $1 ] || [ ! -f $1 ]
    then
        echo "请输入sql压缩文件(*.sql.gz)"
        exit 1
    fi
    
    db_name='test'
    base_dir='/data/backup/mysql/'
    gz_sql_file=`basename $1`
    
    file_ext=${gz_sql_file##*.}
    if [ $file_ext != 'gz' ]
    then
        echo '文件格式不正确,请输入 .sql.gz 文件'
        exit 1
    fi
    
    sql_file=${gz_sql_file%.*}
    echo '解压文件中...'
    gzip -dc $base_dir$gz_sql_file > $base_dir$sql_file
    echo '解压完成.'
    echo '开始导入数据库...'
    
    mysql --defaults-extra-file=/data/backup/my_mysql.cnf $db_name < $base_dir$sql_file
    
    if [ -f $base_dir$sql_file ]
    then
        echo '删除临时文件.'
        rm -f $base_dir$sql_file
    fi
    echo '导入完成.'
    mysql_restore.sh

    上面代码中的配置文件,就是我们第一步时创建的配置文件,在这里一样的使用

    3.对脚本分配可执行权限

      chmod +x ./mysql_restore.sh

    4.对脚本进行测试

      查看数据库,

      

       删除数据库,(重要数据库不建议执行此操作)

     

      通过脚本恢复

      sh ./mysql_restore.sh  ./mysql/备份文件名.sql.gz

      如果数据库不存在,要先建立一个,创建的数据库名要和(mysql_restore.sh设置的一样)

      恢复完成(欢迎张三回来)

       

    三、创建计划任务

    1.创建脚本文件

    crontab -e
    # 粘贴下面的内容, 大家根据自己的需要更改就可以了
    0 1,12 * * * /data/backup/mysql_backup.sh # 每天凌晨1点,中午12点备份一次数据

    # 大家可以先使用下面这条做为测试哦,1分钟跑一次,我们只需要查看 ll /data/backup/mysql 这个文件夹就好了
    */1 * * * * /data/backup/mysql_backup.sh

    2.测试

     

    四、添加自动清理备份

    1.自动删除 

      我们已经把备份文件放在/data/backup/mysql下面,把备份脚本和恢复脚本放在/data/backup 下面 

      同样,把remove_backup.sh文件也放在/data/backup 下面 

    2.创建脚本文件 

      创建remove_backup.sh文件  

       vi remove_backup.sh

    #/bin/bash
     
    # 删除1天前的备份
     find /data/backup/mysql -type f -mtime +1 | xargs rm -f
    remove_backup.sh

    如果是,删除30天前的,把相应位置改为30
      find /data/backup/mysql -type f -mtime +30 | xargs rm -f

    3.对脚本分配可执行权限

      chmod +x ./remove_backup.sh

    4.创建定时任务  

    crontab -e
    # 粘贴下面的内容, 大家根据自己的需要更改就可以了
    0 1,12 * * * /data/backup/remove_backup.sh # 每天凌晨1点,中午12点备份一次数据
    
     
    
    # 大家可以先使用下面这条做为测试哦,2分钟跑一次,我们只需要查看 ll /data/backup/mysql 这个文件夹就好了
    */2 * * * * /data/backup/remove_backup.sh
    View Code

    5.对脚本进行测试

    5.1 准备工作

     修改(删除脚本)remove_backup.sh文件把时间设置成删除半小时的历史文件

       find /data/backup/mysql -type f -mmin +30 | xargs rm -f

      修改(定时任务)crontab把时间设置成没两分钟执行一次

      find /data/backup/mysql -type f -mtime +30 | xargs rm -f

     定时任务设置成每分钟

     

    5.2 开始观察

    删除前

     

     删除后

    5.2 收工调整

      1:把定时任务设置成每天凌晨3:00备份。每天凌晨5:00删除过期备份

      2:把删除备份的保留时间修改成15天

      

    五、增量备份与删除

     

  • 相关阅读:
    走下神坛的内存调试器
    mysql在高内存、IO利用率上的几个优化点 (sync+fsync) 猎豹移动技术博客
    跃趣科技
    java 类型转换:
    ab ApacheBench web测试工具
    使用EPEL和REMI第三方yum源
    “too many open files" ----增大打开的文件数
    Tcpdump命令行 与 GUI Wireshark
    gcc -I -L -l区别
    rsyslog 报 WARNING: rsyslogd is running in compatibility mode.
  • 原文地址:https://www.cnblogs.com/YK2012/p/12576327.html
Copyright © 2011-2022 走看看