mysql导入frm文件_MySQL备份文件.ibd、.frm、.MYD、.MYI的恢复教程
點擊上方“業余草”,選擇“置頂公眾號”
第一時間獲取技術干貨和業界資訊!
昨天,微信群里一位網友問到:“備份的 frm文件恢復,有的提示表不存在為什么”。關于這個問題,今天我們一起討論一下!
根據網友的截圖得知是他在恢復數據文件 .frm 時,報出的異常。error: 1146: Table ‘xxx’ doesn’t exist
error: 1146: Table ‘xxx’ doesn’t exist這個的原因其實很簡單,我先從頭給你說起。
MySQL 數據庫是具有持久化能力的。也就是說它的所有數據,其實最終都是存儲在文件中的。如果你用的是 MyIsAM,則一張表數據文件有 3 個。
如果是 InnoDB,則一張表有 2 個數據文件。
且這些文件,一般在你安裝 MySQL 目錄中的 Data 目錄中。
如果你忘記了安裝的位置,或者忘記了配置的 Data 目錄在哪里,則可以根據下面的語句,找出數據文件的存放目錄。
上面這個截圖,就是我的測試數據庫對應的數據文件的存放目錄。進入到我的 /usr/local/var/mysql/ 目錄后,可以看到我的 xttblog 和 test 數據庫目錄。
根據列表文件中的后綴名都可以判斷出,我使用的是 InnoDB 存儲引擎。下面我們就以 InnoDB 為例,來說說數據文件的恢復教程。
首先,我們可以在其他測試環境,創建一個 test 數據庫,并在里面創建 test_2019 數據表。里面插入一些測試數據,包含建立的索引等。然后,我們將 test_2019.ibd 和 test_2019.frm 兩個文件復制到本地的其他目錄。
要恢復 test_2019 這張表,我們先要用 SQL 創建出這種表。
主要是創建出一個同名的表,方便接下來的替換。字段內容無所謂。
表創建出來之后,我們就可以到 /usr/local/var/mysql/test/ 替換 test_2019.ibd 和 test_2019.frm 兩個文件了。
接著重啟 MySQL 服務即可了。
有些人可能少了,上面創建表這一步。直接復制表數據文件進行替換。結果就會導致上面的這個錯誤。雖然,你能通過 show tables 看到這張表,但是當你 select 這張表的時候,確報這張表不存在,error: 1146: Table ‘xxx’ doesn’t exist。
這也說明了針對 InnoDB 存儲引擎,這樣的直接 copy 復制的方式不能恢復數據表。但如果是 MyIsAM 存儲引擎的話,直接復制是可以的(當然數據庫版本必須要兼容)。這也是為什么一些文章說可以,一些文章說不可以。那是因為針對的存儲引擎不對!
但是,我也很納悶啊,數據文件都存在,為啥就提示表不存咋呢?
其實是可以通過 mysql-utilities 工具來恢復表結構!我是 Mac 電腦,安裝命令如下:
恢復表結構的 SQL 就很簡單了,看下面的命令:
注意,上面有兩個端口。–port=3309 這個指定的端口是你本地未被占用的端口。–user=root 表示以 root 用戶運行。tail -n +12 表示跳過文件開頭的前 12 行。因為前 12 行都是注釋。
最后,我要提示的一點是,注意數據庫的版本。如果版本不一致,也有可能導致恢復失敗!
總結
以上是生活随笔為你收集整理的mysql导入frm文件_MySQL备份文件.ibd、.frm、.MYD、.MYI的恢复教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab 数字识别_在MATLAB中
- 下一篇: matlab fprintf_Matla