MySQL innodb表使用表空間物理檔案複製表

jeikerxiao發表於2018-10-15

1.在目標庫建立相同的表名

建立相同結構的同名表。

2. 查詢MySQL資料檔案存放地

ps -ef|grep mysqld

輸出結果:

mysql    21508  6679  0 Sep21 ?        02:03:51 ./bin/mysqld 
--basedir=/opt/software/mysql 
--datadir=/opt/data/mysql 
--plugin-dir=/opt/software/mysql/lib/plugin 
--user=mysql 
--log-error=/opt/data/mysql/mysqld.log 
--pid-file=/opt/data/mysql/mysqld.pid 
--port=3306 

可以看到資料檔案儲存在datadir代表的地址。

cd /opt/data/mysql 

進入對應目標資料庫

示例資料庫為:mydb

➜  mydb ll                                                                                      
total 1.9M
-rw-rw---- 1 mysql mysql   67 Jun 25 13:57 db.opt
-rw-rw---- 1 mysql mysql 9.1K Oct 15 16:17 snc_user.frm
-rw-rw---- 1 mysql mysql 12K Oct 15 16:20 snc_user.ibd

3. 刪除目標表的表空間

alter table snc_user discard tablespace;

可以檢視到目標資料庫下檔案沒有了.ibd檔案.

➜  mydb ll                                                                                      
total 1.9M
-rw-rw---- 1 mysql mysql   67 Jun 25 13:57 db.opt
-rw-rw---- 1 mysql mysql 9.1K Oct 15 16:17 snc_user.frm

4. 拷貝源庫的idb檔案

拷貝資料檔案到目標資料庫下

➜  mydb ll                                                                                      
total 1.9M
-rw-rw---- 1 mysql mysql   67 Jun 25 13:57 db.opt
-rw-rw---- 1 mysql mysql 9.1K Oct 15 16:17 snc_user.frm
-rw-rw---- 1 root root 512K Oct 15 16:20 snc_user.ibd

5. 修改表空間檔案許可權

修改拷貝過來的資料檔案的許可權:

chown -R mysql:mysql

6. 目標表匯入表空間資料

執行匯入命令:

alter table snc_user import tablespace;

相關文章