Ubuntu Server 运行 MySql 服务器。
我们的服务器上有 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 表。
使用 MyISAM - 没问题(元数据除外),关于 InnoDB:https ://dba.stackexchange.com/questions/15531/why-does-innodb-store-all-databases-in-one-file
我认为您的问题出在-在 A 和 B 上创建
innodb_file_per_table
表之前是否启用了此选项。如果
innodb_file_per_table
稍后启用 - 您将拥有混合表空间:一些数据将保存在 中.ibd
,一些数据将保存在 中ibdata1
,元数据始终保留在ibdata1
.另外,请记住,不仅数据库文件提供有关表和权限等(元数据)的信息 -
mysql
数据库信息表和ibdata1
执行。因此,仅当没有更改或您不关心该元数据时,复制才有用。简短的回答 - 不(你也需要
ibdata1
)。这并不容易,但在某些情况下它可能仍然有效。如果这不是您正在寻找的答案 - 无论如何,此信息可能对您非常有用。
恢复:你也需要
ibdata1
,但它也会影响其他带有 innodb 的数据库。