當前位置:首頁 » 文件管理 » 直接替換ibd文件可以嘛
擴展閱讀
酸奶凍冰塊可以吃嗎 2025-05-12 11:48:12

直接替換ibd文件可以嘛

發布時間: 2023-02-01 00:04:37

㈠ 求助!請問mysql如何快速導入超大的sql文件

向大家匯報進展:自己直接拷貝ibd文件覆蓋的方法不行,但是採用xtrabackup備份ibd來還原是可以的,這個軟體太牛了!我昨天是在同一台機器測試的,晚上測下不同機器的,但是操作系統相同。還有個問題,這個xtrabackup可以直接遷移資料庫,如果還能合並導入新的庫,而不覆蓋原有的庫就更完美了,當然,現在已經解決了很大的問題!感謝各位高手!分不多,謝謝大家!

㈡ mysql ibd文件 怎麼刪除

直接粉碎或者重啟進入安全模式刪。要不可以殺掉mysql進程試試。

cmd --taskmgr

㈢ mysql怎麼通過frm和ibd文件還原數據

1、找回表結構,如果表結構沒有丟失直接到下一步

a、先創建一個資料庫,這個資料庫必須是沒有表和任何操作的。

b、創建一個表結構,和要恢復的表名是一樣的。表裡的欄位無所謂。一定要是innodb引擎的。CREATE TABLE `weibo_qq0`( `weiboid` bigint(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

c、關閉mysql, service mysqld stop;

d、用需要恢復的frm文件覆蓋剛新建的frm文件;

e、修改my.ini 里 innodb_force_recovery=1 , 如果不成修改為 2,3,4,5,6。

f、 啟動mysql,service mysqld start;show create table weibo_qq0 就能li到表結構信息了。

2、找回數據。記得上面把 innodb_force_recovery改掉了,需要注釋掉,不然恢復模式不好操作。 這里有個關鍵的問題,就是innodb里的任何數據操作都是一個日誌的記錄點。也就是如果我們需要數據恢復,必須把之前的表的數據的日誌記錄點添加到一致。

a、建立一個資料庫,根據上面導出的創建表的sql執行創建表。

b、找到記錄點。先要把當前資料庫的表空間廢棄掉,使當前ibd的數據文件和frm分離。 ALTER TABLE weibo_qq0 DISCARD TABLESPACE;

c、把之前要恢復的 .ibd文件復制到新的表結構文件夾下。 使當前的ibd 和frm發生關系。ALTER TABLE weibo_qq0 IMPORT TABLESPACE; 結果不出意外肯定會報錯。就和我們開展數據開始說的那樣,數據記錄點不一致。我們看看之前ibd記錄的點在什麼位置。開始執行 import tablespace,報錯 ERROR 1030 (HY000): Got error -1 from storage engine。找到mysql的錯誤日誌,InnoDB: Error: tablespace id in file 『.testweibo_qq0.ibd』 is 112, but in the InnoDB InnoDB: data dictionary it is 1. 因為 weibo_qq0 之前的記錄點在112,當前的表只創建一次,所以記錄點是1.

d、那怎麼從1記錄到112。for ($1=1; $i<=111; $1++) {CREATE TABLE t# (id int) ENGINE=InnoDB;} 也許很奇怪,為什麼是循環111,不是112。因為在a執行創建表結構的時候已經記錄增加了一次。

e、修改表結構 alter table weibo_qq0 discard tablespace;使當前的表結構和ibd脫離關系。復制.ibd到當前的目錄結構。

f、使原來數據的ibd和當前frm建立關系。 ALTER TABLE proct IMPORT TABLESPACE; 這個時候沒有錯誤,說明已經建立好了。但是查詢數據還是查不出來。

g、相比這里大家已經知道為什麼了,這個模式也不是說改了資料庫就可以在生產環境使用。更改 innodb_force_recovery=1 , 如果不成修改為 2,3,4,5,6。直到可以 查詢出數據為止,然後mp出來。數據就備份出來了。

h、把所有數據導出後,在新的資料庫導入。所有數據就生成了。

擴展問題,很多時候我們是分表表結構怎麼批量操作,提高速度呢。用循環!循環把表的空間廢棄掉。

for i in `seq 0 111`; do mysql -uroot -P33061 -h127.0.0.1 -Dtestdd -e 「CREATE TABLE inv_crawl_weibo_qq$i (id bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)) ENGINE=innodb 「; done

ALTER TABLE inv_crawl_weibo_qq0 DISCARD TABLESPACE;

備份數據把ibd復制cp到dd資料庫下,注意復制過來的文件許可權。

循環導入表空間。

ALTER TABLE inv_crawl_weibo_qq0 IMPORT TABLESPACE;

沒有報錯就導入成功了

㈣ .ibd文件可以通過編輯器修改嗎

在 InnoDB 中,用戶定義的表及其對應的索引數據存儲在擴展名為 .ibd 的文件中。表空間有兩種類型,常規(或共享)表空間和每表獨立表空間。對於共享表空間,來自許多不同表及其對應索引的數據可以駐留在單個 .ibd 文件中。而對於每表獨立表空間,單個表的數據及其索引位於一個 .ibd 文件中。
. IBD 文件這些文件通常位於數據目錄中。讓我們嘗試創建一個表 test.t1。

  • mysql>CREATE TABLE test.t1 (c INT) engine=InnoDB;

  • $ cd <PATH_TO_DATA_DIR>/test

  • $ ls

  • t1.ibd

  • 上面是獨立表空間文件,即與表 t1 相關的表和索引數據將駐留在此文件中。

㈤ mysql怎麼通過frm和ibd文件還原數據

有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現的結果說Status是OK,則不用修復,如果有Error,可以用:
repair table tabTest;
進行修復,修復之後可以在用check table命令來進行檢查。在新版本的phpMyAdmin裡面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為預設的數據表類型,這里以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:
myisamchk tablename.MYI
進行檢測,如果需要修復的話,可以使用:
myisamchk -of tablename.MYI
關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local裡面啟動MySQL伺服器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL資料庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的rc.local裡面,必須確認在執行這條指令時MySQL伺服器必須沒有啟動!檢測修復所有資料庫(表)

㈥ 只有ibd文件還能恢復數據嗎

  • 創建已經丟失的表結構

  • 先要安裝 mysql-utilities。

    // RedHatyum -y install mysql-server mysql-utilities// Debianapt install mysql-utilities

    使用 mysqlfrm 從 .frm 文件裡面找回建表語句。

    // 分析一個 .frm 文件生成建表的語句mysqlfrm --diagnostic /var/lib/mysql/test/t1.frm// 分析一個目錄下的全部.frm文件生成建表語句root@username:~# mysqlfrm --diagnostic /var/lib/mysql/my_db/bk/ >createtb.sqlroot@username:~# grep "^CREATE TABLE" createtb.sql |wc -l124

    可以看到一共生成了 124 個建表語句。

    有很多時候也可以從其它庫裡面生成建表語句,如同一個應用的其它資料庫或不同的測試環境,採用下面的 mysqlmp 生成建表語句:

    mysqlmp --no-data --compact my_db>createtb.sql

    登錄 MySQL 生成表。

    mysql> create database my_db;mysql> use my_dbDatabase changedmysql> source createtb.sqlQuery OK, 0 rows affected (0.07 sec)......

  • 導入舊的數據文件

  • 將新建的沒有包括數據的 .ibd 文件拋棄

    root@username:/var/lib/mysql/my_db# ll *.ibd|wc12411167941root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" | grep -v Tables_in_my_db | while read a; do mysql -e "ALTER TABLE my_db.$a DISCARD TABLESPACE"; doneroot@username:/var/lib/mysql/my_db# ll *.ibd|wcls: cannot access '*.ibd': No such file or directory000

    可以看到所有的 .idb 文件都已經被拋棄了。然後把舊的有數據的 .ibd 文件拷貝到這個 my_db 目錄下面,別忘了把屬主改過來:chown mysql. *,再把這些數據文件 import 到資料庫中。

    root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" | grep -v Tables_in_my_db | while read a; do mysql -e "ALTER TABLE my_db.$a import TABLESPACE"; done

  • 導入完成後檢查表

  • 使用 mysqlcheck 對資料庫 my_db 下的所有表進行檢查:

    root@username:/var/lib/mysql/my_db# mysqlcheck -c my_dbmy_db.cdp_backup_point OK......

    所有的表都導入成功。

㈦ ibd文件壞了怎麼辦

ibd是MySQL數據文件、索引文件,無法直接讀齲 frm是表結構文件,可以直接打開。