Perl CGIスクリプトをコンソールで実行するとMySQLに接続できないのはなぜですか?

Perl CGIスクリプトをコンソールで実行するとMySQLに接続できないのはなぜですか?

私は新しいサーバーハードウェアに移行します。これは、新しいLinuxディストリビューション(Debian Buster)の機能を学ぶことを意味します。

コンソールで実行すると実行されますが、MySQLに接続できないPerl CGIスクリプトがあります。

AH01215: DBI 接続 ('my_db','my_db_user',...) 失敗: '/tmp/mysql.sock' ソケットを介してローカル MySQL サーバーに接続できません。

同じハードウェアで実行されていることを考慮すると、同じPerlインストールなどになります。なぜ動作しないのかわかりません。 CentosはSELinuxが邪魔になる可能性があることを知っていますが、Debianには基本的にこの機能があるとは思いません。しかし、子プロセスが接続を確立できるようにするには、同様のことを行う必要がありますか?

mysqladminはこれが正しい場所であると提案しました(例:クリックしていません)。この問題):

#mysqladmin バージョン -p
パスワードを入力:
i686ベースのLinux用mysqladmin Ver 8.0.17(ソースコード配布)
Copyright(c)2000、2019、Oracleおよび/またはその関連会社。すべての権利を保有。

Oracleは、Oracle Corporationおよび/またはその会社の登録商標です。
子会社。他の名前はその会社の商標です。
所有者。

サーバーバージョン8.0.17
プロトコルバージョン10
UNIXソケットを介してlocalhostに接続する
UNIXソケット/tmp/mysql.sock
稼働時間:3日26分34秒

スレッド: 2 問題: 74254 遅いクエリ: 0 オープン: 1042 テーブルの更新: 3 オープンテーブル: 962 秒あたりのクエリ平均: 0.284

そしてソケットは明らかに存在します(コンソールで実行すると動作するためです)。

$ls -lF /tmp/mysql.sock
srwxrwxrwx 1 mysql mysql 0 9月6日、22:33 /tmp/mysql.sock=

ベストアンサー1

Debian 9と10のApache2はsystemdから始まります。持っている

PrivateTmp=true

その定義から。したがって、サーバーで開始されたプロセスは、通常の/ tmpおよび/ var / tmpディレクトリにアクセスできません。代わりに、彼らは独自のディレクトリを持っています。

ソケットを/ tmpの外に移動するか、apache2を起動できます。

PrivateTmp=false

おすすめ記事