我需要将数据从Mysql迁移到ClickHouse并做一些测试。这两个数据库网络不工作,我只能用文件传输。我首先想到的是可以使用mysqldump工具导出.sql文件。
mysqldump字符集-uroot - -h192.168.212.128 - -P3306 =utf8-uroot -proot database_name table_name > test.sql
然后我发现mysql表中有1.2亿条数据。以这种方式导出的.sql文件的insert语句非常长。如何避免这种情况,比如每次导出1000个数据作为insert语句?
另外,这个.sql文件太大了,能不能分成小文件,需要怎么做?
发布于 2018-09-15 21:45:12
mysqldump有一个使用多值插入打开或关闭的选项。您可以根据自己的喜好执行以下任一操作:
每个值单独的Insert语句:
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选项。例如--max_allowed_packet=24M。数据包大小决定了单个数据包(例如插入)的大小,因此如果您将其设置得足够低,它应该会减少每次插入的值的数量。尽管如此,在你开始搞乱之前,我还是会试一试。
发布于 2018-12-18 20:30:34
clickhouse-client --host="localhost“--port="9000”--max_threads="1“--query="INSERT INTO database_name.table_name FORMAT Native”< clickhouse_dump.sql
https://stackoverflow.com/questions/52345137
复制相似问题