随着数据库的数据越来越大,采用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

mysql 快速导出_mysql 快速导入导出相关推荐

  1. mysql 交互命令 导出_MySQL数据导入导出方法与工具(2)

    批处理导入文件,从sql文件导入数据到数据库中 ,批处理是一种非交互式运行mysql程序的方法,如同您在mysql中使用的命令一样,你仍然将使用这些命令. 为了实现批处理,您重定向一个文件到mysql ...

  2. mysql数据库导出_MySQL数据库导入导出详解[转发]

    1. 概述 MySQL数据库的导入,有两种方法: 1) 先导出数据库SQL脚本,再导入: 2) 直接拷贝数据库目录和文件. 在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况 ...

  3. mysql数据库导入导出_MySQL数据库导入导出详解

    MySQL数据库的导入,有两种方法:1) 先导出数据库SQL脚本,再导入:2) 直接拷贝数据库目录和文件.在不同操作系统或MySQL版本情况 1. 概述 MySQL数据库的导入,有两种方法: 1) 先 ...

  4. mysql多线程导出_MySQL多线程导入导出工具Mydumper

    MySQL多线程导入导出工具Mydumper 今天从线上使用mysqldump将数据表从一个库导入到另外一个库,结果导出速度超级慢.于是网上搜了搜发现这个东东.测试之后发现还不错.分享给大家. 简单介 ...

  5. hive向mysql导数据_Mysql Hive 导入导出数据

    ---王燕行转列sql select split(concat_ws(',',collect_set(cast(smzq as string))),',')[1] ,split(concat_ws(' ...

  6. c 控制mysql数据导出_MySql数据库导入导出的三种方式

    第一种: 使用mysql自带的Workbench可视化工具进行操作,如图: 选择好以后按  start Export 选择好以后按  start import 第二种: 使用Navicat 右键点击转 ...

  7. 开发指南专题十五 JEECG微云快速开发平台EXCEL导入导出

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴!  开 ...

  8. MYSQL常用命令大全(导入导出、创建、单多表查询(超详细)、授权)

    MYSQL常用命令 一.导入导出 1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认 ...

  9. mysql导入三个基本表_mysql 基础导入导出

    导入导出mysqldump 导出:mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql 导入:系统命令行: MySQL -u用户名 -p密码 ...

最新文章

  1. 51单片机c语言运算符,51单片机表达式语句的用法解析
  2. Android中WebView加载sdcard中的html显示
  3. SCN试验之二 checkpoin scn 与数据库scn的关系
  4. 内存泄露检测工具之DMalloc
  5. 学习笔记 Keras:一些基本概念
  6. 专访刘伟:软件开发人员的内功修炼之道
  7. python读取文件名包含某字符的文件_python 读写文件时判断文件名是否包含某字符串...
  8. wxPython多个窗口的基本结构
  9. 远离国产!电脑垃圾清理工具:ccleaner和CleanMyMac
  10. 使用J-Link打印日志——SEGGER Real-Time Transfer(RTT)工具的移植使用
  11. 微信小程序tabBar配置中的坑中坑
  12. 基于TCP/IP的展厅智能中控系统
  13. Visual Studio Code 代理设置
  14. Android APP升级时解析程序包时出现问题
  15. mac book pro 全新安装 windows系统 进行键盘映射,启动标准F1,F2
  16. apt-get install E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing
  17. 神经网络在故障诊断中的应用
  18. 控制工程基础 董景新_编委读报丨“十大最美公交司机”都是谁;新疆交通消费扶贫花样多;海南邮轮港口海上游航线试点迎来新突破……...
  19. 高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)
  20. Git 从入坑到放不下

热门文章

  1. 06-图1 列出连通集
  2. sql多行合成一行的解决方法
  3. 坑爹的uint32_t
  4. 【Q】【poj 1144】【poj 1523】
  5. 2020年9月26日-02-软件工程-工程化思维+瀑布模型+敏捷开发
  6. 数据库基础知识——初始MySQL
  7. linux的驱动开发——内核模块的编译
  8. Java中文件的创建
  9. 向量归一化的matlab程序,向量X的归一化及其Matlab简单示例
  10. 残疾人计算机高考试题,残疾人勇夺玉溪高考榜眼:想去清华学计算机