# データベースへのリモート接続

Source: https://support.kapsulehost.com/ja-jp/database-remote-access

データベースの認証情報の確認方法、ポート3306への直接のリモート接続が拒否される理由、そしてデスクトップツールをSSHトンネル経由で接続する方法について説明します。

データベースを使用するすべてのKapsuleHostウェブホスティングサイトには、専用のデータベース、専用のデータベースユーザー、そしていつでも確認できる認証情報が付属します。できないのは、インターネット経由で直接接続することです。これは意図的な制限です。本ガイドでは、認証情報、サポートされている2種類の接続方法、そしてデスクトップのデータベースツールに必要なトンネルの設定方法を解説します。

## 認証情報の確認方法

**ウェブサイト** に移動し、サイトをクリックしてから **データベース** をクリックします。

このページには以下の5つの項目が表示されます。

| 項目 | 値 |
|---|---|
| ホスト | `127.0.0.1` |
| ポート | `3306` |
| データベース | お使いのデータベース名 |
| ユーザー名 | お使いのデータベースユーザー |
| パスワード | マスク表示(表示ボタンとコピーボタンあり) |

パスワードは一度きりの表示ではありません。必要なときにいつでも戻って確認できるため、別途保存しておく必要はありません。

データベースサーバーはMariaDB 10.11で、MySQLと互換性があります。これが実務上重要になる点が1つあります。最近のバージョンのMySQLからエクスポートしたダンプには、MariaDBが認識しない照合順序(コレーション)が含まれていることがあり、インポート時に「unknown collation」エラーで失敗します。これが発生した場合は、`utf8mb4_unicode_ci`のような広く互換性のある照合順序で再エクスポートするか、インポート前にダンプファイル内を検索置換してください。

