2015-11-20 52 views
1

我在Windows中使用MySQL 5.5。我有一個名爲「mydb」的數據庫,MySQL文件夾也包含一個名爲「mydb」的子文件夾。的「MYDB」數據庫中包含名爲「mytable的」表和文件夾「MYDB」包含以下文件:是否可以通過簡單地複製文件並重命名來複制MySQL表格?

mytable.frm 
mytable.MYD 
mytable.MYI 

現在,我想表複製到名爲「mychair」另一個表。

是否有可能將上述文件複製到另一個文件夾中,重命名它們,然後將它們複製回「mydb」文件夾以複製表格? 我試圖做到這一點,將這些文件的名稱改爲「mychair.frm」,「mychair.MYD」和「mychair.MYI」,但它不起作用。但是,在重新啓動MySQL服務器之後,我可以看到並將該表用於mysql控制檯,因此它似乎正在工作。

我知道,這不是推薦的做事方式。但我只想知道這是否有效,以及這樣做的風險是什麼。

+1

表面上我不得不說沒有。有系統表必須維護,當你像這樣複製文件;系統不知道表格。爲什麼不只是執行'create table myChair as(select * from mytable)'你必須在後面添加索引和約束,但它應該非常簡單。 – xQbert

回答

1

這不是像這樣使用數據庫文件來玩的好方法。

一個好方法是做到這一點通過數據庫查詢

insert into mytable 
select * from mychair 

此查詢將插入所有的mychair行到mytable表中提供兩個表的模式是所有相同。

+1

根據所使用的發動機,這可能會在插入過程中鎖定整個'mychair'表,並且您需要手動重新添加所有索引。 –

1

您可以通過一些預防措施爲MyISAM表執行此操作。如果服務器已關閉,或者您已完成FLUSH TABLEFLUSH TABLES並且可以確保沒有併發訪問(例如LOCK TABLES),則可以通過複製.frm.MYI.MYD文件在表上覆制文件系統級別。儘管可以使用特殊工具(例如xtrabackup)將它們單獨複製到SQL接口外部,但InnoDB表同樣適用於這些表。

1

我建議只是做一個表(和數據)的mysqldump,然後在轉儲文件中將表重命名爲任何你想要的,然後通過改變的轉儲文件創建表。

喜歡的東西:

$ -> mysqldump -u<username> -p --opt --single-transaction <database_name> mychair > mychair.sql 
# Edit mychair.sql to change mychair to mytable 
$ -> mysql -u<username> -p -D <database_name> < mychair.sql 
+0

你選擇了哪個選項? –

相關問題