11 KiB
sidebar_label | sidebar_position | slug | description | keywords | ||||||
---|---|---|---|---|---|---|---|---|---|---|
MySQL | 10 | /ja/integrations/mysql | MySQLテーブルエンジンを使用すると、ClickHouseをMySQLに接続できます。 |
|
import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; import ExperimentalBadge from '@theme/badges/ExperimentalBadge';
MySQLをClickHouseと統合
このページでは、MySQLをClickHouseと統合するための2つのオプションについて説明します:
- MySQLテーブルを読み取るための
MySQL
テーブルエンジンを使用する - MySQLのデータベースとClickHouseのデータベースを同期するための
MaterializedMySQL
データベースエンジンを使用する
MySQLテーブルエンジンを使用してClickHouseをMySQLに接続
MySQL
テーブルエンジンを使用すると、ClickHouseをMySQLに接続できます。ClickHouseまたはMySQLのテーブルでSELECTおよびINSERTステートメントを行うことができます。このセクションでは、MySQL
テーブルエンジンを使用する基本的な方法を示します。
1. MySQLを設定
- MySQLにデータベースを作成:
CREATE DATABASE db1;
- テーブルを作成:
CREATE TABLE db1.table1 (
id INT,
column1 VARCHAR(255)
);
- サンプル行を挿入:
INSERT INTO db1.table1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def'),
(3, 'ghi');
- ClickHouseから接続するためのユーザーを作成:
CREATE USER 'mysql_clickhouse'@'%' IDENTIFIED BY 'Password123!';
- 必要に応じて権限を付与。(デモ目的で、
mysql_clickhouse
ユーザーには管理者権限が付与されています)
GRANT ALL PRIVILEGES ON *.* TO 'mysql_clickhouse'@'%';
:::note この機能をClickHouse Cloudで使用する場合、ClickHouse CloudのIPアドレスがMySQLインスタンスにアクセスすることを許可する必要があるかもしれません。次のリンクを確認してください:Cloud Endpoints API。 :::
2. ClickHouseにテーブルを定義
- 次に、
MySQL
テーブルエンジンを使用するClickHouseテーブルを作成しましょう:
CREATE TABLE mysql_table1 (
id UInt64,
column1 String
)
ENGINE = MySQL('mysql-host.domain.com','db1','table1','mysql_clickhouse','Password123!')
必須パラメータは以下の通りです:
パラメータ | 説明 | 例 |
---|---|---|
host | ホスト名またはIP | mysql-host.domain.com |
database | mysqlデータベース名 | db1 |
table | mysqlテーブル名 | table1 |
user | mysqlに接続するためのユーザー名 | mysql_clickhouse |
password | mysqlに接続するためのパスワード | Password123! |
:::note 全パラメータのリストについては、MySQLテーブルエンジンのドキュメントページをご覧ください。 :::
3. 統合をテスト
- MySQLでサンプル行を挿入:
INSERT INTO db1.table1
(id, column1)
VALUES
(4, 'jkl');
- 既存の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.
- ClickHouseテーブルに行を追加しましょう:
INSERT INTO mysql_table1
(id, column1)
VALUES
(5,'mno')
- 新しい行が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データベースを複製
MaterializedMySQL
データベースエンジンを使用すると、MySQLデータベース内の既存のすべてのテーブルとそれらのテーブル内のすべてのデータを含むデータベースをClickHouse内に定義できます。MySQL側ではDDLおよびDML操作を引き続き行うことができ、ClickHouseは変更を検出し、MySQLデータベースのレプリカとして機能します。
このセクションでは、このレプリケーションを実装するためにMySQLとClickHouseを設定する方法を示します。
1. MySQLを設定
- レプリケーションとネイティブ認証を許可するようにMySQLデータベースを設定します。ClickHouseはネイティブパスワード認証のみをサポートしています。
/etc/my.cnf
に次のエントリを追加してください:
default_authentication_plugin = mysql_native_password
gtid_mode = ON
enforce_gtid_consistency = ON
- ClickHouseから接続するユーザーを作成:
CREATE USER clickhouse_user IDENTIFIED BY 'ClickHouse_123';
- 新しいユーザーに必要な権限を付与します。デモ目的で、ここでは完全な管理者権限が付与されています:
GRANT ALL PRIVILEGES ON *.* TO 'clickhouse_user'@'%';
:::note MySQLユーザーに必要な最小限の権限はRELOAD、REPLICATION SLAVE、REPLICATION CLIENT、およびSELECT PRIVILEGEです。 :::
- MySQLにデータベースを作成:
CREATE DATABASE db1;
- テーブルを作成:
CREATE TABLE db1.table_1 (
id INT,
column1 VARCHAR(10),
PRIMARY KEY (`id`)
) ENGINE = InnoDB;
- サンプル行を挿入:
INSERT INTO db1.table_1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def'),
(3, 'ghi');
2. ClickHouseを設定
- エクスペリメンタルな機能を使用するためのパラメータを設定:
set allow_experimental_database_materialized_mysql = 1;
MaterializedMySQL
データベースエンジンを使用するデータベースを作成:
CREATE DATABASE db1_mysql
ENGINE = MaterializedMySQL(
'mysql-host.domain.com:3306',
'db1',
'clickhouse_user',
'ClickHouse_123'
);
必須パラメータは以下の通りです:
パラメータ | 説明 | 例 |
---|---|---|
host:port | ホスト名またはIPとポート | mysql-host.domain.com |
database | mysqlデータベース名 | db1 |
user | mysqlに接続するためのユーザー名 | clickhouse_user |
password | mysqlに接続するためのパスワード | ClickHouse_123 |
:::note 全パラメータのリストについては、MaterializedMySQLデータベースエンジンのドキュメントページをご覧ください。 :::
3. 統合をテスト
- MySQLでサンプル行を挿入:
INSERT INTO db1.table_1
(id, column1)
VALUES
(4, 'jkl');
- 新しい行が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.
- MySQLのテーブルが変更されたと仮定します。MySQLの
db1.table_1
にカラムを追加してみましょう:
alter table db1.table_1 add column column2 varchar(10) after column1;
- 変更されたテーブルに行を挿入しましょう:
INSERT INTO db1.table_1
(id, column1, column2)
VALUES
(5, 'mno', 'pqr');
- ClickHouseのテーブルにも新しいカラムと新しい行が表示されることを確認:
SELECT
id,
column1,
column2
FROM db1_mysql.table_1
以前の行はcolumn2
にNULL
が表示されます:
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ドキュメントページを確認してください。