元の用途:接続済みMySQLで既定DBを選ぶ
この記事の元のUSE データベース名;は、同じ接続の既定DBを選ぶ操作です。別サーバーへログインし直す操作ではありません。先にサーバーへ接続し、必要ならDB一覧を確認します。通常title/URL/親カテゴリを変えずにこの用途を戻しています。
同名の表がある2つのDBで確認する
以下は隔離検体の2DBにitemsを用意した読取例です。実データを作る手順ではなく、cwiki_w29_a/bは対象に置換します。CREATE/INSERTは別の検体準備として分離しています。SELECTの対象が変わることを、更新SQLではなく保存済みの目印で確認します。
USE cwiki_w29_a;
SELECT DATABASE() AS default_database, CONNECTION_ID() AS connection_id;
SELECT id, note FROM items ORDER BY id;
SELECT id, note FROM cwiki_w29_b.items ORDER BY id;
SELECT DATABASE() AS still_default_database;
検体では非修飾itemsはfrom_a、cwiki_w29_b.itemsはfrom_bを返しました。最後のDATABASE()はaのままで、修飾名を使ったSELECTだけでは既定DBは変わりません。USEの前後で接続IDも変わりませんでした。bへUSEすると以降の非修飾itemsがbを参照します。
新しい接続・失敗・接続poolを区別する
- 初期DBを指定しない新規接続ではDATABASE()がNULLになり、非修飾SHOW TABLESは1046になりました。DBをFROMで指定する読取は、権限があれば既定DB未選択でも実行できます。
- 検体の管理用接続で存在しないDBのUSEは1049、readerで権限がないDBは1044になり、失敗前に選んだaはそのままでした。エラーは権限/接続条件にも依存するため、コードだけで全対象の存在/不存在を断定しません。失敗を無視して書込みを続けず、戻り値と接続状態を確認します。
- 別接続のUSEは他の接続の既定DBを変えません。CLIで変えたDBがアプリの全接続へ反映されるわけではありません。
- 接続pool/再接続では接続ごとの初期化/再利用規約を確認します。今回の2接続検体は全driver/全poolの初期化動作を保証しません。
識別子とデータ値を混同しない
DB名は識別子です。SQL値用のplaceholderへDB名を渡せば任意識別子も安全に使える、とは考えません。固定の許可済みDB名/接続設定を使い、入力からUSE文を文字列連結しません。MySQL/MariaDBの名前の引用とPG等の接続先変更の文法も分けます。識別子のquoteだけでは、そのDBを選んでよい認可の代わりになりません。
選択後に確認するもの
SELECT DATABASE();と接続IDを必要な範囲で確認し、表/ビューの一覧や定義へ進みます。USEは表データの変更やschema作成ではなく、権限の追加でもありません。DBを選べても全表のSELECT/更新が許可されたとは限りません。
既存の一般接続・他製品例について
以下のMySQL/PG/SSH/Docker接続資料は補足として保持します。PGのpsql \cはMySQLのUSEとは異なる接続操作です。パスワード平文の引数/URI/環境変数、TLS停止、設定上書き、dumpへの上書き/リストア、広いpkill、ユーザー/権限変更は、DB選択のために行いません。MySQL/PGのTLSやpassfileもOS/driver/版によって条件が異なり、0600だけで秘密情報の全保護が完了したとは扱いません。
既存の接続・一覧資料(製品別の補足)
| この記事の要点 |
|
MySQL クライアント接続
旧例の注意:MySQLへのサーバー接続資料です。USEによるDB選択とは別です。平文passwordやSQL/dumpの実行・ファイル上書きを選択確認のために行いません。
# 基本形
mysql -h localhost -P 3306 -u root -p mydb
# 短縮形
mysql -uroot -p # ローカル、root、パスワード対話入力
mysql -uroot -ppassword # ★ パスワードを直接(履歴に残るので非推奨)
# DB を選んで接続
mysql -uroot -p mydb
# Socket 経由(ローカル接続)
mysql -uroot -p -S /var/run/mysqld/mysqld.sock
# クエリを直接実行
mysql -uroot -p mydb -e "SELECT VERSION();"
# ファイルから実行
mysql -uroot -p mydb < script.sql
# ダンプリストア
mysql -uroot -p mydb < dump.sql
mysqldump -uroot -p mydb > dump.sql
パスワードを安全に渡す
~/.my.cnf に書く
旧例の注意:固定root/passwordの設定例です。既存設定を書き換えず、ファイル権限だけで全保護と扱いません。「引数なし」は認証なしの意味ではありません。
# ~/.my.cnf (chmod 600 必須)
[client]
host=localhost
port=3306
user=root
password=mysecret
default-character-set=utf8mb4
[mysql]
prompt=mysql [\d]>
# これで認証情報なしで接続可能
# $ mysql mydb旧例の注意:defaults-fileとsecretの供給はOS/版に合わせます。MYSQL_PWDを新しい推奨方法にせず、環境変数やログへの露出にも注意します。
# パーミッション設定(他ユーザーに読ませない)
chmod 600 ~/.my.cnf
# 別ファイルを使う
mysql --defaults-file=~/.my-prod.cnf
# 環境変数 (MySQL 8.0+ では非推奨)
export MYSQL_PWD=secret
mysql -uroot mydb # ★ プロセスリストに見える可能性あり、推奨しない
PostgreSQL クライアント接続
旧例の注意:PGのpsqlは別接続操作です。URIのpasswordやdump上書き/復元をUSEの手順にしません。PGの実接続は今回の検証外です。
# 基本形
psql -h localhost -p 5432 -U postgres -d mydb
# Unix socket 経由(同一マシン)
psql -d mydb
psql mydb
# クエリを直接実行
psql -U postgres -d mydb -c "SELECT version();"
# ファイルから実行
psql -U postgres -d mydb -f script.sql
# ダンプリストア
pg_dump -U postgres mydb > dump.sql
psql -U postgres mydb < dump.sql
# 接続 URI 形式(PG 9.2+)
psql "postgresql://user:pass@host:5432/dbname?sslmode=require"
~/.pgpass で認証情報を保存
旧例の注意:PG passfileの照合順/対象とOS別の保護を確認します。wildcardを必要以上に広げず、秘密値をソースに残しません。
# ~/.pgpass フォーマット
# hostname:port:database:username:password
localhost:5432:mydb:postgres:mysecret
prod-db.example.com:5432:*:admin:prodpass
*:*:*:replication:replpass
# パーミッション必須 (0600)
$ chmod 600 ~/.pgpass
# 環境変数で別ファイル指定
export PGPASSFILE=/secrets/pgpass旧例の注意:PGの環境変数はプロセス/運用の露出条件を確認します。PGPASSWORDを無条件の推奨とせず、ログ/共有コマンドへ入れません。
# 環境変数による接続
export PGHOST=localhost
export PGPORT=5432
export PGUSER=postgres
export PGDATABASE=mydb
psql # 引数なしで接続
# 1 回だけパスワード渡す
PGPASSWORD=mysecret psql -U postgres -d mydb
psql の便利コマンド
旧例の注意:psql専用のメタコマンドで、SQL driverへ送信できる共通SQLではありません。\cによる接続とUSEを区別します。
\l -- データベース一覧
\c dbname -- DB 切替
\dt -- テーブル一覧
\d tablename -- テーブル定義
\dn -- スキーマ一覧
\du -- ユーザー一覧
\df -- 関数一覧
\dv -- ビュー一覧
\x -- 拡張表示切替(縦表示)
\timing -- 実行時間表示 ON/OFF
\e -- $EDITOR でクエリ編集
\i file.sql -- ファイル実行
\copy t TO 'f.csv' CSV HEADER -- CSV エクスポート
\q -- 終了
\? -- メタコマンドヘルプ
\h SELECT -- SQL 構文ヘルプ
SSL / TLS 接続
MySQL の SSL
旧例の注意:MySQL CLIのモードです。CA/名前検証と暗号化を区別し、証明書/対応版を確認します。SHOW STATUSはSQLとして別に実行します。
# SSL 必須で接続
mysql -h db.example.com -uadmin -p \
--ssl-mode=REQUIRED
# 証明書検証付き
mysql -h db.example.com -uadmin -p \
--ssl-mode=VERIFY_IDENTITY \
--ssl-ca=/etc/mysql/ca.pem
# モード一覧:
# DISABLED - SSL 不使用
# PREFERRED - 使えるなら使う(既定)
# REQUIRED - 必須。証明書チェックなし
# VERIFY_CA - CA 検証
# VERIFY_IDENTITY - CA + ホスト名検証(最強)
# 接続状態確認
SHOW STATUS LIKE 'Ssl_cipher';
-- Ssl_cipher | TLS_AES_256_GCM_SHA384
PostgreSQL の SSL
旧例の注意:PGのTLS設定はMySQLのオプションとは別です。requireを名前検証成功の保証とせず、pg_stat_sslの可視範囲も確認します。
# 接続文字列で指定
psql "host=db.example.com port=5432 dbname=mydb user=admin sslmode=require"
# sslmode の選択肢:
# disable - SSL 不使用
# allow - 平文 → SSL 試行
# prefer - SSL 優先(既定)
# require - SSL 必須
# verify-ca - CA 検証
# verify-full - CA + ホスト名検証
# 証明書ファイル指定
psql "host=db.example.com dbname=mydb user=admin \
sslmode=verify-full \
sslrootcert=/etc/ssl/postgres/ca.crt"
# 接続状態確認
SELECT * FROM pg_stat_ssl WHERE pid = pg_backend_pid();
SSH トンネル経由の接続
DB が外部に公開されていない場合(推奨)、踏み台サーバー経由で接続します:
旧例の注意:既存転送やSSH設定を変更せず、広いpkillパターンも実行しません。トンネルだけでDB側TLS/認可/全区間保護が完了したとは扱いません。
# ローカル 13306 → 踏み台 → DB の 3306 にトンネル
ssh -L 13306:db.internal:3306 -N -f bastion.example.com
# ローカルから普通の mysql で接続
mysql -h 127.0.0.1 -P 13306 -uadmin -p mydb
# PG の場合
ssh -L 15432:pg.internal:5432 -N -f bastion.example.com
psql -h 127.0.0.1 -p 15432 -U admin -d mydb
# 接続テスト後にバックグラウンドの ssh を止める
pkill -f "ssh -L 13306"
# ~/.ssh/config に書く
# Host db-tunnel
# HostName bastion.example.com
# LocalForward 13306 db.internal:3306
# LocalForward 15432 pg.internal:5432
# User myuser
$ ssh -N -f db-tunnel
Docker コンテナ内の DB に接続
旧例の注意:Dockerのhost network/公開portや資格情報を自動変更しません。固定password引数のdumpや出力先の上書きは接続選択の確認に不要です。
# コンテナ内の mysql クライアントで接続
docker exec -it mysql-container mysql -uroot -p mydb
# ホスト側にクライアントだけある場合
docker run --rm -it --network=host mysql:8 mysql -h 127.0.0.1 -uroot -p
# docker-compose の DB に接続
docker-compose exec db mysql -uroot -p mydb
docker-compose exec db psql -U postgres mydb
# ホスト OS から直接(コンテナのポートを公開している前提)
mysql -h 127.0.0.1 -P 3306 -uroot -p mydb
psql -h 127.0.0.1 -p 5432 -U postgres mydb
# データダンプを取る
docker exec mysql-container mysqldump -uroot -pmysecret mydb > dump.sql
docker exec pg-container pg_dump -U postgres mydb > dump.sql
接続できないときのチェック
| 症状 | 原因 | 対処 |
|---|---|---|
Can't connect to MySQL server on '...' | ホスト名 / ポート / FW | nc -vz host 3306 で疎通確認 |
Access denied for user 'x'@'y' | ユーザー / パスワード / 接続元 IP | 接続先/提示利用者と照合アカウント/認証方式を確認。一覧のためにmysql.*権限を追加しない |
no pg_hba.conf entry for host | PG の認証設定未許可 | 接続先/対象DB/アカウント・接続元/TLSと既存ポリシーを管理者が確認。認証設定を自動変更しない |
connection timeout | FW / Security Group | AWS なら SG、Linux なら iptables |
SSL connection error | SSL 設定不一致 | TLSを停止せず、CA/接続名/期限/対応版と拒否理由を確認 |
権限とユーザー作成
旧例の注意:CREATE USER/GRANT/ALTER DEFAULT PRIVILEGESは管理操作で、USEの準備ではありません。%や既定権限の追加、FLUSHを本番へ自動適用しません。
-- MySQL
CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPass123';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
-- 確認
SHOW GRANTS FOR 'appuser'@'%';
-- PostgreSQL
CREATE USER appuser WITH PASSWORD 'AppPass123';
GRANT CONNECT ON DATABASE mydb TO appuser;
GRANT USAGE ON SCHEMA public TO appuser;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO appuser;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO appuser;
-- 確認
\du appuser
FAQ
Q: パスワードをコマンドラインに書きたくない
A: MySQL は ~/.my.cnf、PG は ~/.pgpass に保存。どちらも chmod 600 必須。
Q: 本番 DB に直接接続して大丈夫?
A: SSH トンネル経由 + 読み取り専用ユーザーが鉄則。本番更新は必ずレビュー付きのスクリプトで。
Q: GUI クライアントは何が良い?
A: DBeaver(対象製品/driver/版とlicenseを個別確認)、TablePlus(有料・UI 良)、HeidiSQL(対応製品/版を確認)、pgAdmin(PG 公式)が定番。
元の書式付きコマンド
元例の注意:元のコマンド表示です。DB名は置換箇所で、既定DB/接続先/権限を確認します。表一覧は未選択ならFROM指定を使い、USEはサーバーへの再接続とは区別します。
| use データベース名 |
検証範囲と一次資料
新規の小規模MySQL8.4.13/MariaDB11.8.9検体の同一接続/別接続、限定権限と各製品の同梱CLIで検証した範囲です。全言語driver/GUI/接続pool/実SSH経路/各OSの導入や証明書運用・PG/Oracle/SQL Serverの旧例の実行成功を保証しません。本番のschema/認証/設定を変更していません。
- MySQL8.4 USE / SHOW DATABASES / SHOW TABLES
- MySQL接続/TLSオプション / LIKE/ESCAPE
- MariaDB Zero-Configuration SSL / MariaDB SHOW TABLES / PostgreSQL18 psql / Azure Data Studio廃止
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09