pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

Linux Mint で MariaDB 接続トラブル解消記(Rust対応)3

Linux Mint内のRustでMariaDB接続失敗原因のひとつが、MariaDB内の「外部接続」設定を行ってないことです。前2回の記事は既に読んでいただいている前提で、今回はMariaDB設定を確認・修正します。なお、環境は、Mint 22.3 / MariaDB 15.1 / Rust 1.93.1です。

Linux_Mint内でRust+MariaDB外部接続設定

Copilotから「外部接続済ませているの?」と問われ、確認方法を教えてもらいました。最初にする作業「bind-address確認・修正」は前回行いました。今回は、ユーザ名やパスワードなどの現状確認、必要なら追加修正の方法です。

Rust+localhost+MariaDBと接続、でもRust+TCP/IP+MariaDBは失敗

MariaDBに対し、Rust+localhostで接続成功、Rust+TCP/IP では失敗。これが、目の前の現実でした。

TCP/IP(192.168.x.x)の外部接続設定は、宅内LANの他PCからMariaDB利用するには必須です。なお、同一PC内でRust+MariaDB同居状態でも、外部接続をお勧めします。

DBeaverは、phpMyAdminなどと同じRDB管理ツールのひとつです。Web画面を使わず専用画面で操作します。phpMyAdminより軽快でPC負担も少ない印象です。DBeaverからMariaDBへは、localhost経由で「内部接続」できていました。これは、DBeaverが、localhostをUNIXソケットとして使っていた可能性が高いからで、TCP/IP接続(外部接続)が標準のRustとは異なる点です。

ココから先、ターミナル操作が出てきます。Linux、MariaDB、Rustなどでヒットしご来訪の皆さんですから、大丈夫ですよね。また、bind-addres(前回記事)は修正済みとして進行します。

Linuxターミナルで外部接続設定を確認、localhost、rootでMariaDBにログイン

最初は、root権限でログインし、外部接続の現状を確認し、必要なら追加設定します。なおrootは管理者権限です。実際の運用は外部接続用の別ユーザーをつくるのが安心です。Rust+localhost+MariaDBは、MariaDB側に127.0.0.1の許可があったため接続できていました。

MariaDBに管理者としてログインし、現状確認
  1. Linuxターミナル起動:画面最下部(パネル)の黒背景に少し白があるアイコンをクリック
  2. MariaDBにroot権限でログイン=次行 ※ 環境により異なる場合あり
    • mysql -h localhost -u root -p
    • 環境説明:爺使用中のLinux Mint 22.3 の MariaDB では、rootの認証方式が、「mysql_native_password(パスワード方式)」になっている ← このあたりCopilotに教えていただき知りました。
    • 本来は「sudo mysql」ログインの構成が、 Linux Mint仕様にMariaDB側が合わせた(自動?)結果。
  3. root と対になったパスワード入力。入力しても何も表示されないので慎重に。
  4. Wellcome to ....の表示で、MariaDB管理者ログイン成功。ここを通過できないと先に進めない=これまでの作業見直し
  5. Linuxターミナル、最後行が MariaDBコマンド受付モードになっています。
  6. この時点で登録されているユーザ名とアクセス可能Hostを表示させる=次行
    • (MariaDBのコマンドライン)SELECT user, host FROM mysql.user;

表示結果でHostにlocalhostだけなら、外部接続設定の「通行手形」ができてない。なお、%表示がある場合は、user名とパスワードがわかれば接続用「通行手形」があることに...。ご自身がいつか設定したメモを用意し、RustからMariaDB接続を試す条件がひとつできました。このあとは、Rust内の具体的な接続設定・読み書き用記述を間違えなければ、接続運用ができることになります。

なお、「%」だけの表示は、「%.%.%.%」を簡略表示したもので、どこからのアクセスもウェルカムな設定です。安全のため、宅内LANであれば「192.168.%.%」などとしておくのが安全な選択です。

