Mysql は異なる引数でランダムに再起動しますか?

Mysql は異なる引数でランダムに再起動しますか?

かなり奇妙な問題に直面していますが、その原因がよくわかりません。mysql systemd サービスがすでに実行されている状態で、systemd 以外の何かによって、mysqld プロセスが異なる引数で開始されているようです。これにより、mysql サーバーがダウンし、新しいプロセスが応答しなくなります。

systemd 経由で起動した場合: /usr/sbin/mysqld

いつ開始されましたか? mysqld --user=mysql --init-file=/var/lib/mysql-files/tmp.Ld6xyAe3qb --socket=/tmp/tmp.obBArlPCj2/mysqld.sock --pid-file=/tmp/tmp.obBArlPCj2/mysqld.pid

mysql がなぜ再起動されるのか、誰が再起動するのか、新しい引数がどこから来るのかは不明です。

/var/lib/mysql-files/tmp.Ld6xyAe3qb(上記で提供された init ファイル) には次のテキストが含まれています。

USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'auth_socket';
SHUTDOWN;

ログで確認できるのは次の点だけです:

2020-08-08T06:57:31.123013Z 0 [System] [MY-013172] [Server] Received SHUTDOWN from user <via user signal>. Shutting down mysqld (Version: 8.0.21-0ubuntu0.20.04.4).
... [group replication, InnoDB, normal logs] ...
2020-08-08T06:57:49.954754Z 8 [System] [MY-013172] [Server] Received SHUTDOWN from user boot. Shutting down mysqld (Version: 8.0.21-0ubuntu0.20.04.4).

最初のログはランダムに発生し、それ以前にメモリやその他のエラーを示すものは何もありません (私が確認した限りでは)。2 回目のシャットダウンは init-file から発生しているようです。ただし、さらに混乱を招くのは、bootシステムにも mysql にもユーザーがいないことです。

mysql を使用する唯一のサービスは、Swift オブジェクト ストアを目的とした OpenStack Keystone であり、他の OpenStack サービスはありません。

私の知る限り、mysql を参照する cron または systemd サービスは他にありませんが、そのテストでは確信が持てません。コマンドは次のようになります systemctl list-units --all --no-legend | awk '{print $1}' | xargs -n1 systemctl cat 2>/dev/null | grep mysql

After=postgresql.service mysql.service keystone.service rabbitmq-server.service ntp.service network-online.target local-fs.target remote-fs.target 
# /lib/systemd/system/mysql.service
User=mysql
Group=mysql
PIDFile=/run/mysqld/mysqld.pid
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
ExecStart=/usr/sbin/mysqld
RuntimeDirectory=mysqld

最初の行は からのもので/lib/systemd/system/cinder-volume.service、削除する必要がありますが、この問題は cinder がインストールされていないサーバーで発生するため、この問題とは関係ないと思われます。

この問題は、グループ レプリケーション用にセットアップされた 4 台のサーバーで発生します。

# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:    20.04
Codename:   focal
# mysql --version
mysql  Ver 8.0.21-0ubuntu0.20.04.4 for Linux on x86_64 ((Ubuntu))
# cat /etc/mysql/mysql.conf.d/mysqld.cnf 
#
# The MySQL database server configuration file.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
[mysqld]
log-error-verbosity = 5
#
# * Basic Settings
#
user        = mysql
# pid-file  = /var/run/mysqld/mysqld.pid
# socket    = /var/run/mysqld/mysqld.sock
# port      = 3306
# datadir   = /var/lib/mysql
# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir        = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address        = 0.0.0.0
#
# * Fine Tuning
#
key_buffer_size     = 16M
# max_allowed_packet    = 64M
# thread_stack      = 256K
# thread_cache_size       = -1
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover-options  = BACKUP
# max_connections        = 151
# table_open_cache       = 4000
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
#
# Log all queries
# Be aware that this log type is a performance killer.
# general_log_file        = /var/log/mysql/query.log
# general_log             = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
# slow_query_log        = 1
# slow_query_log_file   = /var/log/mysql/mysql-slow.log
# long_query_time = 2
# log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
# server-id     = 1
# log_bin           = /var/log/mysql/mysql-bin.log
# binlog_expire_logs_seconds    = 2592000
max_binlog_size   = 100M
# binlog_do_db      = include_database_name
# binlog_ignore_db  = include_database_name
# disable non innodb storage engines for group replication
# https://dev.mysql.com/doc/refman/8.0/en/group-replication-configuring-instances.html
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
# use native password auth
default_authentication_plugin=mysql_native_password
# replication framework settings
server_id = 1
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = binlog
log_slave_updates = ON
binlog_format = ROW
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
# group replication settings
plugin_load_add = 'group_replication.so'
plugin-load-add = 'mysql_clone.so'
group_replication_group_name = "xxx"
group_replication_start_on_boot = on
group_replication_local_address = "xxx:33061"
group_replication_ip_whitelist="xxx"
group_replication_group_seeds = "xxx:33061"
group_replication_bootstrap_group = off
group_replication_enforce_update_everywhere_checks = off
group_replication_single_primary_mode = off
## tls
# required encrypted remote connections
# require_secure_transport = ON
tls_version=TLSv1.3
ssl_ca = "/etc/mysql/certs/eons.dev.pem"
ssl_cert = "/etc/mysql/certs/skyrim-mysql.pem"
ssl_key = "/etc/mysql/certs/skyrim-mysql.key"
ssl_cipher = "DHE-RSA-AES256-SHA"
##ssl_crl = "crl-server-revoked.crl"
##ssl_crlpath = "/.../crl_directory"
mysqlx_ssl_ca = "/etc/mysql/certs/eons.dev.pem"
mysqlx_ssl_cert = "/etc/mysql/certs/skyrim-mysql.pem"
mysqlx_ssl_key = "/etc/mysql/certs/skyrim-mysql.key"
mysqlx_ssl_cipher = "DHE-RSA-AES256-SHA"
# group replication tls
group_replication_ssl_mode = REQUIRED
group_replication_recovery_use_ssl = on
group_replication_recovery_ssl_ca = "/etc/mysql/certs/eons.dev.pem"
group_replication_recovery_ssl_cert = "/etc/mysql/certs/skyrim-mysql.pem"
group_replication_recovery_ssl_key = "/etc/mysql/certs/skyrim-mysql.key"
group_replication_recovery_ssl_cipher = "DHE-RSA-AES256-SHA"

関連情報