美文网首页
Mysql分库分表备份方法实现

Mysql分库分表备份方法实现

作者: 果子学长 | 来源:发表于2020-02-08 19:51 被阅读0次

    1.mysqldump工具介绍

    mysqldump命令是MySQL数据库自带的一个备份命令,它支持数据库全备也可以指定库进行备份,它备份的文件以文件形式备份,且文件内容都是SQL语句形式的存在。

    2.基本命令的使用

    (1)mysqldump语法格式

    mysqldump  [options] –u 用户名 -p 密码 数据库名  >  备份的文件

    (2)mysqldump[options]参数列表如下表所示:

    (3)连接mysql命令

    [root@bigdata3 ~]# mysql -h10.9.1.43 -uroot -p123456 -e "show databases;"

    去掉周围边框使用-s命令

    [root@bigdata3 ~]# mysql -h10.9.1.43 -uroot -p123456@3306 -s -e "show databases;"

    命令执行结果如下图所示:

    (4)mysqldump命令多数据库备份

    [root@bigdata3 ~]# mysqldump -h10.9.1.43 -uroot -p123456 -B dandan_test oozie > /home/centos/mysql_back.bak

    cd 到/home/centos目录下查看生成了该文件

    进入该文件中查看,备份的数据全部以sql命令的形式生成,如下图所示。

    (5)mysqldump压缩备份

    [root@bigdata3 ~]# mysqldump -h10.9.1.43 -uroot -p123456 -B dandan_test | gzip > /home/centos/mysql_back_B.sql.gz

    查看:

    (6)数据库备份恢复

    删掉dandan_test:drop database dandan_test;

    非压缩恢复:

    [root@bigdata3 centos]# mysql -h10.9.1.43 -uroot -p123456 </home/centos/mysql_back.bak

    压缩恢复:

    [root@bigdata3 centos]# gunzip < /home/centos/mysql_back_B.sql.gz | mysql -h10.9.1.43 -uroot -p123456

    验证:

    mysql -h10.9.1.43 -uroot -p123456 -e "use dandan_test;select * from tb_score1;"

    [root@bigdata3 centos]# mysql -h10.9.1.43 -uroot -p123456 -e "use dandan_test;select * from tb_score1;"

    (7)mysql备份表结构

    [root@bigdata3 centos]# mysqldump -h10.9.1.43 -uroot -p123456 -d dandan_test >/home/centos/dandan_test_back.bak

    查看:

    (8)mysql备份表数据

    [root@bigdata3 ~]# mysqldump -h10.9.1.43 -uroot -p123456 -t dandan_test >/home/centos/dandan_test_back.bak

    查看结果如下提所示:

    3.mysql分库备份shell脚本

    具体shel脚本如下:

    #!/bin/bash

    DATE=$(date '+%Y%m%d')

    HOST=10.9.1.43

    USER=root

    PASS=123456

    BACKUP_DIR=/home/centos/db_backup

    DB_LIST=$(mysql -h$Host -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep "dandan_test|oozie")

    if [ ! -d $BACKUP_DIR ]

    then

    mkdir -p "$BACKUP_DIR"

    fi

    for DB in $DB_LIST; do

        BACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql

    mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>/dev/null

        if [ $? != 0 ]; then

            echo "$BACKUP_NAME 备份失败!"

        fi

    done

    4 mysql分表备份shell脚本

    具体shell脚本如下:

    #!/bin/bash

    DATE=$(date '+%Y%m%d')

    HOST=10.9.1.43

    USER=root

    PASS=123456

    BACKUP_DIR=/home/centos/db_backup

    DB_LIST=$(mysql -h$HOST -u$USER-p$PASS -s -e "show databases;" 2>/dev/null |egrep "dandan_test|oozie")

    for DB in $DB_LIST; do

        BACKUP_DB_DIR=$BACKUP_DIR/${DB}_${DATE}

        [ ! -d $BACKUP_DB_DIR ] && mkdir -p $BACKUP_DB_DIR &>/dev/null

        TABLE_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "use $DB;show tables;" 2>/dev/null)

        for TABLE in $TABLE_LIST; do

            BACKUP_NAME=$BACKUP_DB_DIR/${TABLE}.sql

            if ! mysqldump -h$HOST -u$USER -p$PASS $DB $TABLE > $BACKUP_NAME 2>/dev/null; then

                echo "$BACKUP_NAME 备份失败!"

            fi

        done

    done

    5.小结

       本文主要阐述了Mysql分库分表的备份方法,并对mysqldump工具具体操作进行了分析研究,给出了具体备份的shell脚本,可以通过crontab定时任务按照项目需求进行备份。

      本文要点:

    (1)连接mysql的指令,前提需要安装mysql客户端。

    (2)mysqldump指令,注意分库、分表指定的参数,及恢复的方法。

    (3)mysql分库的shell脚本的编写

    (4)mysql分表的shell脚本编写(建议编写时,基本的指令需要先在linux中实验成功)

    相关文章

      网友评论

          本文标题:Mysql分库分表备份方法实现

          本文链接:https://www.haomeiwen.com/subject/pmjmxhtx.html