Skip to main content
Edit this page

MySQLをClickHouseと統合

このページでは、MySQLをClickHouseと統合するための2つのオプションについて説明します:

  • MySQLテーブルを読み取るためのMySQLテーブルエンジンを使用する
  • MySQLのデータベースとClickHouseのデータベースを同期するためのMaterializedMySQLデータベースエンジンを使用する

MySQLテーブルエンジンを使用してClickHouseをMySQLに接続

MySQLテーブルエンジンを使用すると、ClickHouseをMySQLに接続できます。ClickHouseまたはMySQLのテーブルでSELECTおよびINSERTステートメントを行うことができます。このセクションでは、MySQLテーブルエンジンを使用する基本的な方法を示します。

1. MySQLを設定

  1. MySQLにデータベースを作成:

    CREATE DATABASE db1;
  2. テーブルを作成:

    CREATE TABLE db1.table1 (
    id INT,
    column1 VARCHAR(255)
    );
  3. サンプル行を挿入:

    INSERT INTO db1.table1
    (id, column1)
    VALUES
    (1, 'abc'),
    (2, 'def'),
    (3, 'ghi');
  4. ClickHouseから接続するためのユーザーを作成:

    CREATE USER 'mysql_clickhouse'@'%' IDENTIFIED BY 'Password123!';
  5. 必要に応じて権限を付与。(デモ目的で、mysql_clickhouseユーザーには管理者権限が付与されています)

    GRANT ALL PRIVILEGES ON *.* TO 'mysql_clickhouse'@'%';
Note

この機能をClickHouse Cloudで使用する場合、ClickHouse CloudのIPアドレスがMySQLインスタンスにアクセスすることを許可する必要があるかもしれません。次のリンクを確認してください:Cloud Endpoints API

2. ClickHouseにテーブルを定義

  1. 次に、MySQLテーブルエンジンを使用するClickHouseテーブルを作成しましょう:

    CREATE TABLE mysql_table1 (
    id UInt64,
    column1 String
    )
    ENGINE = MySQL('mysql-host.domain.com','db1','table1','mysql_clickhouse','Password123!')

    必須パラメータは以下の通りです:

    パラメータ説明
    hostホスト名またはIPmysql-host.domain.com
    databasemysqlデータベース名db1
    tablemysqlテーブル名table1
    usermysqlに接続するためのユーザー名mysql_clickhouse
    passwordmysqlに接続するためのパスワードPassword123!
    Note

    全パラメータのリストについては、MySQLテーブルエンジンのドキュメントページをご覧ください。

3. 統合をテスト

  1. MySQLでサンプル行を挿入:

    INSERT INTO db1.table1
    (id, column1)
    VALUES
    (4, 'jkl');
  2. 既存のMySQLテーブルの行が新たに追加された行とともにClickHouseテーブルにあることを確認:

    SELECT
    id,
    column1
    FROM mysql_table1

    4行が表示されるはずです:

    Query id: 6d590083-841e-4e95-8715-ef37d3e95197

    ┌─id─┬─column1─┐
    │ 1 │ abc │
    │ 2 │ def │
    │ 3 │ ghi │
    │ 4 │ jkl │
    └────┴─────────┘

    4 rows in set. Elapsed: 0.044 sec.
  3. ClickHouseテーブルに行を追加しましょう:

    INSERT INTO mysql_table1
    (id, column1)
    VALUES
    (5,'mno')
  4. 新しい行がMySQLに表示されることを確認:

    mysql> select id,column1 from db1.table1;

    新しい行が表示されるはずです:

    +------+---------+
    | id | column1 |
    +------+---------+
    | 1 | abc |
    | 2 | def |
    | 3 | ghi |
    | 4 | jkl |
    | 5 | mno |
    +------+---------+
    5 rows in set (0.01 sec)

まとめ

MySQLテーブルエンジンを使用すると、データを相互に交換するためにClickHouseをMySQLに接続できます。詳細については、MySQLテーブルエンジンのドキュメントページを確認してください。

ClickHouseでMySQLデータベースを複製

Not supported in ClickHouse Cloud
Experimental feature. Learn more.

MaterializedMySQLデータベースエンジンを使用すると、MySQLデータベース内の既存のすべてのテーブルとそれらのテーブル内のすべてのデータを含むデータベースをClickHouse内に定義できます。MySQL側ではDDLおよびDML操作を引き続き行うことができ、ClickHouseは変更を検出し、MySQLデータベースのレプリカとして機能します。

このセクションでは、このレプリケーションを実装するためにMySQLとClickHouseを設定する方法を示します。

