运行 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 的数据库。