MariaDBインストールを10.2にアップグレードしました。
サービスを開始しようとすると、ステータスの確認に失敗したことが表示され、この奇妙なメッセージが表示されます。
_root@server # systemctl status mariadb
* mariadb.service - MariaDB 10.2.20 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/mariadb.service.d
`-migrated-from-my.cnf-settings.conf
Active: failed (Result: exit-code) since Wed 2018-12-26 01:54:50 CET; 9min ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 13690 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=127)
Main PID: 10811 (code=exited, status=0/SUCCESS)
CPU: 0
Dec 26 01:54:50 server systemd[1]: Starting MariaDB 10.2.20 database server...
Dec 26 01:54:50 server systemd[1]: mariadb.service: Control process exited, code=exited status=127
Dec 26 01:54:50 server systemd[1]: Failed to start MariaDB 10.2.20 database server.
Dec 26 01:54:50 server systemd[1]: mariadb.service: Unit entered failed state.
Dec 26 01:54:50 server systemd[1]: mariadb.service: Failed with result 'exit-code'.
_
ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=127)
(ルートとしてPreおよびPost開始ステップを実行するように構成されているmariabd.serviceファイルを確認する)とは言っていない)ステータスコード127を返しました。私の知る限りでは、コマンドが見つかりません。
まったく同じコマンドを手動でrootとして直接実行すると、終了ステータス0で動作します。
_mysqld_safe
_およびmysqld
も実行できます。何も問題はありません。
更新:
要求どおり、私の_/lib/systemd/system/mariadb.service
_の内容
_#
# /etc/systemd/system/mariadb.service
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Thanks to:
# Daniel Black
# Erkan Yanar
# David Strauss
# and probably others
[Unit]
Description=MariaDB 10.2.20 database server
Documentation=man:mysqld(8)
Documentation=https://mariadb.com/kb/en/library/systemd/
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
Alias=mysql.service
Alias=mysqld.service
[Service]
##############################################################################
## Core requirements
##
Type=notify
# Setting this to true can break replication and the Type=notify settings
# See also bind-address mysqld option.
PrivateNetwork=false
##############################################################################
## Package maintainers
##
User=mysql
Group=mysql
# To allow memlock to be used as non-root user if set in configuration
CapabilityBoundingSet=CAP_IPC_LOCK
# Prevent writes to /usr, /boot, and /etc
ProtectSystem=full
# Doesn't yet work properly with SELinux enabled
# NoNewPrivileges=true
PrivateDevices=true
# Prevent accessing /home, /root and /run/user
ProtectHome=true
# Execute pre and post scripts as root, otherwise it does it as User=
PermissionsStartOnly=true
ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld
# Perform automatic wsrep recovery. When server is started without wsrep,
# galera_recovery simply returns an empty string. In any case, however,
# the script is not expected to return with a non-zero status.
# It is always safe to unset _WSREP_START_POSITION environment variable.
# Do not panic if galera_recovery script is not available. (MDEV-10538)
ExecStartPre=/bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
ExecStartPre=/bin/sh -c "[ ! -e /usr/bin/galera_recovery ] && VAR= || \
VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ] \
&& systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1"
# Needed to create system tables etc.
# ExecStartPre=/usr/bin/mysql_install_db -u mysql
# Start main service
# MYSQLD_OPTS here is for users to set in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf
# Use the [Service] section and Environment="MYSQLD_OPTS=...".
# This isn't a replacement for my.cnf.
# _WSREP_NEW_CLUSTER is for the exclusive use of the script galera_new_cluster
ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
ExecStartPost=/etc/mysql/debian-start
# Unset _WSREP_START_POSITION environment variable.
ExecStartPost=/bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
KillSignal=SIGTERM
# Don't want to see an automated SIGKILL ever
SendSIGKILL=no
# Restart crashed server only, on-failure would also restart, for example, when
# my.cnf contains unknown option
Restart=on-abort
RestartSec=5s
UMask=007
##############################################################################
## USERs can override
##
##
## by creating a file in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf
## and adding/setting the following under [Service] will override this file's
## settings.
# Useful options not previously available in [mysqld_safe]
# Kernels like killing mysqld when out of memory because its big.
# Lets temper that preference a little.
# OOMScoreAdjust=-600
# Explicitly start with high IO priority
# BlockIOWeight=1000
# If you don't use the /tmp directory for SELECT ... OUTFILE and
# LOAD DATA INFILE you can enable PrivateTmp=true for a little more security.
PrivateTmp=false
##
## Options previously available to be set via [mysqld_safe]
## that now needs to be set by systemd config files as mysqld_safe
## isn't executed.
##
# Number of files limit. previously [mysqld_safe] open-file-limit
LimitNOFILE=16364
# Maximium core size. previously [mysqld_safe] core-file-size
# LimitCore=
# Nice priority. previously [mysqld_safe] Nice
# Nice=-5
# Timezone. previously [mysqld_safe] timezone
# Environment="TZ=UTC"
# Library substitutions. previously [mysqld_safe] malloc-lib with explicit paths
# (in LD_LIBRARY_PATH) and library name (in LD_PRELOAD).
# Environment="LD_LIBRARY_PATH=/path1 /path2" "LD_PRELOAD=
# Flush caches. previously [mysqld_safe] flush-caches=1
# ExecStartPre=sync
# ExecStartPre=sysctl -q -w vm.drop_caches=3
# numa-interleave=1 equalivant
# Change ExecStart=numactl --interleave=all /usr/sbin/mysqld......
# crash-script equalivent
# FailureAction=
_
また、Debian 9を実行しています。
更新2:
私がしたことは、apt
を介してMariaDBをアップグレードすることだけでした。普通のことは何もない。したがって、すべてのファイル(configを除く)は標準である必要があります。
これは私に起こりました、問題はsystemdがmariadb.service設定と互換性のあるバージョンに更新されなかったことでした。 systemdを241にアップデートすると、動作し始めました。
私のために機能した唯一のコマンドはaptitude
を使用することでした。これは、新しいパッケージをインストールするときに必要なすべての依存関係などを調べます。
Sudo aptitude install mariadb-server
別のdbサーバーがインストールされている場合に特に発生する可能性がある別の問題は、接続をブロックするapparmorです。これを試して:
Sudo /etc/init.d/apparmor stop Sudo /etc/init.d/apparmor teardown Sudo update-rc.d -f apparmor remove
似たようなケースがありました。回避策:/etc/init.d/mysql
、削除mariadb.service
、mysqld.service
、mysql.service
。
systemctl daemon-reload
/etc/init.d/mysql start
データのコピーを作成してmariadbを再インストールできる場合は、これを試すことができます。
Debian AMD64を使用していると仮定します。
ダウンロード https://packages.debian.org/stretch/AMD64/libmariadb-dev/download およびapt-get install libmariadb2
後dpkg -i libmariadb-devxxxxx.deb ./configure --with-tls --with-virtualchroot --with-puredb --with-quotas --with-throttling --with-mysql make install-strip