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

标签 sql locking mysql

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

编辑

我不能假定 mysql 将具有写入文件的权限。

最佳答案

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

如果您没有交易支持,您可以获得您在 --lock-tables 中描述的内容命令行选项,这将锁定数据库。

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

编辑: 我认为在没有文件写入权限和 --tab 的情况下,不可能单独转储格式和数据。选项。我认为您唯一的选择是推出您自己的 mysqldump 脚本,该脚本使用 mysqldump 使用的一种事务或 READ LOCK 机制。否则,将单个转储文件后处理成您想要的格式可能会更容易。

关于sql - 以保证数据库一致性的方式生成一组包含单个表转储的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2762565/

相关文章:

linux - Mysqldump - 删除所有外部连接

php - 注册表中的信息未提交到 phpmyadmin 中的表中

linux - 许多进程的缓存锁定?

php - 如何在 codeigniter 查询中使用 FIND_IN_SET?

计算比率的 SQL 查询优化

SQL - 来自同一子查询的多个 where in 子句?

c# - 单线程且无递归的 C# 中的奇怪死锁

iPhone自动锁值?

java.sql.SQLException : [Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement

mysql - 如何选择小于当前日期的日期?