如何使用文件将数据从 mysql 迁移到 clickhouse?

Posted

技术标签:

【中文标题】如何使用文件将数据从 mysql 迁移到 clickhouse?【英文标题】:How to use a file to migrate data from mysql to a clickhouse? 【发布时间】:2018-09-15 13:28:25 【问题描述】:

我需要将数据从 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文件太大了,能不能分成小文件,需要做什么?

【问题讨论】:

【参考方案1】:

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_pa​​cket 选项。例如。 --max_allowed_pa​​cket=24M 。数据包大小决定了单个数据包(例如插入)的大小,因此如果将其设置得足够低,它应该会减少每次插入的值的数量。不过,在你开始搞砸之前,我会按原样尝试。

【讨论】:

【参考方案2】:

clickhouse-client --host="localhost" --port="9000" --max_threads="1" --query="INSERT INTO database_name.table_name FORMAT Native"

【讨论】:

以上是关于如何使用文件将数据从 mysql 迁移到 clickhouse?的主要内容,如果未能解决你的问题,请参考以下文章

使用 pymongo 将数据从 Mysql 迁移到 MongoDB

如何将数据库从 Filemaker 迁移到 Mysql?

(转)如何将数据库从SQL Server迁移到MySQL

怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

如何将 Django 模型从 mysql 迁移到 sqlite(或在任何两个数据库系统之间)?

将 Rails 项目从 MySQL 迁移到 MongoDB