![KPanel内のサイトのDatabaseタブ。データベース接続の詳細が表示されている](https://support.kapsulehost.com/help/screenshots/database-remote-access.84df4ba6.webp)

## ホストが127.0.0.1である理由

`127.0.0.1`は「このマシン自身」を意味します。データベースサーバーはマシン自身の内部インターフェースでのみ待ち受けており、ファイアウォールでもポート3306はインターネットに対して開放されていません。パネル上でこれを開放する設定はなく、これに対するIP許可リストもありません。

これは見落としではありません。インターネットに公開されたデータベースポートは、ホスティングにおいて最も確実に悪用される要素の一つです。常時スキャンされ、接続してきた相手にバージョン情報が漏れ、パスワードが一つでも弱ければサイト全体を失うことになります。閉じたままにしておくことで、この種のリスクをまるごと取り除いています。

したがって、サイトの公開IPアドレスとポート3306を使った接続文字列は、どのプランでも、どこからであっても、必ず失敗します。代わりにサポートされている接続方法が2つ用意されています。

## オプション1: ブラウザでのphpMyAdmin

ちょっとした確認、編集、小規模なインポートやエクスポートに最も手軽な方法です。

Databaseページで **phpMyAdmin を開く** をクリックします。サイト自身の認証情報で自動的にサインインされ、自分のデータベースのみが表示されます。

このリンクは意図的に短時間で失効するようになっており、エラーのように見えても実際にはエラーではない動作をします。

- **60秒で失効します。** 表示されたらすぐにクリックしてください。
- **一度しか使えません。** 戻って再読み込みしても動作しません。新しいリンクを生成してください。
- **リクエストしたのと同じブラウザ、同じネットワークから開く必要があります。** リンクを別の端末にコピーした場合や、接続の途中でアドレスが変わった場合は拒否されます。

「This link has already been used」や、IPの不一致に関するメッセージが表示された場合は、保護機能が正しく働いている証拠です。Databaseページに戻ってボタンをもう一度クリックしてください。

phpMyAdmin自体の使い方については、[phpMyAdminの使い方](https://support.kapsulehost.com/ja-jp/sites-phpmyadmin)をご覧ください。

## オプション2: デスクトップツール用のSSHトンネル

デスクトップクライアントを使いたい場合は、こちらがサポートされている方法です。トンネルはサーバーへの暗号化された接続を開き、お使いのマシン上のポートをその接続越しに転送します。これにより、クライアントからはあたかもローカルのデータベースに接続しているように見えます。

### 事前に必要なもの

サイトに登録されたSSHキーです。パスワード認証は受け付けられないため、この手順は省略できません。

1. **ウェブサイト** からサイトを選び、**設定**、続いて **SSH キー** に移動します。
2. すでにお使いの公開鍵を貼り付けるか、パネルから新しい鍵ペアを生成します。
3. そのページに表示されているユーザー名を控えてください。これはサイトのシステムユーザーであり、接続時に使用するものです。

パネルで鍵を生成した場合、**秘密鍵は一度だけ表示され、二度と表示されません**。その場ですぐに保存し、自分だけが読み取れる場所に保管してください。

サイトに鍵が追加されるたびにメールが届きます。これは意図的な仕様です。もし自分で追加していないのにメールが届いた場合は、そのページからすぐに取り消し、[サイトが乗っ取られた場合](https://support.kapsulehost.com/ja-jp/site-hacked-what-to-do)をお読みください。

詳しい手順は[SSHキーの追加](https://support.kapsulehost.com/ja-jp/adding-ssh-keys)をご覧ください。

> **Warning:** SFTPタブで作成したSFTPアカウントは、トンネルには使用できません。これらのアカウントはファイル転送専用で、シェルもポート転送機能もありません。トンネルにはサイト自身の鍵を持つSSHユーザーが必要です。[SFTPアクセス](https://support.kapsulehost.com/ja-jp/sftp-access)をご覧ください。

### トンネルを開く

お使いのマシンのターミナルから、以下を実行します。

```sh
ssh -N -L 3307:127.0.0.1:3306 your-ssh-user@cp1-kapsule.kapsulehost.com
```

`your-ssh-user`の部分は、SSHキーのページに表示されているユーザー名に置き換えてください。内訳は次のとおりです。

- `-N`は、コマンドを実行せずトンネルを開いたままにすることを意味します。
- `-L 3307:127.0.0.1:3306`は、お使いのマシンのポート3307をサーバーのポート3306に転送します。
- 3306ではなくポート3307を使うのは、ローカルで動作している可能性のあるデータベースと衝突しないようにするためです。

正常に動作している場合、このコマンドは何も出力しません。それが正しい状態です。接続が必要な間はターミナルウィンドウを開いたままにし、閉じるにはCtrl+Cを押してください。

### クライアントを接続する

トンネルを開いた状態で、お使いのデータベースツールを以下の設定に向けます。

| 設定項目 | 値 |
|---|---|
| ホスト | `127.0.0.1` |
| ポート | `3307` |
| ユーザー名 | Databaseページに表示されているデータベースのユーザー名 |
| パスワード | Databaseページに表示されているデータベースのパスワード |
| データベース | お使いのデータベース名 |

ここでの使い分けに注意してください。**SSH**のユーザー名はサイトのシステムユーザーであり、**データベース**のユーザー名はDatabaseページに表示される別のものです。この2つを混同することが、ここで最もよくある間違いです。

多くのデスクトップクライアントには「SSHトンネル経由で接続」という組み込みオプションがあり、別途ターミナルを使わずに上記と同じことを実行できます。SSHホストに`cp1-kapsule.kapsulehost.com`、ポートに22、SSHユーザー名、秘密鍵ファイルを入力し、その後は上記のとおりデータベースの各項目を入力してください。

クライアントごとの設定手順は[データベースSSHトンネル](https://support.kapsulehost.com/ja-jp/database-ssh-tunnel)をご覧ください。

## サーバー上でのコマンドライン操作

ターミナル操作に慣れている場合は、そもそもトンネルは不要です。SSHで接続し、サーバー上で直接作業できます。

```sh
ssh your-ssh-user@cp1-kapsule.kapsulehost.com
mysqldump -u DBUSER -p DBNAME > backup.sql
```

これはトンネル経由で大きなデータベースを取得するよりもはるかに高速で、リスクのある変更を行う前に手動でダンプを取得する正しい方法でもあります。WordPressの場合は特に、[WP-CLI](https://support.kapsulehost.com/ja-jp/wordpress-wp-cli)の方がさらに優れていることがほとんどです。

## トラブルシューティング

**お使いのマシンからポート3306で「Connection refused」が出る。** 想定どおりの動作です。上記のとおり、トンネルを使用してください。

**トンネルのコマンドでパスワードを求められる。** 鍵が提示されていないか、インストールされていません。SSHキーのページに鍵が登録されているか確認し、コマンドに`-i /path/to/your/private/key`を追加してください。

**「Permission denied (publickey)」。** ユーザー名が間違っているか、鍵が間違っています。ユーザー名はSSHキーのページに表示されているものであり、KapsuleHostのログイン用メールアドレスではありません。

**ポート3307で「Address already in use」。** 既にトンネルが開いているか、他の何かがそのポートを使用しています。もう一方を閉じるか、3308など別のローカルポートを選んでください。

**トンネルは開くがクライアントが接続できない。** クライアントが、ドメインではなく`127.0.0.1`と選択したローカルポートに向けられているか確認してください。

**「Access denied for user」。** SSHではなくデータベースの認証情報の問題です。Databaseページからもう一度表示してコピーしてください。

**インポート時の「Unknown collation」。** 上記で説明したとおりです。互換性のある照合順序で再エクスポートしてください。

> **Important:** データベースクライアントで行った操作は即座に反映され、元に戻すことはできません。確認ステップもゴミ箱機能もありません。書き込みを伴う操作を実行する前には、必ずバックアップを取得してください。[バックアップの取得](https://support.kapsulehost.com/ja-jp/taking-a-backup)をご覧ください。

## 関連ガイド

- [phpMyAdminの使い方](https://support.kapsulehost.com/ja-jp/sites-phpmyadmin)
- [データベースSSHトンネル](https://support.kapsulehost.com/ja-jp/database-ssh-tunnel)
- [SSHキーの追加](https://support.kapsulehost.com/ja-jp/adding-ssh-keys)
- [SFTPアクセス](https://support.kapsulehost.com/ja-jp/sftp-access)
- [バックアップの取得](https://support.kapsulehost.com/ja-jp/taking-a-backup)
- [Websites](https://support.kapsulehost.com/ja-jp/sites-overview)
- [ホスティング用語集](https://support.kapsulehost.com/ja-jp/glossary)
