私は新しいサーバーハードウェアに移行します。これは、新しい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