Mysql分库分表备份方法实现

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

压缩恢复:

[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分库分表备份方法实现)