是否有比转换MySql数据库的纯文本CREATE TABLE和INSERT语句更好(更快或更小)的内容?对于大量数据来说,这似乎非常低效。
我意识到可以复制底层数据库文件,但我认为它们只能在它们来自的相同版本的MySql中工作。
是否有一个我不了解的工具,或者这种缺乏的原因?
答案 0 :(得分:10)
不确定这是否是你所追求的,但我通常会将mysqldump
的输出直接传递给gzip
或bzip2
(等)。它倾向于比转储到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的副本可以解决这个问题