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

标签 mysql database-migration clickhouse

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

关于mysql - 如何使用文件将数据从mysql迁移到clickhouse?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52345137/

相关文章:

php - 创建一个在模板上显示 ID 信息的页面

sql - ClickHouse:如何以正确的方式存储 JSON 数据?

ruby-on-rails - 在 Rails ActiveRecord 迁移中, `using:` 关键字

amazon-web-services - 如何将 DynamoDb 迁移到 RDS (Aurora)

python - clickhouse + sqlalchemy : SELECT drops two rows from result

php - mysql 显示查询的偏移量

php - 在 PHP 中计算一堆结果

php - 如何在CodeIgniter中表示SQL的 `having count(' *')`?

mariadb - Sequelize-cli 在执行迁移时返回 "Unknown Database"