MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  URI 類似文字列またはキーと値のペアを使用したサーバーへの接続

4.2.5 URI 類似文字列またはキーと値のペアを使用したサーバーへの接続

このセクションでは、URI のような接続文字列またはキーと値のペアを使用して、MySQL Shell などのクライアントに対して MySQL サーバーへの接続を確立する方法を指定する方法について説明します。 mysqlmysqldump などのクライアント用のコマンドラインオプションを使用した接続の確立の詳細は、セクション4.2.4「コマンドオプションを使用した MySQL Server への接続」 を参照してください。 接続できない場合の追加情報は、セクション6.2.21「MySQL への接続の問題のトラブルシューティング」 を参照してください。

注記

URI-like という用語は、RFC 3986 で定義されている URI (uniform resource identifier) 構文に似ているが同一ではない接続文字列構文を示します。

次の MySQL クライアントは、URI のような接続文字列またはキーと値のペアを使用した MySQL サーバーへの接続をサポートしています:

  • MySQL Shell

  • X DevAPI を実装する MySQL コネクタ

このセクションでは、すべての有効な URI 類似文字列およびキーと値のペアの接続パラメータについて説明します。これらの多くは、コマンドラインオプションで指定したものと似ています:

  • URI のような文字列で指定されたパラメータは、myuser@example.com:3306/main-schema などの構文を使用します。 完全な構文については、URI 類似の接続文字列を使用した接続 を参照してください。

  • キーと値のペアで指定されたパラメータは、{user:'myuser', host:'example.com', port:3306, schema:'main-schema'} などの構文を使用します。 完全な構文については、キーと値のペアを使用した接続 を参照してください。

接続パラメータでは、大/小文字は区別されません。 各パラメータは、指定した場合、一度のみ指定できます。 パラメータを複数回指定すると、エラーが発生します。

このセクションの内容は次のとおりです:

ベース接続パラメータ

次の説明では、MySQL への接続を指定するときに使用できるパラメータについて説明します。 これらのパラメータは、ベース URI のような構文に準拠する文字列 (URI 類似の接続文字列を使用した接続 を参照) またはキーと値のペア (キーと値のペアを使用した接続 を参照) を使用して指定できます。

  • scheme: 使用するトランスポートプロトコル。 X プロトコル 接続には mysqlx を、クラシック MySQL プロトコル 接続には mysql を使用します。 プロトコルが指定されていない場合、サーバーはプロトコルの推測を試みます。 DNS SRV をサポートするコネクタは、mysqlx+srv スキームを使用できます (Connections Using DNS SRV Records を参照)。

  • user: 認証プロセスに提供する MySQL ユーザーアカウント。

  • password: 認証プロセスに使用するパスワード。

    警告

    接続指定で明示的なパスワードを指定することはセキュアでないため、お薦めしません。 後の説明では、パスワードの対話型プロンプトを表示する方法を示します。

  • host: サーバーインスタンスが実行されているホスト。 値には、ホスト名、IPv4 アドレスまたは IPv6 アドレスを指定できます。 ホストが指定されていない場合、デフォルトは localhost です。

  • port: ターゲット MySQL サーバーが接続をリスニングしている TCP/IP ネットワークポート。 ポートが指定されていない場合、デフォルトは、X プロトコル 接続の場合は 33060、クラシック MySQL プロトコル 接続の場合は 3306 です。

  • socket: Unix ソケットファイルへのパスまたは Windows 名前付きパイプの名前。 値はローカルファイルパスです。 URI のような文字列では、パーセントエンコーディングを使用するか、パスをカッコで囲んでエンコードする必要があります。 カッコを使用すると、/ディレクトリセパレータ文字などの文字をパーセントエンコードする必要がなくなります。 たとえば、Unix ソケット/tmp/mysql.sock を使用して root@localhost として接続するには、root@localhost?socket=%2Ftmp%2Fmysql.sock としてパーセントエンコーディングを使用するか、root@localhost?socket=(/tmp/mysql.sock) としてカッコを使用してパスを指定します。

  • schema: 接続のデフォルトデータベース。 データベースが指定されていない場合、接続にはデフォルトのデータベースはありません。

