MySQL使用dbdump实现传输数据,并更换默认存储目录

以下备份脚本可一键导出MySQL数据库数据,操作步骤如下(使用的是MySQL 5.7.21版本):

1、将脚本保存至~/bin/dbdump.sh

2、在Linux ~/.profile或者.bash_profile用户环境初始化文件中增加如下内容(环境变量内容视情况而定)

附:导出脚本如下,请复制并保存至~/bin/dbdump.sh

#!/usr/bin/env bash

### file name:dbdump.sh,save to ~/bin,and add $HOME/bin PATH to ~/.bash_profile or ~/.profile

### usage: dbdump.sh all or 1:with data,dbdump.sh none or 2:without data

####################################################################

## add these environment parameters to ~/.bash_profile or ~/.profile

# export ENV=数据库

# export db_host=数据库地址

# export db_port=数据库端口

# export db_user=数据库用户名

# export db_schema= 数据库用户名

# export BACKUP_PATH=/data/docker/container/mysql/backup

# export PATH=$HOME/bin:$PATH

####################################################################


date=`date "+%Y%m%d"`

error_log=${ENV}_dbdump_error.log


mkdir -p $BACKUP_PATH

cd $BACKUP_PATH


exec_dump() {

    echo

    echo "-- ${ENV} `date +%F\ %T` Database ${db_schema} dump to ${dump_file} start ..."

    if [ -f ${dump_file} ]; then

        rm -f ${dump_file}

    fi


    if [ "v${no_data}" == "v" ]; then

        echo "mysqldump --add-drop-table --set-gtid-purged=OFF -h ${db_host} -u ${db_user} -P ${db_port} -p -R ${db_schema} 2> ${error_log} | gzip > ${dump_file}"

        mysqldump --add-drop-table --set-gtid-purged=OFF -h ${db_host} -u ${db_user} -P ${db_port} -p -R ${db_schema} 2> ${error_log} | gzip > ${dump_file}

    else

        echo "mysqldump ${no_data} --add-drop-table --set-gtid-purged=OFF -h ${db_host} -u ${db_user} -P ${db_port} -p -R ${db_schema} 2> ${error_log} | sed 's/AUTO_INCREMENT=[0-9]*\s*//g' | gzip > ${dump_file}"

        mysqldump ${no_data} --add-drop-table --set-gtid-purged=OFF -h ${db_host} -u ${db_user} -P ${db_port} -p -R ${db_schema} 2> ${error_log} | sed 's/AUTO_INCREMENT=[0-9]*\s*//g' | gzip > ${dump_file}

    fi


    if [ -s ${error_log} ] ; then

        rm -f ${dump_file}

        cat ${error_log}

        echo

        echo "-- ${ENV} `date +%F\ %T` Database ${db_schema} dump error."

        exit 1

    else

        rm -f ${link_file}

        ln -s ${dump_file} ${link_file}

        echo

        echo "-- ${ENV} `date +%F\ %T` Database ${db_schema} dump to ${dump_file} finished ."

    fi

}


exec_dump_without_data() {

    no_data='--no-data'

    exec_dump

}


if [ x$1 != x ]; then

    dump_type=$1

else


    read -p "

    Which dump type do you want?


    1> all (with data)

    2> none structure only (no data)


    Input dump type: [1|2] > " dump_type


fi


case ${dump_type} in


    1|all)

        link_file=${db_schema}_dump_with_data.sql.gz

        dump_file=${date}_${link_file}

        exec_dump

    ;;

    2|none)

        link_file=${db_schema}_dump_without_data.sql.gz

        dump_file=${date}_${link_file}

        exec_dump_without_data

    ;;

    *)

        echo "dump type error, nothing going to do."

        exit 1

    ;;


esac

执行导出操作:

#导出数据库全部数据

dbdump.sh all

dbdump.sh 1

#导出数据结构(不包含数据)

dbdump.sh none

dbdump.sh 2

输入密码后数据库备份文件将导出至BACKUP_PATH目录中。

用dbdump.sh all 生成一个.gz数据压缩文件

sftp IP地址 连接到对应IP数据库服务器上,将gz压缩文件传输过去

gunzip *.gz文件  解压数据文件

如果默认存储目录容量不够

修改数据库数据存储目录

mysql -uroot -p 登录mysql

select @@datadir; 查看当前数据存储目录

sudo service mysqld stop 

停止数据库服务

在内容空间充足的目录下  创建存储目录,例如:/data

cp /var/lib/mysql /data

vim /etc/my.cnf

[client]

port=3306

socket=/data/mysql/mysql.sock

[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

启动服务

sudo service mysqld start 

再次登录mysql中  验证存储目录是否更改

更改成功后,在解压缩的sql目录下 执行这个命令

nohup mysql -u数据库账号 -p'数据库密码' 数据库 < *.sql &

ps -ef | grep mysql  

查看数据库进程,会有进程在跑

你可能感兴趣的:(MySQL使用dbdump实现传输数据,并更换默认存储目录)