15.04にアップグレードした後、systemdを理解するのはとても楽しかったです。mysql.serviceを停止できないことを除いて、すべてが機能していると思います。systemctlコマンドがハングし、mysqlが実行を継続します。他の誰かがこれを経験しましたか、または何が起こっているか知っているかもしれませんか?
mysql.service
スクリプトを使用しましたか、それとも独自のスクリプトを使用しましたか?
15.04にアップグレードした後、systemdを理解するのはとても楽しかったです。mysql.serviceを停止できないことを除いて、すべてが機能していると思います。systemctlコマンドがハングし、mysqlが実行を継続します。他の誰かがこれを経験しましたか、または何が起こっているか知っているかもしれませんか?
mysql.service
スクリプトを使用しましたか、それとも独自のスクリプトを使用しましたか?
回答:
私は同じ問題を抱えていました(公式ファイルと設定を使用して15.04にアップグレードします)。
システムの再起動/シャットダウン時にmysql
デーモンを手動で停止できるようにするには、次の変更を行う必要がsytemctl
ありました。
作る/etc/mysql/debian.cnf
ために読めるmysql
持つユーザー
sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
わずかに変更されたmysql.service
ファイルを提供します。
sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
sudo chmod 755 /etc/systemd/system/mysql.service
コピーしたファイルをエディターで開いて、明示的な停止コマンドを提供します。
sudo nano /etc/systemd/system/mysql.service
[Service]
セクションの下に次の行を追加します。
ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown
Nanoでは、Ctrl + Oを使用して保存し(Linuxの方法!)、Ctrl + Xを使用して終了します。
新しいサービスファイルをシステムに認識させます。
sudo systemctl daemon-reload
Ubuntu 15.10 Desktopでも同じ問題があり、修正する方法を見つけました。
/etc/mysql/mysql.conf.d/mysqld.cnfのlog_errorパラメーターがコメント化されました。パラメーターのコメントを外した後、systemdはmysqldを問題なくシャットダウンします。
--log-syslog
オプションを介してジャーナルに書き込みます。おそらく理由:ルートファイルシステムはbtrfsでした。
mysql / mariadbがsystemdから指示された場合、シャットダウン時またはで手動で呼び出されたときに停止しないという同様の問題がありましたsudo service mysql stop
。
私の場合、Ubuntu / WindowsをUEFIモードでデュアルブートしています。これらのOSは異なるハードウェア時間を解釈するため、両方のOSは起動時にインターネットタイムサーバーと同期します。
MySQL(およびMariadb)は、実行中にハードウェア時間が変更された場合、停止に失敗していました。
timesyncの後までMySQLの起動を延期する必要があります。理想的には、これはmysqlに一時的な依存関係を挿入することで行われますAfter: time-sync
が、それは私にとってはうまくいきませんでした。
私のために働いた解決策(同じ効果のためにmysqlをmariadbに置き換えることができます):
mysqlを無効にします
sudo systemctl disabled mysql.service
/usr/bin/delay_mysql
内容が遅れてmysqlを起動するスクリプトを作成します(実行可能になります)
:
#!/bin/sh
sleep 30s
/etc/init.d/mysql start
systemdサービスを作成して、/etc/systemd/system/delay_mysql.service
コンテンツを含む新しいスクリプトを実行します
。
[Unit]
Description=Delay start of MySQL / MariaDB
[Service]
Type=oneshot
ExecStart=/usr/bin/delay_mysql
[Install]
WantedBy=multi-user.target
新しいサービスを登録します sudo systemctl enable delay_mysql.service
これにより、スクリプトがマルチユーザーレベルで実行されます(Ubuntuでは3,4,5)。
私の場合、MySQLデータベース内の1人と1人のdebian-sys-maint
間でメンテナンスユーザーのパスワードが一致していませんでした/etc/mysql/debian.cnf
。
このユーザーは、MySQLのシャットダウンおよびその他の機能に使用されます。MySQLの更新後、ファイルとデータベースの間でパスの不一致が発生することがありました。これは、データベースをあるMySQLから別のMySQLに移動した場合にも発生する可能性があります。別のマシン上の他のMySQLからすべてのデータベースとユーザーをインポートする場合、メンテナンスユーザー(debian-sys-maint
)パスワードを再同期する必要があります。
必要なこと:ubuntu / debianファイルで現在のパスワードを確認します。
sudo cat /etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = n4aSHUP04s1J32X5
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user = debian-sys-maint
password = n4aSHUP04s1J32X5
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
ここでシステムが使用するパスワードを確認できます。 password = n4aSHUP04s1J32X5
次のステップは、MySQLを同じパスワードに更新することです。MySQLにログインします。
~$ mysql -u root -p
パスワードを入力してMySQLにアクセスします
mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'n4aSHUP04s1J32X5';**
その後、シャットダウンに関する問題はなくなり、10分間待機することも、phpmyadminのようなこのメンテナンスアカウントを使用するアプリのインストールに関する問題もなくなります。
更新:残念ながら、これは問題を解決しませんでした。それは一種のランダムになりました-サービス停止時にフリーズする別の時間に問題なくサービスを停止できることがあります。