Unix での localhost の処理は、トランスポートプロトコルのタイプによって異なります。 クラシック MySQL プロトコル を使用した接続は、他の MySQL クライアントと同様に localhost を処理します。つまり、localhost はソケットベースの接続用であると想定されます。 X プロトコル を使用した接続の場合、localhost の動作は、IPv4 アドレス 127.0.0.1 などのループバックアドレスを表すと想定される点で異なります。

追加の接続パラメータ

?attribute=value を追加して URI のような文字列の属性として、またはキーと値のペアとして、接続のオプションを指定できます。 次のオプションを使用できます。

  • ssl-mode: 接続に必要なセキュリティ状態。 次のモードを使用できます:

    • DISABLED

    • PREFERRED

    • REQUIRED

    • VERIFY_CA

    • VERIFY_IDENTITY

    これらのモードの詳細は、暗号化接続のコマンドオプション--ssl-mode オプションの説明を参照してください。

  • ssl-ca: PEM 形式の X.509 認証局ファイルへのパス。

  • ssl-capath: PEM 形式の X.509 認証局ファイルを含むディレクトリへのパス。

  • ssl-cert: PEM 形式の X.509 証明書ファイルへのパス。

  • ssl-cipher: TLSv1.2 までの TLS プロトコルを使用する接続に使用する暗号。

  • ssl-crl: PEM 形式の証明書失効リストを含むファイルへのパス。

  • ssl-crlpath: PEM 形式の証明書失効リストファイルを含むディレクトリへのパス。

  • ssl-key: PEM 形式の X.509 キーファイルへのパス。

  • tls-version : クラシック MySQL プロトコル の暗号化された接続に許可される TLS プロトコル。 このオプションは、MySQL Shell でのみサポートされます。 tls-version (単数形) の値は、TLSv1.1,TLSv1.2 などのカンマ区切りリストです。 詳細は、セクション6.3.2「暗号化された接続 TLS プロトコルおよび暗号」を参照してください。 このオプションは、DISABLED に設定されていない ssl-mode オプションに依存します。

  • tls-versions : 暗号化された X プロトコル 接続に許可される TLS プロトコル。 tls-versions (plural) の値は、[TLSv1.2,TLSv1.3]などの配列です。 詳細は、セクション6.3.2「暗号化された接続 TLS プロトコルおよび暗号」を参照してください。 このオプションは、DISABLED に設定されていない ssl-mode オプションに依存します。

  • tls-ciphersuites: 許可される TLS 暗号スイート。 tls-ciphersuites の値は、「TLS 暗号スイート」にリストされている IANA 暗号スイート名のリストです。 詳細は、セクション6.3.2「暗号化された接続 TLS プロトコルおよび暗号」を参照してください。 このオプションは、DISABLED に設定されていない ssl-mode オプションに依存します。

  • auth-method: 接続に使用する認証方式。 デフォルトは AUTO で、サーバーは推測を試みます。 次のメソッドを使用できます:

    • AUTO

    • MYSQL41

    • SHA256_MEMORY

    • FROM_CAPABILITIES

    • FALLBACK

    • PLAIN

    X プロトコル 接続の場合、構成された auth-method は、この一連の認証方式にオーバーライドされます: MYSQL41, SHA256_MEMORY, PLAIN.

  • get-server-public-key: RSA キーペアベースのパスワード交換に必要な公開キーをサーバーにリクエストします。 SSL モード DISABLED を使用して クラシック MySQL プロトコル 経由で MySQL 8.0 サーバーに接続する場合に使用します。 この場合、プロトコルを指定する必要があります。 例:

    mysql://user@localhost:3306?get-server-public-key=true

    このオプションは、caching_sha2_password 認証プラグインで認証されるクライアントに適用されます。 そのプラグインの場合、サーバーは要求されないかぎり公開鍵を送信しません。 このオプションは、そのプラグインで認証されないアカウントでは無視されます。 クライアントがセキュアな接続を使用してサーバーに接続する場合と同様に、RSA ベースのパスワード交換を使用しない場合も無視されます。

    server-public-key-path=file_name が指定され、有効な公開キーファイルが指定されている場合は、get-server-public-key よりも優先されます。

    caching_sha2_password プラグインの詳細は、セクション6.4.1.2「SHA-2 プラガブル認証のキャッシュ」 を参照してください。

  • server-public-key-path: RSA キーペアベースのパスワード交換のためにサーバーが必要とする公開キーのクライアント側コピーを含む、PEM 形式のファイルへのパス名。 SSL モード DISABLED を使用して クラシック MySQL プロトコル 経由で MySQL 8.0 サーバーに接続する場合に使用します。

    このオプションは、sha256_password または caching_sha2_password 認証プラグインで認証されるクライアントに適用されます。 これらのプラグインのいずれかで認証されないアカウントでは、このオプションは無視されます。 クライアントがセキュアな接続を使用してサーバーに接続する場合と同様に、RSA ベースのパスワード交換を使用しない場合も無視されます。

    server-public-key-path=file_name が指定され、有効な公開キーファイルが指定されている場合は、get-server-public-key よりも優先されます。

    sha256_password および caching_sha2_password プラグインの詳細は、セクション6.4.1.3「SHA-256 プラガブル認証」 および セクション6.4.1.2「SHA-2 プラガブル認証のキャッシュ」 を参照してください。

  • connect-timeout : クライアント ( MySQL Shell など) が応答しない MySQL サーバーへの接続の試行を停止するまで待機する秒数を構成するために使用される整数値。

  • compression: このオプションは、接続の圧縮をリクエストまたは無効化します。 MySQL 8.0.19 までは、クラシック MySQL プロトコル 接続に対してのみ動作し、MySQL 8.0.20 からは X プロトコル 接続に対しても動作します。

    • MySQL 8.0.19 まで、このオプションの値は、圧縮を有効にする true (または 1) と、圧縮を無効にするデフォルトの false (または 0) です。

    • MySQL 8.0.20 からは、このオプションの値は required で、圧縮をリクエストしてサーバーがサポートしていない場合は失敗し、preferred では圧縮をリクエストして圧縮されていない接続にフォールバックし、disabled では圧縮されていない接続をリクエストしていない場合は失敗します。preferred は X プロトコル 接続のデフォルトで、disabled は クラシック MySQL プロトコル 接続のデフォルトです。 X プラグイン の接続圧縮制御の詳細は、セクション20.5.5「X プラグイン での接続圧縮」 を参照してください。

    MySQL クライアントごとに、接続圧縮のサポートが異なることに注意してください。 詳細は、クライアントのドキュメントを参照してください。

  • compression-algorithms および compression-level : これらのオプションは、接続の圧縮をより詳細に制御するために MySQL Shell 8.0.20 以降で使用できます。 これらを指定して、接続に使用される圧縮アルゴリズムと、そのアルゴリズムで使用される数値圧縮レベルを選択できます。 compression のかわりに compression-algorithms を使用して、接続の圧縮をリクエストすることもできます。 MySQL Shell の接続圧縮制御の詳細は、圧縮接続の使用 を参照してください。

  • connection-attributes: 接続時にアプリケーションプログラムがサーバーに渡すキーと値のペアを制御します。 接続属性の一般情報は、セクション27.12.9「パフォーマンススキーマ接続属性テーブル」 を参照してください。 クライアントは通常、属性のデフォルトセットを定義します。これは無効または有効にできます。 例:

    mysqlx://user@host?connection-attributes
    mysqlx://user@host?connection-attributes=true
    mysqlx://user@host?connection-attributes=false

    デフォルトの動作では、デフォルトの属性セットが送信されます。 アプリケーションでは、デフォルト属性に加えて渡される属性を指定できます。 追加の接続属性は、接続文字列の connection-attributes パラメータとして指定します。 connection-attributes パラメータ値は空 (true の指定と同じ)、Boolean 値 (デフォルトの属性セットを有効または無効にする true または false) またはカンマで区切られたリストまたはゼロ以上の key=value 指定子 (デフォルトの属性セットに加えて送信される) である必要があります。 リスト内では、欠落しているキー値は空の文字列として評価されます。 その他の例:

    mysqlx://user@host?connection-attributes=[attr1=val1,attr2,attr3=]
    mysqlx://user@host?connection-attributes=[]

    アプリケーション定義の属性名は内部属性用に予約されているため、_で始めることはできません。

