Mysql数据的迁移
mysqldump
mysqldump比较适合几十万上百万的较小数据的迁移使用
mysql load data
load data infile 语句可以从一个文本文件中以很高的速度读入一个表中,性能大概是 insert 语句的几十倍,比较适合上千万级及更高的海量数据迁移使用
MysqlDump
•--single-transaction: 对InnoDB表开启一个事务,以保证数据的一致性,并避免长时间的表锁定。(InnoDB保证数据一致性且不会锁表)
•--quick: 逐行导出数据,而不是将整个表的数据读入内存,适用于大表的导出。
•--skip-lock-tables: 禁用表锁,这样可以避免在导出过程中锁定表,适用于并发读写较多的环境。(保证不会整个锁表)
•--no-tablespaces: 不导出表空间信息,减少不必要的数据,可能会加快导出速度。
•-h your_db_host: 指定数据库服务器的地址。
•-u your_db_user: 数据库用户名。
•-p: 提示输入数据库密码。出于安全考虑,不建议将密码直接写在命令中。
•your_db_name: 要导出的数据库名。
•your_table_name: 要导出的表名。
•| gzip > : 导出过程中直接压缩数据,可以减少磁盘空间占用和传输时间:。
Mac脚本
新建sh脚本文件
直接执行sh,导出的sql文件会在当前sh所在目录下
千万级数据要么用loaddata,要么用程序分批同步
SELECT * INTO OUTFILE导出千万级大数据量数据
MYSQL对千万级数据(10个G左右)的迁移,耗时控制在半小时内
检查 secure-file-priv 设置
secure-file-priv 是 MySQL 的一个安全设置,用于限制 LOAD DATA INFILE 和 SELECT INTO OUTFILE 操作的文件读写路径。具体来说:
•如果 secure-file-priv 被设置为一个目录路径,那么只有该目录下的文件才能被 LOAD DATA INFILE 读取或被 SELECT INTO OUTFILE 写入。
•如果 secure-file-priv 被设置为空字符串'',允许在服务器上的任何路径使用 LOAD DATA INFILE 和 SELECT INTO OUTFILE,但这通常不推荐使用,因为它没有路径限制,存在安全风险。
•如果 secure-file-priv 被设置为 NULL,禁用 LOAD DATA INFILE 和 SELECT INTO OUTFILE,这两个操作将无法执行。
修改 MySQL 的配置文件 my.cnf 或 my.ini
LOAD DATA迁移千万级数据
步骤概述
1.导出数据: 使用 SELECT INTO OUTFILE 将数据导出到文本文件。
2.传输文件: 将文件传输到目标服务器。
3.导入数据: 使用 LOAD DATA 命令将数据导入到目标表中。
导出数据
在源数据库中,将数据导出到一个文本文件中
将导出的文件从源服务器传输到目标服务器,可以使用 scp、rsync 等工具进行传输。
导入数据
导入性能优化建议
•禁用或延迟索引: 如果表中有大量索引,导入数据时可能会变慢。可以考虑在导入数据之前禁用索引,导入完成后再重新启用索引。
•禁用外键检查: 如果表中存在外键,导入数据时可能会有性能损耗。可以在导入数据之前禁用外键检查:
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~