1.問題の説明:
CentOS7.8マシンの再起動後にMySQLを起動できませんでした[エラー] / usr / sbin / mysqld:ファイル '/var/run/mysqld/mysqld.pid'を作成/書き込みできません(エラーコード:2-そのようなファイルまたはディレクトリはありません)
注:このシナリオでは、MySQL RPMインストールパッケージを使用します。バージョン番号はMySQL5.7.12です。MySQL5.7の最新のパッチバージョンは5.7.31です。mysql-5.7.31-1.el7.x86_64.rpmをダウンロードすることをお勧めします。 -直接バンドルします。タール。
二、原因分析:
/ var / runディレクトリは/ runディレクトリを指し、/ runは、システムの起動以降の情報を格納する一時ファイルシステムです。システムが再起動したら、このディレクトリ内のファイルを削除またはクリアする必要があります。
CentOSの再起動後、/ var / run / mysqldディレクトリが消え、mysql5.7の起動スクリプトでディレクトリが自動的に作成されないため、エラーが表示されると考えられます。
3.一時的な解決策:
cd /var/run
mkdir mysqld
chown mysql:mysql mysqld
systemctl start mysqld
4.恒久的な解決策:
- 方法1:起動スクリプトを変更します。起動中に/ var / run / mysqldディレクトリが見つからない場合は、自動的に作成されます。(推奨)
vim /etc/init.d/mysqld
# 以下截取修改部分内容
mypiddir="/var/run/mysqld"
get_mysql_option mysqld_safe pid-file "$mypiddir/mysqld.pid"
mypidfile="$result"
#############################省略#############################
start(){
[ -x $exec ] || exit 5
# check to see if it's already running
RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1)
if [ $? = 0 ]; then
# already running, do nothing
action $"Starting $prog: " /bin/true
ret=0
elif echo "$RESPONSE" | grep -q "Access denied for user"
then
# already running, do nothing
action $"Starting $prog: " /bin/true
ret=0
else
# 不存在/var/run/mysqld目录,则自动创建
if [ ! -e "$mypiddir" -a ! -h "$mypiddir" ]
then
mkdir -p "$mypiddir" || exit 1
fi
chown mysql:mysql "$mypiddir"
# prepare for start
touch "$errlogfile"
chown mysql:mysql "$errlogfile"
#############################省略#############################
systemctl daemon-reload
systemctl start mysqld
- 方法2:/etc/my.cnf構成ファイルを変更し、mysqld_safe属性グループの下のpidファイルファイルの場所を変更します
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
skip-name-resolve
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysqld_safe]
log-error=/var/log/mysqld.log
# 可改为/var/run/mysqld.pid
pid-file=/var/run/mysqld/mysqld.pid
systemctl start mysqld
注:テスト中に、pidファイルの場所の変更は実際に正常に開始でき、サービスは正常に使用できることがわかりましたが、mysqld_safeデーモンはmysqlの実行ステータスを取得できず、起動スクリプトは待機状態になっています(これは、mysqld_safeデーモンの実行ステータスが監視されているためです)。オブジェクトはまだ元の/var/run/mysqld/mysqld.pid)です!
MySQL 5.7.12の実行ステータス監視スクリプトにはバグがある可能性があると推測されており、当面はこの方法はお勧めしません。
より良い解決策がある場合は、説明するメッセージを残すこともできます。ありがとうございます。