以保证数据库一致性的方式生成包含各个表转储的一组文件

时间:2010-05-04 03:08:11

标签: sql mysql locking mysqldump

我想以这样的方式转储MySQL数据库,即为每个表的定义创建一个文件,并为每个表中的数据创建另一个文件。我希望通过在转储期间锁定整个数据库来保证数据库完整性的方式完成此操作。做这个的最好方式是什么?同样,在恢复一组这些转储文件时,锁定数据库的最佳方法是什么?

修改

我不能假设mysql有权写入文件。

1 个答案:

答案 0 :(得分:1)

如果您正在使用InnoDB表并因此具有事务支持,则根本不需要锁定数据库,只需添加--single-transaction命令行选项即可。这为您提供了一致的快照,而无需使用事务机制锁定任何内容。

如果您没有事务支持,可以使用--lock-tables命令行选项获取您所描述的内容,这将锁定数据库。

值得注意的是,READ LOCKs听起来并不像听起来那么好,因为任何写入操作都会锁定,这将锁定后续的读取操作,请参阅this article了解更多详情

修改 如果没有文件写入权限和--tab选项,我认为不可能单独转储格式和数据。我认为您唯一的选择是使用mysqldump使用的事务或READ LOCK机制之一来创建自己的mysqldump脚本。如果不能将单个转储文件后处理成您想要的格式可能会更容易。