15.04にアップグレードした後、systemdを理解するのはとても楽しかったです。 mysql.serviceを停止できないことを除いて、すべてが機能していると思います。 systemctlコマンドがハングし、mysqlが実行を続けます。他の誰かがこれを経験しましたか、または何が起こっているか知っているかもしれませんか?
私は同じ問題を抱えていました(公式ファイルと設定を使用して15.04にアップグレードします)。
mysql
デーモンを手動でsytemctl
で停止し、システムの再起動/シャットダウン時に自動的に停止できるようにするには、次の変更を行う必要がありました。
mysql
ユーザーが/etc/mysql/debian.cnf
を読み取り可能にする
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
mysql/mariadbのようにsystemdで指示された場合、シャットダウン時またはSudo service mysql stop
で手動で呼び出されたときに停止に失敗する同様の問題がありました。
私の場合、Ubuntu/WindowsをUEFIモードでデュアルブートしています。これらのOSは異なるハードウェア時間を解釈するため、両方のOSは起動時にインターネットタイムサーバーと同期します。
MySQL(およびMariadb)は、実行中にハードウェア時間が変更された場合、停止に失敗していました。
Timesyncの後までMySQLの起動を延期する必要があります。理想的には、After: time-sync
を使用してmysqlに一時的な依存関係を挿入することでこれを実行できますが、それはうまくいきませんでした。
私のために働いた解決策(同じ効果のためにmysqlをmariadbに置き換えることができます):
Sudo systemctl disabled mysql.service
でmysqlを無効にします
少し遅れて/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)。
あなたの問題はthread_pool_sizeです。コア/スレッドの数よりもはるかに多い場合、mysqladmin shutdownコマンドを使用しない限り、適切にシャットダウンできません。
例:2つのコアCPUと4つのスレッドがあります。 1〜4に設定すると、正常に機能します。多くの「ハイパフォーマンス」ブログでアドバイスされているように、16に設定すると、うんざりします。
Ubuntu 15.10 Desktopでも同じ問題があり、修正する方法を見つけました。
/etc/mysql/mysql.conf.d/mysqld.cnfのlog_errorパラメーターがコメント化されました。パラメーターのコメントを外した後、systemdはmysqldを問題なくシャットダウンします。
私の場合、メンテナンスユーザーdebian-sys-maint
のパスワードが/etc/mysql/debian.cnf
のパスワードとMySQLデータベースのパスワードの不一致でした。
このユーザーは、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のようなこのメンテナンスアカウントを使用するアプリのインストールの問題はなくなりました。
PDATE:残念ながら、これは問題を解決しませんでした。それは一種のランダムになりました-サービス停止時にフリーズする別の時間に問題なくサービスを停止できることがあります。
mysql.service
をコピーするときは、chmod
を実行する必要があります。
cp /lib/systemd/system/mysql.service /etc/systemd/system/
chmod 755 /etc/systemd/system/mysql.service