12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-12-25 09:55:53
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
上一篇文章介绍了“innobackupex 热备指定库表操作”,分析其整个过程,就是将表的字典和数据文件导出在导入的原理,那么针对单表的备份与恢复(新实例或者新库中恢复),我们可以直接
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
上一篇文章介绍了“innobackupex 热备指定库表操作”,分析其整个过程,就是将表的字典和数据文件导出在导入的原理,那么针对单表的备份与恢复(新实例或者新库中恢复),我们可以直接采用物理导出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.optt1.cfgt1.frmt1.ibdt2.frmt2.ibd
执行unlock tables ,cfg文件回收。
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)[root@222 test]# ls ../test/
db.optt1.frmt1.ibdt2.frmt2.ibd
2.在unlock tables前,将t1的cfg和ibd文件备份。
[root@222 test]# cp t1.ibd t1.cfg /home/backup/
3.创建一个新库,并创建相同结构的t1表。
mysql> createdatabase 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.optt1.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 rootroot 96K 12月 16 09:51 t1.ibd
-rw-r-----. 1 rootroot 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 mysql96K 12月 16 09:51 t1.ibd
-rw-r-----. 1 mysql mysql354 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 mysql96K 12月 16 09:56 t1.ibd
-rw-r-----. 1 mysql mysql355 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 mysql96K 12月 16 09:56 t1.ibd
b.发现手工命令行方式备份恢复更加便捷,但是会有一个锁表的过程,那么则根据不同情况选择不同方式进行备份,对于线上有写入的表采用innobackupex方式,不会导致复制延迟;对于无写入的表,直接采用加锁导入cfg文件方式,操作更加便捷。
OK,done。
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19