物理复制mysql表

   2022-09-09 17:47:17

mysql

假设现在的目标是在db1库下,复制一个跟表t相同的表r,具体的执行步骤如下: 1. 执行 create table r like t,创建一个相同表结构的空表; 2. 执行alter table r discard tablespace,这时候r.ibd文件会被删除; 3. 执行flush table t for export,这时候db1目录下会生成一个t.cfg文件; 4. 在db1目录下执行cp t.cfg r.cfg; cp t.ibd r.ibd;这两个命令(这里需要注意的是,拷贝得到的 两个文件,MySQL进程要有读写权限); 5. 执行unlock tables,这时候t.cfg文件会被删除; 6. 执行alter table r import tablespace,将这个r.ibd文件作为表r的新的表空间, 由于这个文件的数据内容和t.ibd是相同的,所以表r中就有了和表t相同的数据。

有以下几个注意点: 1. 在第3步执行完flsuh table命令之后,db1.t整个表处于只读状态,直到执行unlock tables命令后才释放读锁; 2. 在执行import tablespace的时候,为了让文件里的表空间id和数据字典中的一致,会修改r.ibd的表空间id。而这个表空间id存在于每一个数据页中。因此,如果是一个很大的文件 (比如TB级别),每个数据页都需要修改,所以你会看到这个import语句的执行是需要一些 时间的。当然,如果是相比于逻辑导入的方法,import语句的耗时是非常短的。

相关评论:

靡不有初|  当前时间:  |  网站运行时间:  |鲜克有终

今年剩余【农历】:

粤ICP备19080315号