重裝Ubuntu系統後Mysql 數據恢復歷程

1.概況

爲服務器重裝了Ubuntu 16.04-server, 之前的一些數據丟失了, 好在硬盤並未格式化, 至少還有點希望能恢復Mysql的數據

2.現有條件

  • 把舊的硬盤掛載到電腦上, 找到數據庫目錄下的文件: 默認的數據庫目錄爲: /var/lib/mysql
    硬盤掛載目錄爲: /media/user/f101a309-d55a-4a50-8e1c-d63534146b6f
$ ll /media/user/f101a309-d55a-4a50-8e1c-d63534146b6f/var/lib/mysql
-rw-r-----  1   122 vboxusers       56 9月   6  2019 auto.cnf
-rw-------  1   122 vboxusers     1680 11月 19 06:09 ca-key.pem
-rw-r--r--  1   122 vboxusers     1112 11月 19 06:09 ca.pem
-rw-r--r--  1   122 vboxusers     1112 11月 19 06:09 client-cert.pem
-rw-------  1   122 vboxusers     1676 11月 19 06:09 client-key.pem
-rw-r--r--  1   122 vboxusers        0 2月  25 09:40 debian-5.7.flag
drwxr-x---  2   122 vboxusers     4096 9月  17  2019 FactoryTest/
-rw-r-----  1   122 vboxusers      750 4月   1 09:07 ib_buffer_pool
-rw-r-----  1   122 vboxusers 79691776 4月   1 09:07 ibdata1
-rw-r-----  1   122 vboxusers 50331648 4月   1 09:07 ib_logfile0
-rw-r-----  1   122 vboxusers 50331648 9月   6  2019 ib_logfile1
drwxr-x---  2   122 vboxusers     4096 10月 22 15:27 kanboard/
drwxr-x---  2   122 vboxusers     4096 2月  25 09:41 mysql/
-rw-r--r--  1   122 vboxusers        6 2月  25 09:41 mysql_upgrade_info
drwxr-x---  2   122 vboxusers     4096 2月  25 09:40 performance_schema/
-rw-------  1   122 vboxusers     1676 11月 19 06:09 private_key.pem
-rw-r--r--  1   122 vboxusers      452 11月 19 06:09 public_key.pem
-rw-r--r--  1   122 vboxusers     1112 11月 19 06:09 server-cert.pem
-rw-------  1   122 vboxusers     1680 11月 19 06:09 server-key.pem
drwxr-x---  2   122 vboxusers    12288 11月 19 06:09 sys/
drwxr-x---  2   122 vboxusers    12288 10月 22 10:18 zentao/

需要恢復的數據庫 FactoryTest, 所以, 不管如何先將它壓縮保存下來, 丟到服務器去試試先.

3.粗暴的嘗試

  • 停止mysql /etc/init.d/mysql stop
  • 直接把上面找到的文件丟到服務器對應的mysql目錄下, 並修改相應的文件權限
  • 啓動mysql /etc/init.d/mysql start
  • 嘗試訪問讀取數據失敗…果然沒那麼簡單.

停止數據庫, 刪除前面的暴力嘗試拷貝進去的文件夾


4.Google 後, 見參考.1

4.1恢復表格

  • 需要用到工具mysqlfrm
  • 找不到, 就裝一個sudo apt install mysql-utilities
  • 命令執行的效果 mysqlfrm --diagnostic FactoryTest/Wifi.frm
# WARNING: Cannot generate character set or collation names without the --server option.
# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
# Reading .frm file for FactoryTest/Wifi.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:

CREATE TABLE `FactoryTest`.`Wifi` (
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `ssid` varchar(32) NOT NULL, 
  `pwd` varchar(32) NOT NULL, 
PRIMARY KEY `PRIMARY` (`id`)
) ENGINE=InnoDB;

#...done.
  • 表格的query語句出來了, 接下來就簡單了, 拷貝粘貼, 執行完, 表格都有了.

4.2恢復數據

  • 進mysql執行下面的命令(所有的表格):
ALTER TABLE example_table DISCARD TABLESPACE;
  • 執行完後, 數據庫目錄下的 .idb 文件都不見了
  • 執行上面的暴力拷貝, 只拷貝 .idb 文件: sudo cp -rn . /var/lib/mysql/FactoryTest/
  • 記得修改文件權限: sudo chown mysql:mysql -R /var/lib/mysql/FactoryTest
  • 再進mysql爲每個表格執行語句
ALTER TABLE example_table IMPORT TABLESPACE;

完成

5.參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章