mysql 快速导出_mysql 快速导入导出

随着数据库的数据越来越大,采用mysqldump 越来越慢,测试环境的机器配置不高,2G左右的数据导入进入像蜗牛一般,非常影响效率,这里采用一些改进的方法来比以前导入的速度提高好几倍,但日常配备应有更好的策略(如:根据binlog来实现增量备份。)

这里只是几个纯粹的脚本,并且适用的数据库也是数据量较小的数据库,频繁使用的话,可以再加以调整,实现更加自动化的方式。

下面直接贴脚本

1、先在生产数据库服务器上,执行下面备份数据脚本

[root@MYSQL-M super_restore_database]# cat much_process_backup_database.sh

#!/bin/bash

db_name=your_db_name

db_date=`date +%Y-%m-%d`

bak_dir=/back/back_data_dir

if [ ! -d ${bak_dir}/${db_name} ];then

mkdir -p ${bak_dir}/${db_name}

fi

function start_much_process_back_table{

for table in `mysql -uroot -pPasswd $db_name -e show tables |grep -v Tables_in`

do

if [ -f /tmp/$table.txt ];then

rm -rf /tmp/$table.txt

fi

/usr/local/mysql/bin/mysql  -uroot -pPasswd $db_name -e  SELECT * INTO OUTFILE '/tmp/${table}.txt'  FIELDS TERMINATED BY ','  LINES TERMINATED BY '/n' FROM  $table;

done

}

function start_process{

while ((1))

do

if [ `ps -ef |grep  mysql  |grep -v grep | grep -v mysqld_safe | grep -v basedir|wc -l` -lt 1 ];then

# 这个判断语句判断导出进程是否存在,如果不存在则表示已经全部导出

echo starting to process.......

cd /tmp/

tar cvzf ${db_name}.${db_date}.tar.gz  ./*.txt  rm -rf ./*.txt

echo process over....

mv ${db_name}.${db_date}.tar.gz $bak_dir/${db_name}

exit 0

else

echo not dump final....

sleep 5;sleep 5

fi

done

}

start_much_process_back_table

start_process

2、传输备份文件到测试数据库服务器上采用scp ,这里省略

3、在测试数据库上执行恢复脚本。

[root@MYSQL-MB super_restore_database]# cat much_process_restore_table.sh

#!/bin/bash

db_name=your_db_name

db_date=`date +%Y-%m-%d`

bak_dir=/back/back_data_dir

tar_file=${bak_dir}/${db_name}/$db_name.${db_date}.tar.gz

if [ ! -d ${bak_dir}/${db_name} ];then

mkdir -p ${bak_dir}/${db_name}

scp   192.168.1.33:${bak_dir}/${db_name}/$db_name.${db_date}.tar.gz   ${bak_dir}/${db_name}

fi

if [ -f ${tar_file} ];then

cd ${bak_dir}/${db_name}

tar zvxf $db_name.${db_date}.tar.gz

fi

function start_restore_table{

for table in `mysql -uroot -pcrhAdmin $db_name -e show tables |grep -v Tables_in`

do

/usr/local/mysql/bin/mysql -uroot -pPwd $db_name -e  truncate table  $table;

sleep 1 ;

/usr/local/mysql/bin/mysql -uroot -pPwd $db_name -e  load data INFILE '${bak_dir}/${db_name}/$table.txt' into table $table  FIELDS TERMINATED BY ',' LINES TERMINATED BY '/n';

done

}

function start_process{

while ((1))

do

if [ `ps -ef |grep  mysql  |grep -v grep | grep -v mysqld_safe | grep -v basedir|wc -l` -lt 1 ];then

echo load data file over...  rm -rf ${bak_dir}/${db_name}/$table.txt

exit 0

else

echo not restore final....sleep 5;sleep 5

fi

done

}

start_restore_table

start_process

4、附加上一个 数据库结构拷贝脚本

如果远端数据库可以连接,这个脚本直接连到远端数据库,导出数据库结构,导入到本地数据库,初始化数据库结构,然后利用上面的导入导出脚本,可以快速导入导入。

[root@MYSQL-MB super_restore_database]# cat copy_database_structure.sh

#!/bin/bash

# copy one database structure  to another database

# zhangkai@cairenhui.com 20120920

db_name=your_db_name

db_date=`date +%Y-%m-%d`

bak_dir=/back/back_data_dir

if [ ! -d ${bak_dir}/${db_name} ];then

mkdir -p ${bak_dir}/${db_name}

fi

function export_database_structure{

echo export the database  structure......;

sleep 1

/usr/local/mysql/bin/mysqldump  -hX.X.X.X   -uroot -pPwd  -d $db_name  >  ${bak_dir}/${db_name}/${db_name}.S.sql

echo  export ok....

}

function init_database_structure{

/usr/local/mysql/bin/mysql -uroot -pPwd -e drop database IF EXISTS $db_name

echo drop database ${db_name}  over......;

sleep 1

/usr/local/mysql/bin/mysql -uroot -pPwd -e create database $db_name

echo create database ${db_name} ok ......;

sleep 1

/usr/local/mysql/bin/mysql -uroot -pPwd  $db_name < ${bak_dir}/${db_name}/${db_name}.S.sql

echo import database ${db_name} structure ok......;

sleep 1

}

export_database_structure

init_database_structure

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值