• 实现对MySQL数据库进行分库/分表备份(shell脚本)


    工作中,往往数据库备份是件非常重要的事情,毕竟数据就是金钱,就是生命!废话不多,下面介绍一下:如何实现对MySQL数据库进行分库备份(shell脚本)

    Mysq数据库dump备份/还原语法:

    mysqldump -u 用户名 –p 数据库名 > 导出的文件名;

    mysqldump -u 用户名 –p 数据库名 < 导入的文件名;

    首先,我们需要知道是备份全库还是部分库;

    其次,我们需要获取到需要备份的库名列表;

    最后,编写脚本实现数据备份。

    分库备份:

    1、查看当前环境是否启动了MySQL服务,如果没启动,便启动该服务:

    2、获取分库备份的库名列表:

    登录MySQL数据库两种方式:sock方式和tcp/ip方式,详情https://my.oschina.net/zjllovecode/blog/1617755

    我们以sock方式登录MySQL获取库名列表:

    3、编写备份脚本:

    [root@bqh-118 scripts]# vim mysqldb.sh 
    #!/bin/sh
    # ******************************************************
    # Author       : a?锦衣卫 
    # Last modified: 2019-05-18 13:25
    # Email        : 1147076062@qq.com
    # blog         : https://www.cnblogs.com/su-root
    # Filename     : mysqldb.sh
    # Description  : mysql_dmup
    # ******************************************************
    user=root        #用户名        
    pass=123456      #密码
    socket=/tmp/mysql.sock  #登录方式
    backfile=/server/backup #备份路径
    [ ! -d $backfile ] && mkdir -p $backfile #判断是否有备份路径
    cmd="mysql -u$user -p$pass -S $socket"  #登录数据库
    dump="mysqldump -u$user -p$pass -S $socket -B -X -F -R" #mysqldump备份参数 
    dblist=`$cmd -e "show databases;"|sed 1d|egrep -v "_schema|mysql"` #获取库名列表
    for db_name in $dblist #for循环备份库列表
    do
     $dump $db_name|gzip >/server/backup/${db_name}_$(date +%F).sql.gz #库名+时间备份打包至指定路径下
    done

    执行脚本:

    ok,分库备份success!

    下面我们介绍一下分库分表备份:

    首先,我们需要获取到需要备份的库名列表及表名列表;然后,编写脚本实现数据备份。

    ok,库名及表面获取了,接下来我们在已有的脚本基础上稍作修改(加个表名循环即可)

    [root@bqh-118 scripts]# vim mysqldb1.sh 
    #!/bin/sh
    # ******************************************************
    # Author       : a?锦衣卫 
    # Last modified: 2019-05-18 13:25
    # Email        : 1147076062@qq.com
    # blog         : https://www.cnblogs.com/su-root
    # Filename     : mysqldb.sh
    # Description  : mysql_dmup_fk
    # ******************************************************
    user=root        #用户名        
    pass=123456      #密码
    socket=/tmp/mysql.sock  #登录方式
    backfile=/server/backup #备份路径
    [ ! -d $backfile ] && mkdir -p $backfile #判断是否有备份路径
    cmd="mysql -u$user -p$pass -S $socket"  #登录数据库
    dump="mysqldump -u$user -p$pass -S $socket -X -F -R" #mysqldump备份参数 
    dblist=`$cmd -e "show databases;"|sed 1d|egrep 'bqh|jyw'` #获取库名列表
    for db_name in $dblist #for循环备份库列表
    do
     tablest=`$cmd -e "show tables from $db_name;"|sed 1d` #获取库中表名
       for tname in $tablest  #for循环备份库中表名列表
       do
         mkdir -p $backfile/$db_name #创建库文件
         $dump $db_name $tname|gzip >$backfile/$db_name/${tname}_$(date +%F).sql.gz
                            #库名+表名+时间备份打包至指定路径下
       done
    done

     

    执行脚本:

    ok,分库分表备份success!

  • 相关阅读:
    Python TIPS上一道关于人民币金额小写转大写的题
    C Primer Plus--C预处理器和C库(1)
    C Primer Plus--位操作
    C Primer Plus--结构和其他数据类型(2)
    计算机缓存方式对于程序运行的影响
    7. 整数反转
    服务器初始化安装docker、docker-compose
    nacos爬坑史-1
    Kafka 报错: Error Uncaught exception in scheduled task 'flush-log'
    CentOS中docker部署的项目CPU占用率持续100%以上
  • 原文地址:https://www.cnblogs.com/su-root/p/10885854.html
Copyright © 2020-2023  润新知