Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

MySQL インターフェイス

ClickHouse は MySQL wire protocol をサポートしています。これにより、ネイティブな ClickHouse コネクタを持たない一部のクライアントでも、代わりに MySQL プロトコルを利用できます。以下の BI ツールで動作確認されています。

そのほかの未検証のクライアントやインテグレーションを試す場合は、次のような制限がある可能性があることに留意してください。

  • SSL 実装に完全な互換性がない可能性があり、TLS SNI に関する問題が発生することがあります。
  • 特定のツールで、まだ実装されていない dialect の機能 (例: MySQL 固有の関数や設定) が必要になる場合があります。

ネイティブなドライバーが利用可能な場合 (例: DBeaver) 、MySQL インターフェイスではなく、常にそちらを使用することを推奨します。また、MySQL 用の各種言語クライアントの多くは問題なく動作するはずですが、MySQL インターフェイスは、既存の MySQL クエリを使用するコードベースにそのまま置き換えられることを保証するものではありません。

ネイティブな ClickHouse ドライバーを持たない特定のツールを MySQL インターフェイス経由で利用したいものの、何らかの非互換性が見つかった場合は、ClickHouse repository に issue を作成してください。

ClickHouse Cloud で MySQL インターフェイスを有効にする

  1. ClickHouse Cloud サービスを作成したら、Connect ボタンをクリックします。

認証情報画面 - Prompt
  1. Connect with ドロップダウンを MySQL に変更します。

認証情報画面 - MySQL を選択
  1. このサービスで MySQL インターフェイスを有効にするには、スイッチをオンにします。これにより、このサービスでポート 3306 が開放され、専用の MySQL ユーザー名が表示された MySQL 接続画面が表示されます。パスワードは、このサービスのデフォルトユーザーのパスワードと同じです。

認証情報画面 - MySQL が有効

表示されている MySQL 接続文字列をコピーします。

認証情報画面 - 接続文字列

ClickHouse Cloud で複数の MySQL ユーザーを作成する

デフォルトでは、組み込みの mysql4<subdomain> ユーザーがあり、default ユーザーと同じパスワードを使用します。<subdomain> の部分は、ClickHouse Cloud ホスト名の最初のセグメントです。この形式は、安全な接続を実装していても TLS ハンドシェイクで SNI 情報を提供しない ツールで利用するために必要です。こうしたツールでは、ユーザー名に追加のヒントがないと内部ルーティングを行えません (MySQL コンソールクライアントはそのようなツールの 1 つです) 。

このため、MySQL インターフェイスで使用する新しいユーザーを作成する際は、mysql4<subdomain>_<username> 形式に従うことを 強く推奨 します。ここで、<subdomain> は Cloud サービスを識別するためのヒントであり、<username> は任意の接尾辞です。

たとえば追加の設定を適用する必要がある場合は、MySQL インターフェイスで使用する追加ユーザーを作成できます。

  1. 任意 - カスタムユーザーに適用する 設定プロファイル を作成します。たとえば、追加設定を含む my_custom_profile を作成しておくと、後で作成するユーザーで接続したときにデフォルトで適用されます。

    CREATE SETTINGS PROFILE my_custom_profile SETTINGS prefer_column_name_to_alias=1;

    prefer_column_name_to_alias はあくまで例です。ここには他の設定を使用することもできます。

  2. 次の形式で ユーザーを作成 します: mysql4<subdomain>_<username> (上記を参照) 。パスワードはダブル SHA1 形式でなければなりません。たとえば次のとおりです。

    CREATE USER mysql4foobar_team1 IDENTIFIED WITH double_sha1_password BY 'YourPassword42$';

    または、このユーザーにカスタムプロファイルを使用する場合:

    CREATE USER mysql4foobar_team1 IDENTIFIED WITH double_sha1_password BY 'YourPassword42$' SETTINGS PROFILE 'my_custom_profile';

    ここで、my_custom_profile は先ほど作成したプロファイル名です。

  3. 新しいユーザーに、目的のテーブルまたはデータベースを操作するために必要な権限を 付与 します。たとえば、system.query_log のみにアクセスを許可したい場合は次のとおりです。

    GRANT SELECT ON system.query_log TO mysql4foobar_team1;
  4. 作成したユーザーを使用して、MySQL インターフェイス経由で ClickHouse Cloud サービスに接続します。

ClickHouse Cloud で複数の MySQL ユーザーを使用する場合のトラブルシューティング

新しい MySQL ユーザーを作成し、MySQL CLI クライアント経由で接続した際に次のエラーが表示される場合:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 54

この場合、ユーザー名が 上記 で説明した mysql4<subdomain>_<username> 形式に従っていることを確認してください。

セルフマネージド ClickHouse で MySQL インターフェイスを有効にする

サーバーの設定ファイルに mysql_port 設定を追加します。たとえば、config.d/ フォルダ に新しい XML ファイルを作成し、そこでポートを定義できます。

<clickhouse>
    <mysql_port>9004</mysql_port>
</clickhouse>

ClickHouse server を起動し、MySQL 互換プロトコルを待ち受けていることを示す、次のようなログメッセージを探します。

{} <Information> Application: Listening for MySQL compatibility protocol: 127.0.0.1:9004

MySQL を ClickHouse に接続する

次のコマンドは、MySQL クライアント mysql を ClickHouse に接続する方法を示しています。

mysql --protocol tcp -h [hostname] -u [username] -P [port_number] [database_name]

例:

$ mysql --protocol tcp -h 127.0.0.1 -u default -P 9004 default

接続に成功した場合の出力:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 20.2.1.1-ClickHouse

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

すべての MySQL クライアントとの互換性を確保するため、ユーザーパスワードは設定ファイルで ダブル SHA1 を使用して指定することを推奨します。 ユーザーパスワードを SHA256 で指定すると、一部のクライアントでは認証できません (mysqljs、およびコマンドラインツール MySQL と MariaDB の古いバージョン) 。

制限事項:

  • プリペアドクエリはサポートされていません

  • 一部のデータ型は文字列として送信されます

長時間実行されるクエリをキャンセルするには、KILL QUERY connection_id ステートメントを使用します (処理時に KILL QUERY WHERE query_id = connection_id に置き換えられます) 。例:

$ mysql --protocol tcp -h mysql_server -P 9004 default -u default --password=123 -e "KILL QUERY 123456;"
Navigation