我需要把数据从Mysql迁移到ClickHouse并做一些测试。这两个数据库网络不工作,我不得不用文件传输。我首先想到的是,我可以使用mysqldump工具导出.sql文件。
mysqldump-t-h192.168.212.128-P3306--默认字符集=utf8-uroot-proot数据库名表名>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
然后将数据作为单独的insert语句单独转储:
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
然后可以将插入文件分割成尽可能多的片段。例如,如果您在UNIX上,请使用split命令。
如果您担心导入需要多长时间,您可能还需要添加--disable keys选项来加快插入速度。。
但我的建议是不要太担心。mysqldump不应该超过MySQL在单个语句中导入的能力,它应该比单个插入运行得更快。至于文件大小,SQL的一个优点是压缩得非常漂亮。这个千兆字节的SQL转储将变成一个非常紧凑的gzip或bzip或zip文件。
编辑:如果您真的想调整多值插入转储中每个插入的值的数量,可以添加--max_allowed_packet选项。例如——允许的最大数据包=24M。数据包大小决定了单个数据包(例如插入)的大小,因此如果设置得足够低,则应该减少每次插入的值数。不过,在你开始搞乱之前,我还是会尽量的。
关于mysql - 如何使用文件将数据从mysql迁移到Clickhouse?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52345137/