使用tbdba-restore-mysqldump.pl切割mysqldump文件

这里介绍一个最近用得很多的一个小工具:tbdba-restore-mysqldump.pl

主要有两个功能:

(1) 尽可能快的从一个非常大的mysqldump文件的分离出某个单表的备份文件

(2) 可以帮你把一个大的mysqldump文件,切割成非常小的单表备份文件(可继续做并行恢复)

1. 什么时候需要这么做

(1) 如果把MySQL中某一个表数据弄丢了,需要从很大的mysqldump备份文件中恢复这个表

(2) 如果你想并行恢复整个mysqldump备份文件时,这个脚本可以帮你把大文件切割成多个小的单表备份文件,然后就可以方便并行恢复多个文件了

2. 如何使用这个脚本

这里以实例的方式介绍如何使用该脚本:

(1) 从backup.sql文件中获取表process的备份:

tbdba-restore-mysqldump.pl -t process -f backup.sql

(2) 从backup.sql文件中获取数据库monitor中的表process的备份:

tbdba-restore-mysqldump.pl -t process -s monitor -f backup.sql

(3) 从backup.sql文件中获取多个表的备份文件(例如表process、users):

tbdba-restore-mysqldump.pl -t process,user -s monitor -f backup.sql

(4) 直接接收来自管道的输出(如果你的mysqldump备份是压缩后,则可以使用):

gunzip -c backup.sql.gz|tbdba-restore-mysqldump.pl -t process,user -s monitor

(5) 从backup.sql文件中获取数据库monitor下所有表的备份文件:

gunzip -c backup.sql.gz|tbdba-restore-mysqldump.pl -s monitor

(6) 从backup.sql文件中获取所有数据库下所有表的备份文件:

gunzip -c backup.sql.gz|tbdba-restore-mysqldump.pl --all-tables

(7) 使用-d参数,则可以看到切割的过程中的更多信息:

date && gunzip -c /backdir/backup.sql.gz|tbdba-restore-mysqldump.pl -d -a && date

3. tbdba-restore-mysqldump.pl有什么优势

(1) 如果指定了-s(获取某个数据库中的备份)参数,则脚本在成功截取需要恢复的后就会立刻退出,所以如果你要恢复的表恰好在备份文件的比较靠前的位置时,该脚本的速度会非常快。

一个实际工作例子:

$ls -lh backup.sql.gz
-rw-r--r-- 1 mysql dba 14G Nov 21 04:49 backup.sql.gz
$date && gunzip -c backup.sql.gz|./tbdba-restore-mysqldump.pl -s monitor_general -t monitor_host_info && date
Fri Nov 25 14:35:06 CST 2011
Fri Nov 25 14:46:49 CST 2011
(the unzip of backup.sql.gz is 88G)

如果要全量恢复的话,根据经验值:88GB的sql文件完全恢复约需要400分钟(经验值)。

(2) 为了让每个独立的单表备份文件能够准确恢复,脚本做了两个额外的处理工作:在每个单表备份前加上'use db',让该表能够恢复到正确的数据库;为了让单表恢复时字符集不出错误,脚本在某个单表备份前加上了对应的SET NAMES utf8、SET TIME_ZONE等命令。

4. 其他人都怎么做

Extract a Single Table from a mysqldump File:这篇文章提到了三个办法,分别是:perl脚本(我这里的做法基本“雷同”),awk解析后切割,先恢复到临时库(对大文件这个不现实...)。对比了我们的Perl脚本,这里做了几个改进:可以同时解析出多个表;完成目标表的切割后,则立刻退出,不再扫描剩余部分;会把mysqldump头部输出放到每一个切割文件中,方便各种字符集的恢复;

Restore a Single Table From mysqldump:这篇文章介绍如何用Sed来完成这个工作。

MySQL - Restoring a single table from nightly backup:这位朋友则,想出一个“更损”的招:只给恢复用户赋予需要恢复的表的权限,然后用--force参数恢复整个mysqldump文件。

