innodb表 手工導入導出
具體操作如下:
1.將備份表加鎖,導出cfg。
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 3 |
| 4 |
+------+
7 rows in set (0.00 sec)mysql> flush table t1 with read lock;
Query OK, 0 rows affected (0.01 sec)
發現t1生成了cfg文件。
[root@222 test]# ls
db.opt t1.cfg t1.frm t1.ibd t2.frm t2.ibd
執行unlock tables ,cfg文件回收。
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)[root@222 test]# ls ../test/
db.opt t1.frm t1.ibd t2.frm t2.ibd
2.在unlock tables前,將t1的cfg和ibd文件備份。
[root@222 test]# cp t1.ibd t1.cfg /home/backup/
3.創建一個新庫,並創建相同結構的t1表。
mysql> create database test1;
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> use test1;
Database changed
mysql>
mysql> create table t1 like test.t1;
Query OK, 0 rows affected (0.03 sec)
4.刪除新建的t1表空間。
mysql> alter table t1 discard tablespace;
Query OK, 0 rows affected (0.02 sec)
發現新建的t1表空間的ibd文件被清除。
[root@222 test]# ls ../test1/
db.opt t1.frm
5.將備份的t1表的cfg和ibd文件拷貝到新建的庫下。
[root@222 test]# cd /home/backup/
[root@222 test1]# ll -trh
總用量 116K
-rw-rw----. 1 mysql mysql 61 12月 16 09:49 db.opt
-rw-rw----. 1 mysql mysql 8.4K 12月 16 09:49 t1.frm
-rw-r-----. 1 root root 96K 12月 16 09:51 t1.ibd
-rw-r-----. 1 root root 354 12月 16 09:51 t1.cfg
[root@222 test1]# chown -R mysql.mysql *
[root@222 test1]#
[root@222 test1]#
[root@222 test1]# ll -trh
總用量 116K
-rw-rw----. 1 mysql mysql 61 12月 16 09:49 db.opt
-rw-rw----. 1 mysql mysql 8.4K 12月 16 09:49 t1.frm
-rw-r-----. 1 mysql mysql 96K 12月 16 09:51 t1.ibd
-rw-r-----. 1 mysql mysql 354 12月 16 09:51 t1.cfg6.執行新建t1表導入表空間操作。
mysql> alter table t1 import tablespace;
Query OK, 0 rows affected (0.08 sec)
7.查詢結果和第1步備份的表一致,操作完成
mysql> select * from test1.t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 3 |
| 4 |
+------+
7 rows in set (0.00 sec)btw.
a.由於新表存在cfg文件,在刪除庫操作的時候會報錯,
ERROR 1010 (HY000): Error dropping database (can‘t rmdir ‘./test1/‘, errno: 17)
如果使用innobackupex備份,並導入的exp文件,則會發現刪除庫後,exp文件無法刪除,那麽手工將exp文件刪除,在刪除庫即可。
如果使用如上方法手工命令方式導入cfg文件,在刪除庫時報錯,但是查看庫文件時發現無文件,則在執行一遍即可;對於新導入的cfg文件,可以在次執行如下命令,則cfg文件消失。
mysql> flush table t1 for export;
Query OK, 0 rows affected (0.00 sec)[root@222 test1]# ll -trh
總用量 116K
-rw-rw----. 1 mysql mysql 61 12月 16 09:49 db.opt
-rw-rw----. 1 mysql mysql 8.4K 12月 16 09:56 t1.frm
-rw-r-----. 1 mysql mysql 96K 12月 16 09:56 t1.ibd
-rw-r-----. 1 mysql mysql 355 12月 16 09:57 t1.cfgmysql>
mysql>
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)[root@222 test1]# ll -trh
總用量 112K
-rw-rw----. 1 mysql mysql 61 12月 16 09:49 db.opt
-rw-rw----. 1 mysql mysql 8.4K 12月 16 09:56 t1.frm
-rw-r-----. 1 mysql mysql 96K 12月 16 09:56 t1.ibd
b.發現手工命令行方式備份恢復更加便捷,但是會有一個鎖表的過程,那麽則根據不同情況選擇不同方式進行備份,對於線上有寫入的表采用innobackupex方式,不會導致復制延遲;對於無寫入的表,直接采用加鎖導入cfg文件方式,操作更加便捷。
OK,done。
innodb表 手工導入導出