是否有MySql二进制转储格式?或者比纯文本INSERT语句更好的东西?

时间:2010-09-23 22:12:14

标签: mysql dump

是否有比转换MySql数据库的纯文本CREATE TABLE和INSERT语句更好(更快或更小)的内容?对于大量数据来说,这似乎非常低效。

我意识到可以复制底层数据库文件,但我认为它们只能在它们来自的相同版本的MySql中工作。

是否有一个我不了解的工具,或者这种缺乏的原因?

4 个答案:

答案 0 :(得分:10)

不确定这是否是你所追求的,但我通常会将mysqldump的输出直接传递给gzipbzip2(等)。它倾向于比转储到stdout或类似的东西快得多,并且由于压缩,输出文件要小得多。

mysqldump --all-databases (other options) | gzip > mysql_dump-2010-09-23.sql.gz

如果你正在寻找“可移植性”而牺牲了比gzip压缩SQL更多的磁盘空间,那么也可以使用--xml选项转储到XML ...

答案 1 :(得分:5)

抱歉,MySQL没有二进制转储。但是,MySQL的二进制日志专门用于备份和数据库复制目的http://dev.mysql.com/doc/refman/5.5/en/binary-log.html。它们并不难配置。仅记录更新和删除等更改,因此每个日志文件(由MySQL自动创建)也是数据库中更改的增量备份。这样,您可以不时地保存数据库的整个快照(一个月一次?),然后只存储日志文件,并在发生崩溃时恢复最新的快照并运行日志。

答案 2 :(得分:1)

值得注意的是MySQL有一个特殊的语法来进行批量插入。来自the manual

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

在一次操作中插入3行。因此,加载这种方式并不像每行一个语句那样低效,而不是3个INSERT语句中的129个字节,这是59个字节,而这个优势只会越大,你拥有的行就越多。

答案 3 :(得分:0)

我从来没有尝试过这个,但是mysql表只是硬盘上的二进制文件吗?你不能自己复制表格文件吗?据推测,这基本上就是你所要求的。

我不知道如何将它们拼接在一起,但在我看来,/ var / lib / mysql的副本可以解决这个问题