MariaDB講座 / ローカル・リモート接続のエラーを切り分ける

接続問題は、サーバー到達性、アドレスと方式、アカウントの一致、認証、DB権限の順に切り分けます。リモートでは待ち受け、ネットワーク、Hostと暗号化も必要で、まず既知のローカルTCP接続を確認します。

どの段階で失敗したかを分ける

症状 最初に調べる場所
Command not found 実行ファイルとPATH
拒否・タイムアウト サーバー稼働、住所、ポートと経路
Access denied ユーザー、Host、認証方式とパスワード
Unknown database 実際のサーバーとDB名
TLS検証エラー サーバー名、信頼するCA、証明書

クライアントの導入やODBCドライバーだけではサーバー稼働の証拠になりません。Windows・Ubuntuで部品とサービスを確認し、接続後の許可範囲は権限で分けて検証します。

ローカルTCPを明示して確認する

同じPCの3306という前提です。実際のポートへ読み替え、パスワードは求められてから入力します。

mariadb --protocol=tcp --host=127.0.0.1 --port=3306 --user=course_user --password --default-character-set=utf8mb4 shopcourse

接続内で確認します。

SELECT VERSION(),@@hostname,@@port,DATABASE();
SELECT USER(),CURRENT_USER();
SHOW GRANTS;

版、サーバー名、ポート、DBとCURRENT_USER()を読みます。localhostは環境・設定でsocketや名前付きパイプなどになり得るため、ここではTCPと127.0.0.1を明示します。

認証後に実データの権限も試す

products_44_labが未使用か確認して、実習アカウントで完全な例を作ります。

USE shopcourse;
CREATE TABLE products_44_lab (
  product_id INT NOT NULL AUTO_INCREMENT,
  product_name VARCHAR(100) NOT NULL,
  category VARCHAR(30) NOT NULL,
  price DECIMAL(10,2) NOT NULL,
  stock INT NOT NULL DEFAULT 0,
  note VARCHAR(100) NULL DEFAULT NULL,
  PRIMARY KEY (product_id),
  CONSTRAINT ck_p44_price CHECK (price >= 0),
  CONSTRAINT ck_p44_stock CHECK (stock >= 0)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO products_44_lab (product_id,product_name,category,price,stock,note) VALUES (1, '노트', '문구', 3500.00, 20, NULL),
  (2, '볼펜', '문구', 1500.00, 0, ''),
  (3, '머그컵', '생활', 8000.00, 12, '선물 포장'),
  (4, '스탠드', '생활', 25000.00, 5, NULL),
  (5, '파일', '문구', 1500.00, 50, ''),
  (6, '케이블', '전자', 8000.00, 0, '호환 확인');

商品名は韓国語の原データです。ID1~6を基準に、UTF-8で保存・接続します。

SELECT COUNT(*) FROM products_44_lab;

件数は6です。SELECT 1が成功しても目的のDB・表の全操作ができるとは限りません。診断ではコードと秘密を除いたエラーを記録します。

必要なインターフェースと経路だけを許可する

実際のプライベートアドレス、ポート、許可する接続元とTLS方針を確認します。Ubuntuの例は/etc/mysql/mariadb.conf.d/50-server.cnfですが、実際に読まれる設定を調べ、元のファイルを保存してから変更します。

[mariadbd]
bind-address = 10.0.0.10
port = 3306

10.0.0.10は例で、自分のサーバーに存在するとは限りません。実インターフェースを指定し、ネットワークとアカウントも必要範囲だけ許可します。再起動の影響と戻し方を準備します。パケットが届くことと、アカウントHostの一致は別です。

リモート証明書と接続元を検証する

実在する解決可能なサーバー名と信頼するCAファイルへ変更します。証明書の名前が接続名と一致する必要があります。

mariadb --protocol=tcp --host=db.example.internal --port=3306 --user=app_user --password --ssl --ssl-verify-server-cert --ssl-ca=C:/mariadb-lab/ca.pem

ローカル成功はリモート経路やTLSの正しさを証明しません。承認されたSSHトンネルやVPNでも、サーバーに見える接続元と一致アカウントを調べます。広い待ち受け、ワイルドカードHostや証明書検証の無効化を習慣的な解決策にしないでください。

元の設定へ戻せる記録を残す

到達できなければDNS、接続元、待ち受け、ポートとファイアウォールを確認します。その後に認証、DBと表の権限を調べます。変更値と元値、ファイル、再起動を記録し、前の方針へ戻せるようにします。必要な行を保存し、この実習表だけを削除します。

DROP TABLE shopcourse.products_44_lab;

関連する公式リファレンス