首先,按照默认的隔离级别(RR或者RC),会在备份的数据加入写锁以保证数据的一致性。
如果是一个频繁修改的表(有UPDATE或者INSERT、DELETE)命令。会导致这些事务因为无法获得写锁导致无法修改。

按照其他作者的说法:如果是RR或者RC级别,如果不走索引进行UPDATE语句会导致锁全表(INDOOB是加入间隙锁和行锁),走索引会锁行。
如果是UPDATE走索引锁行。
如果是select会逐行加入写锁。
而备份实际上给就是select然后INSERT的过程,不管是导入到新表再进行insert还是直接 insert select都会导致备份的情况下导致UPDATE或者INSERT、DELETE这三个命令阻塞,简称就是:锁表。(但是是不是锁全表看情况)

如果这个业务是通过主键自增且只有INSERT没有UPDATE或者delete,那么可以直接用insert select 备份。
如果这个表中只有几万条数据或者二三十万,直接备份也没有问题(因为锁的时间很短)

如果数据量大,执行备份业务的时候:
尤其是有几百万条核心业务的大表,有下面种方式:
一、停业务备份
二、少量多次备份。
三、增量备份。
四、修改隔离级别不挂锁备份。

然后:有的表有触发器。
如果有触发器的话:当使用create table select * 的时候,会默认生成对应的触发器。
但是问题是:
比如说我有一个触发器,任务是UPDATE一个表的数据的时候会级联更新另外一个表。

然后,当备份这个表的时候,会生成一个相同的触发器。
所以,当更新备份数据的时候,会导致同时Update语句。

第三个,备份表格的时候,会有大量的IO进程,会占用大量的资源。
如果是业务高峰期,会导CPU占用高、硬盘IO高(如果是小表的话那无所谓……)
会导致业务迟滞、大量业务速度变慢。
如果要导出备份数据,还会导致网络带宽被大量占用(网络带宽是有限的)
如果要备份大表,需要保证业务少,通常是深夜才能执行大表的备份。