ClickHouse/docs/ja/interfaces/mysql.md
2024-11-18 11:58:58 +09:00

9.9 KiB
Raw Blame History

slug sidebar_position sidebar_label
/ja/interfaces/mysql 20 MySQL Interface

MySQL インターフェース

ClickHouseは、MySQLのワイヤープロトコルをサポートしています。これにより、ネイティブなClickHouseコネクタを持たない一部のクライアントがMySQLプロトコルを利用でき、以下のBIツールで検証済みです:

他の未検証のクライアントまたは統合を試みる場合、以下の制限があることをご了承ください:

  • SSLの実装が完全に互換性がない可能性があり、TLS SNIに関連した問題が発生する可能性があります。
  • 特定のツールが必要とする方言の機能例えば、MySQL特有の関数や設定が未実装の場合があります。

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

特定のツールでネイティブClickHouseドライバが利用できず、MySQLインターフェースを通じて使用したいが、いくつかの非互換性が見つかった場合は、ClickHouseリポジトリで問題を作成してください。

::::note 上記のBIツールのSQL方言をより良くサポートするために、ClickHouseのMySQLインターフェースは、設定prefer_column_name_to_alias = 1でクエリを実行します。これはオフにすることができず、稀なケースでClickHouseの通常のクエリインターフェースとMySQLクエリインターフェースの間で異なる動作を引き起こす可能性があります。 ::::

ClickHouse CloudでのMySQLインターフェースの有効化

  1. ClickHouse Cloudサービスを作成した後、クレデンシャル画面でMySQLタブを選択します。

Credentials screen - Prompt

  1. 特定のサービス用にMySQLインターフェースを有効化するようにスイッチを切り替えます。これにより、このサービスに対してポート3306が公開され、独自のMySQLユーザー名を含むMySQL接続画面が表示されます。パスワードはサービスのデフォルトユーザーパスワードと同じになります。

Credentials screen - Enabled MySQL

既存のサービス用にMySQLインターフェースを有効化する場合:

  1. サービスをRunning状態にして、MySQLインターフェースを有効化したいサービスの"View connection string"ボタンをクリックします。

Connection screen - Prompt MySQL

  1. 特定のサービス用にMySQLインターフェースを有効化するようにスイッチを切り替えます。これにより、デフォルトのパスワードを入力するように促されます。

Connection screen - Prompt MySQL

  1. パスワードを入力すると、このサービスのMySQL接続文字列が表示されます。 Connection screen -  MySQL Enabled

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

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

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

:::tip ClickHouse Cloudのホスト名がfoobar.us-east1.aws.clickhouse.cloudの場合、<subdomain>部分はfoobarに相当し、カスタムMySQLユーザー名はmysql4foobar_team1のようになります。 :::

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サーバーを起動し、次のような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;"