CentOS 7.8 MySQL n'a pas pu démarrer / usr / sbin / mysqld: impossible de créer / écrire dans le fichier '/ var / run / mysqld / mysqld.pid'

1. Description du problème:

MySQL n'a pas pu démarrer après le redémarrage de la machine CentOS 7.8
[ERREUR] / usr / sbin / mysqld: Impossible de créer / d'écrire dans le fichier '/ var / run / mysqld / mysqld.pid' (Errcode: 2-No such file or directory )

Remarque : Ce scénario utilise le package d'installation de MySQL RPM, le numéro de version est MySQL 5.7.12. Le dernier correctif de MySQL 5.7 est 5.7.31. Il est recommandé de télécharger mysql-5.7.31-1.el7.x86_64.rpm -bundle directement. tar.

Deuxièmement, l'analyse des causes:

introduction détaillée du catalogue Linux

Le répertoire / var / run pointe vers le répertoire / run et / run est un système de fichiers temporaire qui stocke les informations depuis le démarrage du système. Lorsque le système redémarre, les fichiers de ce répertoire doivent être supprimés ou effacés.
Il est concevable qu'après le redémarrage de CentOS, le répertoire / var / run / mysqld disparaisse, et le répertoire n'est pas automatiquement créé dans le script de démarrage de mysql5.7, donc l'erreur sera invitée!

3. Solution temporaire:

cd /var/run
mkdir mysqld
chown mysql:mysql mysqld
systemctl start mysqld

4. Solution permanente:

  • Méthode 1: Modifiez le script de démarrage. Si le répertoire / var / run / mysqld est introuvable au démarrage, il sera créé automatiquement. (recommander)
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
  • Méthode 2: modifiez le fichier de configuration /etc/my.cnf, modifiez l'emplacement du fichier pid-file sous le groupe d'attributs mysqld_safe
# 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

Remarque : dans le test, il a été constaté que la modification de l'emplacement du fichier pid peut effectivement démarrer avec succès, et le service peut être utilisé normalement, mais le démon mysqld_safe ne peut pas obtenir l'état d'exécution de mysql, et le script de démarrage a été dans un état d'attente (la raison en est que l'état d'exécution du démon mysqld_safe est surveillé L'objet est toujours le /var/run/mysqld/mysqld.pid d'origine)!
Il est supposé que le script de surveillance de l'état en cours d'exécution de MySQL 5.7.12 peut avoir des bogues, cette méthode n'est pas recommandée pour le moment.

Si vous avez une meilleure solution, vous pouvez également laisser un message pour expliquer, merci beaucoup!

Je suppose que tu aimes

Origine blog.csdn.net/ory001/article/details/109991632
conseillé
Classement