通过命令行将 MySql 数据库替换为较新的副本

通过命令行将 MySql 数据库替换为较新的副本

运行 MySql 服务器的 Ubuntu 服务器。

我们的服务器上有 5 个数据库。在最近的一次崩溃中,服务器被错误地恢复,现在 1 个数据库 (B) 有 2 个不正确的表,而第二个数据库 (A) 完全不正确。

如何正确替换数据库文件?

是否很简单

cp -a /path/to/backup/databaseA/ /var/lib/mysql/databaseA
cp -a /path/to/backup/databaseB/table1.MYD /var/lib/mysql/databaseB
cp -a /path/to/backup/databaseB/table1.MYI /var/lib/mysql/databaseB
cp -a /path/to/backup/databaseB/table2.ibd /var/lib/mysql/databaseB

值得一提的是,存在混合的 MyISAM 和 InnoDB 表。

答案1

使用 MyISAM - 没有问题(元数据除外),关于 InnoDB:https://dba.stackexchange.com/questions/15531/why-does-innodb-store-all-databases-in-one-file

我认为你的问题是innodb_file_per_table- 在表格之前启用了这个选项吗创建A 和 B 上都有或没有。

如果innodb_file_per_table稍后启用 - 您将拥有混合表空间:一些数据将保存在 中.ibd,一些数据将保存在 中ibdata1,元数据始终保留在 中ibdata1

另外,请记住,不仅数据库文件提供有关表和权限等的信息(元数据),mysql数据库信息表也ibdata1提供这些信息。因此,只有在没有更改或您不关心元数据时,复制才有用。

简短的回答 - 不(你ibdata1也需要)。这不是那么容易,但在某些情况下它可能还是有效。

如果这不是您想要的答案——无论如何,这些信息可能对您非常有用。

恢复:您ibdata1也需要,但它也会影响其他带有 innodb 的数据库。

相关内容