Ubuntu

通過命令行用更新的副本替換 MySql 數據庫

  • September 22, 2013

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 的數據庫。

引用自:https://serverfault.com/questions/540764