URI 類似の接続文字列を使用した接続

URI のような文字列を使用して、MySQL Server への接続を指定できます。 このような文字列は、MySQL Shell で --uri コマンドオプション、MySQL Shell \connect コマンドおよび X DevAPI を実装する MySQL コネクタとともに使用できます。

注記

URI-like という用語は、RFC 3986 で定義されている URI (uniform resource identifier) 構文に似ているが同一ではない接続文字列構文を示します。

URI のような接続文字列の構文は次のとおりです:

[scheme://][user[:[password]]@]host[:port][/schema][?attribute1=value1&attribute2=value2...
重要

URI のような文字列の要素の予約文字には、パーセントエンコーディングを使用する必要があります。 たとえば、@文字を含む文字列を指定する場合は、その文字を %40 に置き換える必要があります。 IPv6 アドレスにゾーン ID を含める場合は、セパレータとして使用される % 文字を %25 に置き換える必要があります。

URI のような接続文字列で使用できるパラメータは、ベース接続パラメータ で説明されています。

MySQL Shellshell.parseUri() および shell.unparseUri() メソッドを使用して、URI のような接続文字列を分解およびアセンブルできます。 URI のような接続文字列が指定されると、shell.parseUri() は、文字列内で見つかった各要素を含むディクショナリを返します。shell.unparseUri() は、URI コンポーネントおよび接続オプションのディクショナリを、MySQL Shell または X DevAPI を実装する MySQL コネクタで使用できる MySQL に接続するための有効な URI のような接続文字列に変換します。

URI のような文字列にパスワードが指定されていない場合 (これをお薦めします)、対話型クライアントはパスワードの入力を求めます。 次の例は、ユーザー名 user_name を使用して URI のような文字列を指定する方法を示しています。 いずれの場合も、パスワードの入力を求められます。

  • ポート 33065 でリスニングしているローカルサーバーインスタンスへの X プロトコル 接続。

    mysqlx://user_name@localhost:33065
  • ポート 3333 でリスニングしているローカルサーバーインスタンスへの クラシック MySQL プロトコル 接続。

    mysql://user_name@localhost:3333
  • ホスト名、IPv4 アドレスおよび IPv6 アドレスを使用したリモートサーバーインスタンスへの X プロトコル 接続。

    mysqlx://user_name@server.example.com/
    mysqlx://user_name@198.51.100.14:123
    mysqlx://user_name@[2001:db8:85a3:8d3:1319:8a2e:370:7348]
  • パーセントエンコーディングまたはカッコを使用してパスが指定されたソケットを使用した X プロトコル 接続。

    mysqlx://user_name@/path%2Fto%2Fsocket.sock
    mysqlx://user_name@(/path/to/socket.sock)
  • データベースを表すオプションのパスを指定できます。

    # use 'world' as the default database
    mysqlx://user_name@198.51.100.1/world
    
    # use 'world_x' as the default database, encoding _ as %5F
    mysqlx://user_name@198.51.100.2:33060/world%5Fx
  • オプションのクエリーを指定できます。各クエリーは、key=value ペアまたは単一の key として指定された値で構成されます。 複数の値を指定するには、,文字で区切ります。 key=valuekey の値を混在させることができます。 値はリストタイプで、リスト値は外観順に並べられます。 文字列はパーセントでエンコードするか、カッコで囲む必要があります。 次は同等です。

    ssluser@127.0.0.1?ssl-ca=%2Froot%2Fclientcert%2Fca-cert.pem\
    &ssl-cert=%2Froot%2Fclientcert%2Fclient-cert.pem\
    &ssl-key=%2Froot%2Fclientcert%2Fclient-key
    
    ssluser@127.0.0.1?ssl-ca=(/root/clientcert/ca-cert.pem)\
    &ssl-cert=(/root/clientcert/client-cert.pem)\
    &ssl-key=(/root/clientcert/client-key)
  • 暗号化された接続に使用する TLS バージョンおよび暗号スイートを指定するには:

    mysql://user_name@198.51.100.2:3306/world%5Fx?\
    tls-versions=[TLSv1.2,TLSv1.3]&tls-ciphersuites=[TLS_DHE_PSK_WITH_AES_128_\
    GCM_SHA256, TLS_CHACHA20_POLY1305_SHA256]

前述の例では、接続にパスワードが必要であることを前提としています。 対話型クライアントでは、ログインプロンプトで指定されたユーザーパスワードが要求されます。 ユーザーアカウントにパスワードがない場合 (セキュアではなく推奨されません)、またはソケットピア資格証明認証が使用されている場合 (Unix ソケット接続など)、接続文字列にパスワードが指定されておらず、パスワードプロンプトが不要であることを明示的に指定する必要があります。 これを行うには、文字列の user_name の後に:を配置しますが、その後にパスワードを指定しないでください。 例:

mysqlx://user_name:@localhost

キーと値のペアを使用した接続

MySQL Shell および X DevAPI を実装する一部の MySQL コネクタでは、実装用の言語自然構造で提供されるキーと値のペアを使用して MySQL Server への接続を指定できます。 たとえば、キーと値のペアを JavaScript の JSON オブジェクトとして、または Python のディクショナリとして使用して、接続パラメータを指定できます。 キーと値のペアの提供方法に関係なく、概念は変わりません: このセクションで説明するキーには、接続の指定に使用される値を割り当てることができます。 MySQL Shellshell.connect() メソッドまたは InnoDB クラスタdba.createCluster() メソッド、および X DevAPI を実装する MySQL コネクタの一部でキーと値のペアを使用して接続を指定できます。

通常、キーと値のペアは {文字と} 文字で囲まれ、,文字はキーと値のペア間のセパレータとして使用されます。 :文字はキーと値の間で使用され、文字列は ('文字を使用するなどして) 区切る必要があります。 URI のような接続文字列とは異なり、文字列をパーセントエンコードする必要はありません。

キーと値のペアとして指定される接続の形式は次のとおりです:

{ key: value, key: value, ...}

接続のキーとして使用できるパラメータは、ベース接続パラメータ で説明されています。

キーと値のペアにパスワードが指定されていない場合 (これをお薦めします)、対話型クライアントはパスワードの入力を求めます。 次の例は、ユーザー名が'user_name'のキーと値のペアを使用して接続を指定する方法を示しています。 いずれの場合も、パスワードの入力を求められます。

  • ポート 33065 でリスニングしているローカルサーバーインスタンスへの X プロトコル 接続。

    {user:'user_name', host:'localhost', port:33065}
  • ポート 3333 でリスニングしているローカルサーバーインスタンスへの クラシック MySQL プロトコル 接続。

    {user:'user_name', host:'localhost', port:3333}
  • ホスト名、IPv4 アドレスおよび IPv6 アドレスを使用したリモートサーバーインスタンスへの X プロトコル 接続。

    {user:'user_name', host:'server.example.com'}
    {user:'user_name', host:198.51.100.14:123}
    {user:'user_name', host:[2001:db8:85a3:8d3:1319:8a2e:370:7348]}
  • ソケットを使用した X プロトコル 接続。

    {user:'user_name', socket:'/path/to/socket/file'}
  • データベースを表すオプションのスキーマを指定できます。

    {user:'user_name', host:'localhost', schema:'world'}

前述の例では、接続にパスワードが必要であることを前提としています。 対話型クライアントでは、ログインプロンプトで指定されたユーザーパスワードが要求されます。 ユーザーアカウントにパスワードがない (セキュリティー保護されておらず、推奨されていない) 場合、またはソケットピア資格証明認証が使用されている (Unix ソケット接続など) 場合は、パスワードが提供されず、パスワードプロンプトが不要であることを明示的に指定する必要があります。 これを行うには、password キーの後に''を使用して空の文字列を指定します。 例:

{user:'user_name', password:'', host:'localhost'}

関連キーワード:  接続, user, プロトコル, キー, サーバー, ペア, パスワード, 圧縮, パラメータ, key