On restoring a single table from mysqldump:这篇文章则对比了使用grep sed 和“权限控制”三种方法的速度。

最后,如果不喜欢mysqldump这种一股脑的备份方式,可以考虑试用mydumper。

OK,That's all.

时间: 2024-10-01 19:38:13

使用tbdba-restore-mysqldump.pl切割mysqldump文件的相关文章

请问 mysqldump 备份的sql文件 导入到另一个库中,为什么老是少数据?

问题描述 请问 mysqldump 备份的sql文件 导入到另一个库中,为什么老是少数据? 直接导出的database 请问 mysqldump 备份的sql文件 导入到另一个库中,为什么老是少数据? 备份时就加了 --events 这一个参数. 求指导~ 解决方案 是不是导出了所有对应的database,可以直接查看导出的sql文件中是否含有这些表

linux下shell脚本切割大文件为多个小txt文件

解决方法: 1. 先使用split命令切割大文件,每个小文件保存100万行 split 参数: -b  :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等: -l  :以行数来进行分割: #按每个文件1000行来分割除 split -l 1000 httperr8007.log httperr   httpaa,httpab,httpac ........   #按照每个文件100K来分割 split -b 100k httperr8007.log http   httpaa,ht

mysqldump导出压缩(gzip)文件

   代码如下 复制代码 mysqldump < mysqldump options> | gzip > outputfile.sql.gz

mysqldump 导出的sql文件导入时提示Unknown command

最初我就这样导入数据  代码如下 复制代码 #mysql forum<forum.sql -u root -p -h 192.168.0.8 Enter password:123456 结果出现错误 ERROR at line 1410: Unknown command '['. 经过分析原来是编码错误,后来在导入的时候指定字符集 --default-character-set=utf8,再次导入备份文件,一切 顺利. 命令如下:  代码如下 复制代码 mysql -uroot -p --def

使用mysqldump导入数据和mysqldump增量备份(mysqldump使用方法)_Mysql

 1.各种用法说明 A. 最简单的用法: 复制代码 代码如下: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文件(转储文件)中,比如: 复制代码 代码如下: mysqldump -uroot -p123 test > test.dump 生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句. B. --opt 如果加上--opt参数则生成的dump文

使用mysqldump导出数据库

    mysqldump是mysql用于转存储数据库的客户端程序.它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所需要的SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等.可以用来实现轻量级的快速迁移或恢复数据库.是mysql数据库实现逻辑备份的一种方式.本文描述了mysqldump的一些重要参数以及给出了相关示例供大家参考.   1.获取mysqldump的帮助信息  [root@SZDB ~]# mysqldump --he

mysqldump数据库备份参数详解_Mysql

mysqldump备份: 复制代码 代码如下: mysqldump -u用户名 -p密码 -h主机 数据库 a -w "sql条件" –lock-all-tables > 路径 mysqldump还原: 复制代码 代码如下: mysqldump -u用户名 -p密码 -h主机 数据库 < 路径 mysqldump按条件导出: 复制代码 代码如下: mysqldump -u用户名 -p密码 -h主机 数据库 a –where "条件语句" –no-建表&g

mysql,mysqldump,导出,压缩导出mysqlhotcopy 还原表

mysql,mysqldump,导出,导出表,压缩导出mysql,mysqlhotcopy,mysql还原表 本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL 版本为 5.0.22. 目前 MySQL 支持的免费备份工具有:mysqldump.mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog)

用mysqldump制作MySQL的文本备份

在使用mysqldump备份MySQL时,备份文件是SQL格式的文本文件,它由一系列create table和insert语句组成.恢复 时,只要把该SQL文件作为mysql程序的输入即可,如下所示: mysqldump mydb mytbl > mytbl.sql mysql mydb < mytbl.sql 注意:千万不要试图用mysqlimport加载由mysqldump生成的备份文件!mysqlimport只能读取数据行,不能用来读取 SQL语句. 当你在命令行下敲mysqldump,