- Linux_Mint内でRust+MariaDB外部接続設定
- Rust+localhost+MariaDBと接続、でもRust+TCP/IP+MariaDBは失敗
- Linuxターミナルで外部接続設定を確認、localhost、rootでMariaDBにログイン
- 次回以降必要事項
- 余談:Copilotに教えてもらったRust+MariaDBのアレコレと爺の感想・妄想
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に管理者としてログインし、現状確認
- Linuxターミナル起動:画面最下部(パネル)の黒背景に少し白があるアイコンをクリック
- MariaDBにroot権限でログイン=次行 ※ 環境により異なる場合あり
- mysql -h localhost -u root -p
- 環境説明:爺使用中のLinux Mint 22.3 の MariaDB では、rootの認証方式が、「mysql_native_password(パスワード方式)」になっている ← このあたりCopilotに教えていただき知りました。
- 本来は「sudo mysql」ログインの構成が、 Linux Mint仕様にMariaDB側が合わせた(自動?)結果。
- root と対になったパスワード入力。入力しても何も表示されないので慎重に。
- Wellcome to ....の表示で、MariaDB管理者ログイン成功。ここを通過できないと先に進めない=これまでの作業見直し
- Linuxターミナル、最後行が MariaDBコマンド受付モードになっています。
- この時点で登録されているユーザ名とアクセス可能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ユーザ名設定などを行います。このあたり、設定値を忘れる可能性もあるので、メモをお勧めします。
- MariaDBコマンドラインのまま進行
- 実際に使用予定のuser名とpasswordを用意し次行を実行。'192.168.%'は宅内LANを想定。
- CREATE USER 'user名'@'192.168.%' IDENTIFIED BY 'password';
- Query OK, 0 rows affected 表示で正常終了。
- 権限情報反映で、バッファをクリアし、リセット=次行(ただし、MariaDBでは必須ではない)
- FLUSH PRIVILEGES;
- このあと、SELECT user, host FROM mysql.user; を実行すれば、結果が見える。
- MariaDBからLinuxコマンドラインへの戻る= exit; または quit;
- Linuxコマンドラインから、先程設定したユーザ名、パスワードと、MariaDB(があるPC)のTCP/IPの計3点を用意します。
- mysql -h 192.168.x,x -u ユーザ名 -p
- パスワード入力(入力してもカーソル移動しないので慎重に) [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などに近い書き方が、身の丈に合うと妄想してました。何より、成功体験は大切。