一方、Hostにlocalhost以外なかったら、外部接続設定を追加します。LinuxターミナルがMariaDBのコマンドライン待受状態のまま、次の手順に移ります。

MariaDB外部接続ユーザ名などを設定

RustからMariaDBへ外部接続実現のため、MariaDBユーザ名設定などを行います。このあたり、設定値を忘れる可能性もあるので、メモをお勧めします。

  1. MariaDBコマンドラインのまま進行
  2. 実際に使用予定のuser名とpasswordを用意し次行を実行。'192.168.%'は宅内LANを想定。
    • CREATE USER 'user名'@'192.168.%' IDENTIFIED BY 'password';
  3. Query OK, 0 rows affected 表示で正常終了。
  4. 権限情報反映で、バッファをクリアし、リセット=次行(ただし、MariaDBでは必須ではない)
    • FLUSH PRIVILEGES;
  5. このあと、SELECT user, host FROM mysql.user; を実行すれば、結果が見える。
  6. MariaDBからLinuxコマンドラインへの戻る= exit; または quit;
  7. Linuxコマンドラインから、先程設定したユーザ名、パスワードと、MariaDB(があるPC)のTCP/IPの計3点を用意します。
  8. mysql -h 192.168.x,x -u ユーザ名 -p
  9. パスワード入力(入力してもカーソル移動しないので慎重に) [enter]

「Welcome to the MariaDB monitor...」が表示されたら、外部接続のためのユーザ設定は完了です。

次回以降必要事項

RustからMariaDB接続する際必要な事項は、他の言語などと同様です。およそ次のような項目と内容(例)です。

  • 接続ソケット番号 (例: 3306)
  • データベース名
  • ユーザ名
  • パスワード
  • Linux_MintのTCP/IP (例: 192.168.10.101)

メモを紙かプレーンテキストのファイルで作っておくと、次回以降便利です。

前回、関所の門が開いた状態になり、今回、通行手形を手に入れたので、いよいよ関所を通る段取りです。次回の記事で関所を通りたいRustの身支度(接続文字列など)の記事をupします。

余談:Copilotに教えてもらったRust+MariaDBのアレコレと爺の感想・妄想

次回の冒頭に載せると重たく感じる内容、または改めて必要な時に見直せばよい、という内容のRust+MariaDB接続のアレコレです。

MariaDB側の設定ができても、単に接続プログラム書けばOKとならないのがRustの実情です。クライアント、マクロ、依存関係など色々検討し選択することが多いです。いずれ、非同期+構造体+マクロ+DATABASE_URLを使うなら、TCP/IP一択になりそう、と爺の妄想です。そのような、よくわかってない暴走妄想痴呆老人の爺、腑に落ちないことをアレコレとCopilotに尋ねたです。その結果、次のようなことが判明...。

  • MariaDBに対し、多くのRust用クライアント(mysql crate / sqlx / sea-orm)は、localhostを127.0.0.1として渡す。つまりUNIXソケットを使わずTCP/IPで接続している:爺、これ教えてもらって「ガーン!」でした。
  • Rust+クライアントは、TCP/IP接続が標準で、非同期ランタイム(tokio)との相性もTCP/IPが前提:爺の妄想「Rust+MariaDB」では、TCP/IP一択は正解らしい
  • TCP/IP接続は、Docker、LAN、クラウドなどでも共通環境:爺は、127.0.0.1と192.168.x.xが特別なTCP/IPアドレスだというのを幸運にも知っててよかったです。
  • Rustを使い、非同期+構造体+マクロ+DATABASE_URL+TCP/IPで接続実現する前に、より簡易な方法で、接続を実現するのは、エラー要素を減らしてから目標に到達する正攻法:爺的には、道具選択や複雑なプログラムを書くことで悩む前に、経験済みのPythonなどに近い書き方が、身の丈に合うと妄想してました。何より、成功体験は大切。