• ADADADADAD

    innodb表 手工导入导出[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:55:53

    作者:文/会员上传

    简介:

    上一篇文章介绍了“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.cfg

    6.执行新建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.cfg

    mysql>
    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。

    innodb表 手工导入导出.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: 表空间forexport