Innodb

如何從文件中恢復帶有 innodb 表的數據庫?

  • November 4, 2019

我正在嘗試從文件中恢復包含 innodb 表的 MariaDB 數據庫。雖然我是藍眼睛,但我認為這是一項簡單的任務:我剛剛停止了伺服器,複製了文件並重新啟動它,如下所示:

# Stop MariaDB server
systemctl stop mariadb.service
# Copied database 
sudo rsync --numeric-ids -aHAEXv --rsh="ssh" user@mybackupserver:/xyz/mysql/owncloud /var/lib/
# Start MariaDB server
systemctl start mariadb.service

不幸的是,這並沒有按預期工作。儘管數據庫及其所有表都在那裡,但我無法訪問任何表。試圖這樣做我得到:

1932 - 引擎中不存在表“owncloud.oc_activity_mq”。

在重複上述所有步驟之前,我嘗試創建一個同名的空數據庫,但我得到了同樣的錯誤。

奇怪的是,在 PHPMyAdmin 中所有的表都有Collation in use.

我檢查了目錄的權限和所有權十幾次,我的 MariaDB 數據目錄中的所有內容都歸使用者所有,每個文件都具有每個目錄mysql的權限……0660``0700

我的問題是,是否可以將帶有 innodb 表的單個數據庫直接從舊數據目錄恢復到新目錄?如果是,如何?

我知道這個問題之前出現過,例如這裡:如何從文件中恢復 MySQL 數據庫

但是我在這裡專門詢問帶有innodb引擎的數據庫,根據我閱讀的內容,我得到的印像是我遇到的問題可能與引擎有關

使用 innodb 文件,您需要將整個數據庫伺服器恢復到新實例。使用 mysqldump oc_activity_mq 從該備份中提取表的 SQL 版本。然後將其導入您的活動實例。

這假設您已經進行了一致的備份。如果 mysql 正在執行並同時被更新它被複製它可能有某種形式的損壞。

使用 innodbbackup、lvm 和/或 mysqldump/pump 修改您的備份策略。

引用自:https://dba.stackexchange.com/questions/252462