我需要将数据从 Mysql 迁移到 ClickHouse 并做一些测试。这两个数据库网络都不行,只好用文件传输。我首先想到的是可以使用mysqldump工具导出.sql文件。
mysqldump -t -h192.168.212.128 -P3306 --default-character-set=utf8 -uroot -proot database_name table_name > test.sql
然后发现mysql表中有1.2亿条数据。这样导出的.sql文件的insert语句很长。如何避免这种情况,比如每次导出1000条数据作为insert语句?
另外,这个.sql文件太大了,能不能分成小文件,需要怎么办?
最佳答案
mysqldump 有一个选项可以打开或关闭使用多值插入。您可以根据自己的喜好执行以下任一操作:
每个值的单独插入语句:
mysqldump -t -h192.168.212.128 -P3306 --default-character-set=utf8 --skip-extended-insert -uroot -proot database_name table_name > test.sql
多值插入语句:
mysqldump -t -h192.168.212.128 -P3306 --default-character-set=utf8 --extended-insert -uroot -proot database_name table_name > test.sql
所以您可以先使用以下内容转储架构:
mysqldump -t -h192.168.212.128 -P3306 --default-character-set=utf8 --no-data -uroot -proot database_name > dbschema.sql
然后将数据自己转储为单独的插入语句:
mysqldump -t -h192.168.212.128 -P3306 --default-character-set=utf8 --skip-extended-insert --no-create-info -uroot -proot database_name table_name > test.sql
然后您可以将 INSERT 文件拆分成尽可能多的部分。例如,如果您使用的是 UNIX,请使用 split 命令。
如果您担心导入需要多长时间,您可能还想添加 --disable-keys 选项以加快插入速度..
但我的建议是不要太担心这个。 mysqldump 不应超过 MySQL 在单个语句中导入的能力,并且它应该比单个插入运行得更快。至于文件大小,SQL 的一个好处是它压缩得很好。数 GB 的 SQL 转储将变成一个非常紧凑的 gzip 或 bzip 或 zip 文件。
编辑:如果您真的想调整多值插入转储中每次插入的值数量,您可以添加 --max_allowed_packet 选项。例如。 --max_allowed_packet=24M 。数据包大小决定了单个数据包(例如插入)的大小,因此如果您将其设置得足够低,它应该会减少每个插入的值的数量。尽管如此,在您开始搞砸之前,我还是会按原样尝试。
关于mysql - 如何使用文件将数据从mysql迁移到clickhouse?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52345137/