41 | 怎么最快地复制一张表?
该思维导图由 AI 生成,仅供参考
mysqldump 方法
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了在MySQL中最快地复制一张表的方法,包括使用mysqldump命令导出INSERT语句、直接导出.csv文件以及使用mysqldump的--tab参数导出表结构定义文件和CSV数据文件的方法。此外,还介绍了在MySQL 5.6版本中引入的可传输表空间的方法,实现物理拷贝表的功能。文章总结了三种方法的优缺点,指出物理拷贝方式速度最快,但有一定的局限性;而逻辑备份方式则更为灵活,支持跨引擎使用。总的来说,本文详细介绍了两种常用的方法,以及它们的执行流程和注意事项,为读者提供了快速了解MySQL表复制的技术特点。
《MySQL 实战 45 讲》,新⼈⾸单¥68
全部留言(42)
- 最新
- 精选
- 长杰课后题答案 不加“local”,是读取服务端的文件,这个文件必须在 secure_file_priv 指定的目录或子目录下;而备库的apply线程执行时先讲csv内容读出生成tmp目录下的临时文件,这个目录容易受secure_file_priv的影响,如果备库改参数设置为Null或指定的目录,可能导致load操作失败,加local则不受这个影响。
作者回复: 👍
2019-02-1768 - poppy关于思考题,我理解是备库的同步线程其实相当于备库的一个客户端,由于备库的会把binlog中t.csv的内容写到/tmp/SQL_LOAD_MB-1-0中,如果load data命令不加'local'表示读取服务端的文件,文件必须在secure_file_priv指定的目录或子目录,此时可能找不到该文件,主备同步执行会失败。而加上local的话,表示读取客户端的文件,既然备份线程都能在该目录下创建临时文件/tmp/SQL_LOAD_MB-1-0,必然也有权限访问,把该文件传给服务端执行。
作者回复: 👍这是其中一个原因
2019-02-1525 - 尘封老师mysqldump导出的文件里,单条sql里的value值有什么限制吗默认情况下,假如一个表有几百万,那mysql会分为多少个sql导出? 问题:因为从库可能没有load的权限,所以local
作者回复: 好问题, 会控制单行不会超过参数net_buffer_length,这个参数是可以通过--net_buffer_length 传给mysqldump 工具的
2019-02-15318 - ☆appleう通知对方更新数据的意思是: 针对事务内的3个操作:插入和更新两个都是本地操作,第三个操作是远程调用,这里远程调用其实是想把本地操作的那两条通知对方(对方:远程调用),让对方把数据更新,这样双方(我和远程调用方)的数据达到一致,如果对方操作失败,事务的前两个操作也会回滚,主要是想保证双方数据的一致性,因为远程调用可能会出现网络延迟超时等因素,极端情况会导致事务10s左右才能处理完毕,想问的是这样耗时的事务会带来哪些影响呢? 设计的初衷是想这三个操作能原子执行,只要有不成功就可以回滚,保证两方数据的一致性 耗时长的远程调用不放在事务中执行,会出现我这面数据完成了,而对方那面由于网络等问题,并没有更新,这样两方的数据就出现不一致了
作者回复: 嗯 了解了 这种设计我觉得就是会对并发性有比较大的影响。 一般如果网络状态不好的,会建议把这个更新操作放到消息队列。 就是说 1. 先本地提交事务。 2. 把通知这个动作放到消息队列,失败了可以重试; 3. 远端接收事件要设置成可重入的,就是即使同一个消息收到两次,也跟收到一次是相同的效果。 2 和3 配合起来保证最终一致性。 这种设计我见到得比较多,你评估下是否符合你们业务的需求哈
2019-02-15215 - 库淘淘如果不加local 如secure_file_priv 设置为null 或者路径 可能就不能成功,这样加了之后可以保证执行成功率不受参数secure_file_priv影响。 还有发现物理拷贝文件后,权限所属用户还得改下,不然import tablespace 会报错找不到文件,老师是不是应该补充上去,不然容易踩坑。
作者回复: 嗯嗯,有同学已经踩了, 我加个说明进去,多谢提醒
2019-02-1512 - undifined老师,用物理导入的方式执行 alter table r import tablespace 时 提示ERROR 1812 (HY000): Tablespace is missing for table `db1`.`r`. 此时 db1/ 下面的文件有 db.opt r.cfg r.frm r.ibd t.frm t.ibd;这个该怎么处理 执行步骤: mysql> create table r like t; Query OK, 0 rows affected (0.01 sec) mysql> alter table r discard tablespace; Query OK, 0 rows affected (0.01 sec) mysql> flush table t for export; Query OK, 0 rows affected (0.00 sec) cp t.cfg r.cfg cp t.ibd r.ibd mysql> unlock tables; Query OK, 0 rows affected (0.01 sec) mysql> alter table r import tablespace; ERROR 1812 (HY000): Tablespace is missing for table `db1`.`r`.
作者回复: 应该就是评论区其他同学帮忙回复的权限问题了吧?
2019-02-1549 - 信信老师好,唯一索引的加next-key lock时,会退化会记录锁。这中间会先拿到间隙锁再释放,还是从一开始就不会获取间隙锁,直接只获取记录锁呢?
作者回复: 在我们这篇的例子里面,insert duplicate key后导致加锁这个,是不会退化的哦。 如果是说我们在21篇讲的加锁规则里面, 这个退化的效果就是直接不加间隙锁
2019-02-1527 - ☆appleう老师,我想问一个关于事务的问题,一个事务中有3个操作,插入一条数据(本地操作),更新一条数据(本地操作),然后远程调用,通知对方更新上面数据(如果远程调用失败会重试,最多3次,如果遇到网络等问题,远程调用时间会达到5s,极端情况3次会达到15s),那么极端情况事务将长达5-15s,这样会带来什么影响吗?
作者回复: “通知对方更新上面数据” 是啥概念,如果你这个事务没提交,其他线程也看不到前两个操作的结果的。 设计上不建议留这么长的事务哈,最好是可以先把事务提交了,再去做耗时的操作。
2019-02-157 - skyoomysql> select * from t; +----+------+ | id | name | +----+------+ | 1 | Bob | | 2 | Mary | | 3 | Jane | | 4 | Lisa | | 5 | Mary | | 6 | Jane | | 7 | Lisa | +----+------+ 7 rows in set (0.00 sec) mysql> create table tt like t; Query OK, 0 rows affected (0.03 sec) mysql> alter table tt discard tablespace; Query OK, 0 rows affected (0.01 sec) mysql> flush table t for export; Query OK, 0 rows affected (0.01 sec) mysql> unlock tables; Query OK, 0 rows affected (0.00 sec) mysql> alter table tt import tablespace; Query OK, 0 rows affected (0.03 sec) mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | t | | t2 | | tt | +----------------+ 3 rows in set (0.00 sec) mysql> select * from t; +----+------+ | id | name | +----+------+ | 1 | Bob | | 2 | Mary | | 3 | Jane | | 4 | Lisa | | 5 | Mary | | 6 | Jane | | 7 | Lisa | +----+------+ 7 rows in set (0.00 sec) mysql> select * from tt; +----+------+ | id | name | +----+------+ | 1 | Bob | | 2 | Mary | | 3 | Jane | | 4 | Lisa | | 5 | Mary | | 6 | Jane | | 7 | Lisa | +----+------+ 7 rows in set (0.00 sec) ll 后 查看 tt.cfg 文件没有自动删除 5.7mysql -rw-r-----. 1 mysql mysql 380 2月 15 09:51 tt.cfg -rw-r-----. 1 mysql mysql 8586 2月 15 09:49 tt.frm -rw-r-----. 1 mysql mysql 98304 2月 15 09:51 tt.ibd
作者回复: 你说得对,👍细致 import动作 不会自动删除cfg文件,我图改一下
2019-02-156 - 小灰灰zyh老师您好,想问下如果是迁移5000W左右的一张表,使用导出CSV文件的方式效率高吗?
作者回复: 导出挺快的,但是导入就不好办了。~
2019-04-163