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