zoukankan      html  css  js  c++  java
  • mysql异地备份方案经验总结

    Mysql 数据库异地备份脚本

    实验环境:关闭防火墙不然不能授权登录

    Mysql-server192.168.30.25

    Mysql-client:  192.168.30.24

    实验要求:对mysql-server authclient库实现异地备份,每天凌晨2:00进行备份

    并写一个数据恢复脚本(库里有数据)

    mysql服务端授权,给予selectlock tables 权限,已备份

    [root@localhost ~]# mysql -uroot -p123456

    mysql> grant select,lock tables on auth.* to 'admin'@'192.168.30.24'identified by '123456';

    mysql> grant select,lock tables on client.* to 'admin'@'192.168.30.24' identified by '123456';

    mysql> flush privileges;

    连接测试

    这个需要安装好后的mysql,连接测试

    [root@client ~]# mysql -uadmin -p -h192.168.30.25

    mysql> show databases;

    +--------------------+

    | Database           |

    +--------------------+

    | information_schema |

    | auth               |

    | client             |

    +--------------------+

    3 rows in set (0.09 sec)

    写客户端脚本

    vim /opt/bakmysql.sh

    #!/bin/bash

    #mysql数据库备份脚本

    #设置登录变量

    MY_USER="admin"

    MY_PASS="123456"

    MY_HOST="192.168.30.25"

    MY_CONN="-u$MY_USER -p$MY_PASS -h$MY_HOST"

    #设置备份的数据库

    MY_DB1="auth"

    MY_DB2="client"

    #定义备份路径,工具,时间,文件名

    BF_DIR="backup"

    BF_CMD="/usr/bin/mysqldump"            这里是mariadbmysqldump路径

    BF_TIME=$(date +%Y%m%d-%H%M)

    NAME_1="$MY_DB1-$BF_TIME"

    NAME_2="$MY_DB2-$BF_TIME"

    #备份为.sql脚本,然后打包压缩(打包后删除原文件)

    [ -d $BF_DIR ] || mkdir -p $BF_DIR

    cd $BF_DIR

    $BF_CMD $MY_CONN --databases $MY_DB1 > $NAME_1.sql

    $BF_CMD $MY_CONN --databases $MY_DB2 > $NAME_2.sql

    tar zcf $NAME_1.tar.gz $NAME_1.sql --remove &> /dev/null

    tar zcf $NAME_2.tar.gz $NAME_2.sql --remove &> /dev/null

     

    [root@client backup]#chmod +x /opt/bakmysql.sh

    [root@client backup]#/opt/bakmsyql.sh

    [root@client backup]#ls backup

    [root@client backup]#crontab -e

    0    2   *    *   * /opt/bakmsyql.sh

    systemctl restart crond

    [root@client backup]#date 040601592019.59        //MMDDhhmmYY.SS   月日小时分钟年.

    可以用这个命令也可以主要修改系统时间,让备份多做几天的,然后我们让后面的脚本选择性恢复date -s 2019-05-26 01:59:55

    20190406日 星期日 01:59:59 CST

    [root@client backup]# date 040701592019.59

    20190407日 星期日 01:59:59 CST

    [root@client backup]# date 040801592019.59

    20190408日 星期一 01:59:59 CST

     

    撰写数据恢复脚本

    vim /opt/restore_mysql.sh

    #!/bin/bash

    #恢复mysql数据库数据脚本

    #设置变量

    MY_USER="admin"

    MY_PASS="123456"

    MY_HOST="192.168.30.23"

    BF_DIR="backup"

    mkdir .aaa &> /dev/null

    ls $BF_DIR |column -t > .aaa/db_list

    awk -F'-' '{print $2}' .aaa/db_list > .aaa/dt.txt

    read -p "请指定要恢复数据库的日期(YYYYMMDD):" dt

    if [ $dt -ge 20190501 ] && [ $dt -le 20190601 ]

            then

            grep "$dt" .aaa/dt.txt &> /dev/null

            if [ $? -ne 0 ]

            then

                    echo "很抱歉,您恢复的数据库备份日期不在备份日期范围内"

            else

                    echo "搜索到的可恢复数据库如下:"

                    awk -F'-' /$dt/'{print NR,$1}' .aaa/db_list

                    read -p "请选择您要恢复数据库的编号:" nb

                    nm=$(awk -F'-' /$dt/'{print NR,$1}' .aaa/db_list |awk /$nb/'{print $2}')

                    echo "现在开始恢复数据库:$nm $dt"

            cd $BF_DIR

            onm=$(ls |grep "$nm-$dt")

            mkdir .bbb

            tar xf $onm -C .bbb

        mysql -u$MY_USER -p$MY_PASS -h$MY_host $nm < .bbb/*

        echo "$nm 已经恢复到$dt"

    rm -rf .bbb

        cd - &> /dev/null

        rm -rf .aaa

        fi

        else

        echo "很抱歉,您恢复数据库的备份日期不在备份日期范围内"

        fi

     

     

    server端授权

    chmod +x /opt/restore_mysql.sh

    Mysql >grant all on auth.* to admin@192.168.30.24;

    Mysql >grant all on client.* to admin@192.168.30.24;

    Mysql > flush privileges;

    恢复测试

    执行脚本

    /opt/restore_mysql.sh

  • 相关阅读:
    方法引用
    day2
    柯朗数(Courant number)研究
    Socket网络编程学习一
    自制导航
    HighChart 体验之旅 (后台传递JSON参数和数据的方法)
    HighChart体验之旅2 对HighChart控件的再次封装
    委托学习小计
    面试常用SQL整理
    动态LINQ(Lambda表达式)构建
  • 原文地址:https://www.cnblogs.com/zc1741845455/p/10930141.html
Copyright © 2011-2022 走看看