Systemd Mysqlは停止しません


17

15.04にアップグレードした後、systemdを理解するのはとても楽しかったです。mysql.serviceを停止できないことを除いて、すべてが機能していると思います。systemctlコマンドがハングし、mysqlが実行を継続します。他の誰かがこれを経験しましたか、または何が起こっているか知っているかもしれませんか?


2
デフォルトでは、3分後にSIGKILLでサービスを破棄します(サービスが正常に終了しない場合)。おそらく、mysql.serviceの設定を読む必要があります。
-Velkan

2
どのバージョンのMySQLを実行していますか?ネイティブmysql.serviceスクリプトを使用しましたか、それとも独自のスクリプトを使用しましたか?
ジョス

5.6であり、公式の鮮やかなレポから出ています。そのパッケージに付属しているスクリプトを使用しています。
クレイグダンフォード

私たちは同じ問題を抱えていて、バグレポートを提出しました。
EOLEチーム

回答:


25

私は同じ問題を抱えていました(公式ファイルと設定を使用して15.04にアップグレードします)。

システムの再起動/シャットダウン時にmysqlデーモンを手動で停止できるようにするには、次の変更を行う必要がsytemctlありました。

  1. 作る/etc/mysql/debian.cnfために読めるmysql持つユーザー

    sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
    
  2. わずかに変更されたmysql.serviceファイルを提供します。

    sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
    sudo chmod 755 /etc/systemd/system/mysql.service
    
  3. コピーしたファイルをエディターで開いて、明示的な停止コマンドを提供します。

    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を使用して終了します。

  4. 新しいサービスファイルをシステムに認識させます。

    sudo systemctl daemon-reload
    

MySQL Community Server [1min 16s / 10min]で停止ジョブが実行されているため、シャットダウン中にKubuntuがフリーズし始めました。この回答で問題は解決しました。ありがとうございました。
lolmaus-アンドレイ・ミハイロフ

14.5-> 15.04のアップグレード(MySQL 5.5から5.6への移行)でも同じ問題が発生しました。MySQLは「動作」しますが、正しくシャットダウンしないため、Ubuntuはシャットダウン時にハングします。問題は、systemdの置き換えupstartと組み合わされたMySQLバージョンの変更に関連しているようです。このリンクは、警告などを整理するためのMySQL構成の更新の一部をカバーします。MySQLを起動すると、システム停止は10分後にプロセスを強制終了するだけなので、不正確なシャットダウンについても常に文句を言います。
マイク

1
Debian Jessieでの同じ問題/ MySQL 5.6でのテスト-おかげで修正されました:)
Majenko

私はこれをするのが嫌いですが、うまくいったのはうれしいです、ウドに感謝します!
ガブリエルベイカー

LinuxMint 18の問題は解決しませんでした
sivaprasadreddy.k

1

Ubuntu 15.10 Desktopでも同じ問題があり、修正する方法を見つけました。

/etc/mysql/mysql.conf.d/mysqld.cnfのlog_errorパラメーターがコメント化されました。パラメーターのコメントを外した後、systemdはmysqldを問題なくシャットダウンします。


Ubuntu LTS 16.04でも同じ問題が発生しました。error.logの無効化のみが機能していました。これで、mysqldは--log-syslogオプションを介してジャーナルに書き込みます。おそらく理由:ルートファイルシステムはbtrfsでした。
-ingopingo

1

あなたの問題はthread_pool_sizeです。コア/スレッドの数よりはるかに多い場合、mysqladmin shutdownコマンドを使用しない限り、適切にシャットダウンできません。

例:2つのコアCPUと4つのスレッドがあります。1〜4に設定すると、正常に機能します。多くの「ハイパフォーマンス」ブログでアドバイスされているように、16に設定すると、うんざりします。


1

mysql / mariadbsystemdから指示された場合、シャットダウン時またはで手動で呼び出されたときに停止しないという同様の問題がありましたsudo service mysql stop

私の場合、Ubuntu / WindowsをUEFIモードでデュアルブートしています。これらのOSは異なるハードウェア時間を解釈するため、両方のOSは起動時にインターネットタイムサーバーと同期します。

MySQL(およびMariadb)は、実行中にハードウェア時間が変更された場合、停止に失敗していました。

timesyncの後までMySQLの起動を延期する必要があります。理想的には、これはmysqlに一時的な依存関係を挿入することで行われますAfter: time-syncが、それは私にとってはうまくいきませんでした。

私のために働いた解決策(同じ効果のためにmysqlをmariadbに置き換えることができます):

  1. mysqlを無効にします sudo systemctl disabled mysql.service

  2. /usr/bin/delay_mysql内容が遅れてmysqlを起動するスクリプトを作成します(実行可能になります) :

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. 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  
    
  4. 新しいサービスを登録します sudo systemctl enable delay_mysql.service

これにより、スクリプトがマルチユーザーレベルで実行されます(Ubuntuでは3,4,5)。


それは私の問題を解決しました。ただし、MySqlを再インストールする前にdelay_mysql.serviceを無効にする必要があることに注意してください。そうしないと、エラーが発生します。
のSiGe

0

コピーmysql.serviceするときは、あとでやらなければなりませんchmod

cp /lib/systemd/system/mysql.service /etc/systemd/system/
chmod 755 /etc/systemd/system/mysql.service

0

私の場合、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のようなこのメンテナンスアカウントを使用するアプリのインストールに関する問題もなくなります。

更新:残念ながら、これは問題を解決しませんでした。それは一種のランダムになりました-サービス停止時にフリーズする別の時間に問題なくサービスを停止できることがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.