このセクションでは、URI のような接続文字列またはキーと値のペアを使用して、MySQL Shell などのクライアントに対して MySQL サーバーへの接続を確立する方法を指定する方法について説明します。 mysql や mysqldump などのクライアント用のコマンドラインオプションを使用した接続の確立の詳細は、セクション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 などのループバックアドレスを表すと想定される点で異なります。
?
を追加して URI のような文字列の属性として、またはキーと値のペアとして、接続のオプションを指定できます。 次のオプションを使用できます。
attribute=value
-
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 のような文字列を使用して、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
=value
key
の値を混在させることができます。 値はリストタイプで、リスト値は外観順に並べられます。 文字列はパーセントでエンコードするか、カッコで囲む必要があります。 次は同等です。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'}