mysql根据idb还原数据_mysql通过idb文件,恢复数据库
原因: 由于一次未知原因,服務(wù)器停機后,導(dǎo)致數(shù)據(jù)庫不能啟動,由于剛接手項目,對此數(shù)據(jù)庫的配置不是那么清晰,分析了很多,最后還是沒發(fā)正常啟動。由于發(fā)現(xiàn)數(shù)據(jù)idb文件還在,最后就采取了險招,重新安裝mysql,通過mysql的idb文件來恢復(fù)數(shù)據(jù)。
解決:
第一步: 完全卸載mysql數(shù)據(jù)庫
ubantu 徹底卸載mysql
sudo apt-get autoremove --purge mysql-server
sudo apt-get remove mysql-common
sudo rm -rf /etc/mysql/ /var/lib/mysql
#清理殘留數(shù)據(jù)
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
sudo apt autoremove
sudo apt autoclean
第二步: 重新安裝mysql數(shù)據(jù)庫
Ubantu下安裝mysql8可自行百度;參考鏈接:https://www.linuxidc.com/Linux/2018-11/155408.htm
安裝后可能出現(xiàn):
mysql 數(shù)據(jù)庫不允許遠程連接: ‘Host’ is not allowed to connect to this mysql server
方法一:修改 host 表
進入mysql數(shù)據(jù)庫,選擇mysql
mysql> use mysql;
選擇 host 表
mysql> select host from user;
更新 host, 然后退出。
mysql> update user set host = '%' where user='root';
重啟數(shù)據(jù)庫, 完成。
service mysqld restart
如果報錯:Access denied for user ‘XXX’@’XXX’ (using password: YES) 請參考我的另一篇博文:
https://blog.csdn.net/qq_23035335/article/details/100522054
第三步:恢復(fù)數(shù)據(jù)
通過idb文件 恢復(fù)mysql數(shù)據(jù)
首先需要一個跟要恢復(fù)的表結(jié)構(gòu)完全一致的表。
(在建表語句末尾加上 ROW_FORMAT=compact 或 ROW_FORMAT=DYNAMIC(mysql8默認);(InnoDB的行記錄格式有 Compact, Redundant, Compressed, Dynamic,具體要看自己的mysql用的是哪種)備份的表結(jié)構(gòu)可以從備份庫,測試庫搞定表結(jié)構(gòu),可以刪掉外鍵約束,后面執(zhí)行會方便很多。)
然后執(zhí)行ALTER TABLE 表名 DISCARD TABLESPACE。(ALTER TABLE table_name DISCARD TABLESPACE)
(這里一定不能手動刪除ibd文件,如果刪除了會導(dǎo)致mysql停止后無法重啟)
把要恢復(fù)的ibd文件復(fù)制到mysql的data文件夾下。
(默認路徑是/var/lib/mysql/數(shù)據(jù)庫名,在執(zhí)行恢復(fù)之前,就應(yīng)該已經(jīng)知道了數(shù)據(jù)存儲目錄,同時也把所有的idb文件已備份,用于恢復(fù)。copy到目標位置后得檢查下權(quán)限,是不是mysql:mysql,不然執(zhí)行下面的導(dǎo)入語句時會報錯:找不到對應(yīng)的idb,實際可能是對應(yīng)的idb文件權(quán)限不足)
然后執(zhí)行ALTER TABLE 表名 IMPORT TABLESPACE。(ALTER TABLE table_name IMPORT TABLESPACE)
完成,數(shù)據(jù)恢復(fù)成功,表很多的話可以采取一些批量處理措施,不然工作量會有點大。
附:導(dǎo)出數(shù)據(jù)庫到文件
/usr/bin/mysqldump -u root -密碼 --default-character-set=utf8 數(shù)據(jù)庫名> ./database_db.sql
總結(jié)
以上是生活随笔為你收集整理的mysql根据idb还原数据_mysql通过idb文件,恢复数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot超详细教程_超详细便
- 下一篇: mysql 索引 lt =_MySQL