web-dev-qa-db-ja.com

Systemd Mysqlは停止しません

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

17
Craig Dunford

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

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

  1. mysqlユーザーが/etc/mysql/debian.cnfを読み取り可能にする

    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
    
25
Udo

mysql/mariadbのようにsystemdで指示された場合、シャットダウン時またはSudo service mysql stopで手動で呼び出されたときに停止に失敗する同様の問題がありました。

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

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

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

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

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

  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)。

1
zero-day

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

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

1
Drakula963

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

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

1
mikko356

私の場合、メンテナンスユーザー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:残念ながら、これは問題を解決しませんでした。それは一種のランダムになりました-サービス停止時にフリーズする別の時間に問題なくサービスを停止できることがあります。

0
Patryk

mysql.serviceをコピーするときは、chmodを実行する必要があります。

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