MySQL-独立表空间迁移

来自45讲

独立表空间迁移,可以在多实例上进行试验(把一张表从另外一个库拷贝过来直接使用,更适用于大表迁移)

mysql> create table test_emp like lagou.emp;  /*创建一个相同表结构的空表*/

mysql> alter table test_emp discard tablespace;  /*新表的.ibd文件会被删除*/

mysql> flush table lagou.emp for export; /*生成.cfg文件(注意:期间不能退出窗口,退出.cfg自动消失)*/
/*执行此步后lagou.emp整个表处于只读状态,直到执行 unlock tables 命令后才释放读锁*/

shell> scp /data/3306/data/lagou/emp.cfg /data/3306/data/haha/test_emp.cfg;cp /data/3306/data/lagou/emp.ibd /data/3306/data/haha/test_emp.ibd 

shell> scp /data/3306/data/lagou/emp.cfg 124.222.102.32:/data/3306/data/haha/test_emp.cfg;scp /data/3306/data/lagou/emp.ibd 124.222.102.32:/data/3306/data/haha/test_emp.ibd

mysql> chown mysql.mysql /data/3306/data/haha/test_emp.ibd;chown mysql.mysql /data/3306/data/haha/test_emp.cfg 
/*拷贝得到的两个文件,MySQL进程要有读写权限*/

mysql> unlock tables; /*这时候.cfg文件会被删除*/

mysql> alter table test_emp import tablespace;

物理拷贝的方式速度最快,尤其对于大表拷贝来说是最快的方法。
如果出现误删表的情况,用备份恢复出误删之前的临时库,然后再把临时库中的表拷贝到生产库上,是恢复数据最快的方法。
但是,这种方法的使用也有一定的局限性:
必须是全表拷贝,不能只拷贝部分数据;
需要到服务器上拷贝数据,在用户无法登录数据库主机的场景下无法使用;
由于是通过拷贝物理文件实现的,源表和目标表都是使用 InnoDB 引擎时才能使用
posted @   Enzo_Ocean  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示