該方法並不是適用於所有MySQL數據庫
此次恢復是朋友那邊的數據查不了了,請求我支援,出於各種心理原因,我答應試試,於是就有了這篇文章和這次經歷,廢話不多說....
物理條件:宿機是Ubuntu16.4版本
我的vmware:15.5
我的虛機系統:CentOS7.4.1708
我的虛機上MySQL版本:mysql Ver 14.14 Distrib 5.5.59, for Linux (x86_64) using readline 5.1
朋友的MySQL版本:mysqld Ver 5.5.30-MariaDB for Win64 on x86
朋友提供的文件,以這一個來說明恢復過程,如要恢復這4個文件一個都不能少

數據庫安裝
wget https://dev.mysql.com/get/Downloads/MySQL-5.5/MySQL-client-5.5.59-1.el7.x86_64.rpm
wget https://dev.mysql.com/get/Downloads/MySQL-5.5/MySQL-server-5.5.59-1.el7.x86_64.rpm
yum -y install MySQL-server-5.5.59-1.el7.x86_64.rpm
yum -y install MySQL-client-5.5.59-1.el7.x86_64.rpm
systemctl start mysql
systemctl enable mysql
mysql -uroot -p #首次登錄密碼為空
修改MySQL登錄密碼
set password=password('123456');
授權
grant all privileges on *.* to 'root'@'localhost' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by '123456';
============================== 擴展(查看創建表時的SQL語句)=================================================
安裝mysqlfrm(查看frm文件的作用)
#下載地址 https://downloads.mysql.com/archives/utilities/
#Product Version:1.6.5
#Operating System:Linux - Generic
wget https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz
tar -zxvf mysql-utilities-1.6.5.tar.gz
cd mysql-utilities-1.6.5
python ./setup.py build
python ./setup.py install
使用mysqlfrm查看要恢復的frm文件
命令格式:mysqlfrm --basedir=數據庫安裝目錄 --port=數據庫端口 --user=數據庫用戶 --diagnostic ./frm文件的具體路徑 >轉換成.sql,該名字可自定義
mysqlfrm --basedir=/usr --port=3306 --user=root --diagnostic ./event20191004_0.frm >10.sql
查看10.sql文件
CREATE TABLE `event20191004_0` (
`lid` bigint(20) DEFAULT NULL,
`imergecount` int(11) DEFAULT NULL,
`ceventname` varchar(765) NOT NULL,
......
.....
`ceventmsg` varchar(24576) NOT NULL,
KEY `lidINDEX` (`lid`),
KEY `ltimeINDEX` (`lrecepttime`),
KEY `cdevipINDEX` (`cdevip`)
) ENGINE=MyISAM AVG_ROW_LENGTH = 1000;
修復數據表:
use database_name;
repair table tab_name;
===============================================================================
數據恢復
第一步:將要恢復的frm、MYD、MYI、db.opt放到我的虛機中。
第二步:登錄進數據庫中隨意創建一個庫,這里我創建的是opop庫。
第三步:將frm、MYD、MYI、db.opt放到opop的目錄中,替換opop目錄中的所有,如下圖所示
第四步:修改這4個文件的屬主和數組為mysql,,如下圖所示(如不修改權限在select數據表時會提示Table '表名' is read only)

第五步:登錄數據庫,並進入到opop庫中查看所有表,因為原本只有一張表,所以下圖只顯示了一張

因為表很大,在我打開時我的機器整體卡了幾分鍾,所以我就取消了,如下圖


查看下表結構

將識別到的event20191004_0表通過mysqldump以.sql文件導出來(此次是以1.sql命名),然后把.sql文件拿到其他服務器上進行source加載下即可

恢復:
任意創建一個數據庫,比如創建了一個aa庫,use到aa庫中然后執行 sourcr /xx/xx/1.sql 按回車即可
歡迎加入QQ群一起討論Linux、開源等技術