1. MySQLを設定

  1. レプリケーションとネイティブ認証を許可するようにMySQLデータベースを設定します。ClickHouseはネイティブパスワード認証のみをサポートしています。/etc/my.cnfに次のエントリを追加してください:

    default_authentication_plugin = mysql_native_password
    gtid_mode = ON
    enforce_gtid_consistency = ON
  2. ClickHouseから接続するユーザーを作成:

    CREATE USER clickhouse_user IDENTIFIED BY 'ClickHouse_123';
  3. 新しいユーザーに必要な権限を付与します。デモ目的で、ここでは完全な管理者権限が付与されています:

    GRANT ALL PRIVILEGES ON *.* TO 'clickhouse_user'@'%';
    Note

    MySQLユーザーに必要な最小限の権限はRELOADREPLICATION SLAVEREPLICATION CLIENT、およびSELECT PRIVILEGEです。

  4. MySQLにデータベースを作成:

    CREATE DATABASE db1;
  5. テーブルを作成:

    CREATE TABLE db1.table_1 (
    id INT,
    column1 VARCHAR(10),
    PRIMARY KEY (`id`)
    ) ENGINE = InnoDB;
  6. サンプル行を挿入:

    INSERT INTO db1.table_1
    (id, column1)
    VALUES
    (1, 'abc'),
    (2, 'def'),
    (3, 'ghi');

2. ClickHouseを設定

  1. エクスペリメンタルな機能を使用するためのパラメータを設定:

    set allow_experimental_database_materialized_mysql = 1;
  2. MaterializedMySQLデータベースエンジンを使用するデータベースを作成:

    CREATE DATABASE db1_mysql
    ENGINE = MaterializedMySQL(
    'mysql-host.domain.com:3306',
    'db1',
    'clickhouse_user',
    'ClickHouse_123'
    );

    必須パラメータは以下の通りです:

    パラメータ説明
    host:portホスト名またはIPとポートmysql-host.domain.com
    databasemysqlデータベース名db1
    usermysqlに接続するためのユーザー名clickhouse_user
    passwordmysqlに接続するためのパスワードClickHouse_123
    Note

    全パラメータのリストについては、MaterializedMySQLデータベースエンジンのドキュメントページをご覧ください。

3. 統合をテスト

  1. MySQLでサンプル行を挿入:

    INSERT INTO db1.table_1
    (id, column1)
    VALUES
    (4, 'jkl');
  2. 新しい行がClickHouseテーブルに表示されることを確認:

    SELECT
    id,
    column1
    FROM db1_mysql.table_1

    応答は次のようになります:

    Query id: d61a5840-63ca-4a3d-8fac-c93235985654

    ┌─id─┬─column1─┐
    │ 1 │ abc │
    └────┴─────────┘
    ┌─id─┬─column1─┐
    │ 4 │ jkl │
    └────┴─────────┘
    ┌─id─┬─column1─┐
    │ 2 │ def │
    └────┴─────────┘
    ┌─id─┬─column1─┐
    │ 3 │ ghi │
    └────┴─────────┘

    4 rows in set. Elapsed: 0.030 sec.
  3. MySQLのテーブルが変更されたと仮定します。MySQLのdb1.table_1にカラムを追加してみましょう:

    alter table db1.table_1 add column column2 varchar(10) after column1;
  4. 変更されたテーブルに行を挿入しましょう:

    INSERT INTO db1.table_1
    (id, column1, column2)
    VALUES
    (5, 'mno', 'pqr');
  5. ClickHouseのテーブルにも新しいカラムと新しい行が表示されることを確認:

    SELECT
    id,
    column1,
    column2
    FROM db1_mysql.table_1

    以前の行はcolumn2NULLが表示されます:

    Query id: 2c32fd15-3c83-480b-9bfc-cba5d932d674

    Connecting to localhost:9000 as user default.
    Connected to ClickHouse server version 22.2.2 revision 54455.

    ┌─id─┬─column1─┬─column2─┐
    │ 3 │ ghi │ ᴺᵁᴸᴸ │
    └────┴─────────┴─────────┘
    ┌─id─┬─column1─┬─column2─┐
    │ 2 │ def │ ᴺᵁᴸᴸ │
    └────┴─────────┴─────────┘
    ┌─id─┬─column1─┬─column2─┐
    │ 1 │ abc │ ᴺᵁᴸᴸ │
    │ 5 │ mno │ pqr │
    └────┴─────────┴─────────┘
    ┌─id─┬─column1─┬─column2─┐
    │ 4 │ jkl │ ᴺᵁᴸᴸ │
    └────┴─────────┴─────────┘

    5 rows in set. Elapsed: 0.017 sec.

まとめ

これで完了です!MaterializedMySQLデータベースエンジンは、MySQLデータベースをClickHouseで同期します。詳細と制限については、MaterializedMySQLドキュメントページを確認してください。