mysqlサービスを開始/停止できません


28

MySQLを実行してDebian Etch Webサーバーを引き継ぎます。

私は通常、msyqlを起動、停止、再起動します:

/etc/init.d/mysql restart

この設定に関する何らかの理由で、次のようになります。

:〜#/etc/init.d/mysql stop

MySQLデータベースサーバーの停止:mysqldが失敗しました!

mysqlプロセスは正常に実行されています。

:~# ps aux | grep mysql 
root      2045  0.0  0.1   2676  1332 ?        S    Jun25   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     2082  0.6 10.7 752544 111188 ?       Sl   Jun25  18:49 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root      2083  0.0  0.0   1568   504 ?        S    Jun25   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     11063  0.0  0.0   2856   716 pts/0    S+   17:29   0:00 grep mysql

本当に簡単な方法があるはずですが、何が起こっているのかも理解したいです。典型的な方法がなぜ私にとってうまくいかないのですか?

アップデート としてアップデートを編集

JBRLSVR001:/var/log/mysql# mysqladmin shutdown
JBRLSVR001:/var/log/mysql# dpkg --list mysql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed 
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                                         Version                                      Description
 +++-============================================-============================================-========================================================================================================
un  mysql-client                                 <none>                                       (no description available)
un  mysql-client-4.1                             <none>                                       (no description available)
ii  mysql-client-5.0                             5.0.32-7etch8                                mysql database client binaries
ii  mysql-common                                 5.0.32-7etch8                                mysql database common files (e.g. /etc/mysql /my.cnf)
un  mysql-common-4.1                             <none>                                       (no description available)
ii  mysql-server                                 5.0.32-7etch8                                mysql database server (meta package depending on the latest version)
un  mysql-server-4.1                             <none>                                       (no description available)
ii  mysql-server-5.0                             5.0.32-7etch8                                mysql database server binaries

mysqladminのシャットダウンは機能しますが、/ etc / init.d / mysqlコマンドが機能しない理由はまだ知りません。


私にとっての問題は、手作りのインストールでは/tmp/mysql.sockなくを探していたことでした/var/run/mysqld/mysqld.sock。そのため、Debianのメンテナーによるスクリプトは、静かにエラーを発行していました。あなただけ修正する必要がsocket=/etc/mysql/debian.cnf
イヴァン・

回答:


25
mysqladmin shutdown

サーバーをシャットダウンするために動作するはずです。

次の2つの可能性があります。

  1. MySQLには問題があり、何らかの理由でシャットダウンを拒否しています。
  2. 前の管理者は奇妙なことをしました。init.dスクリプトを変更したか、MySQLのインストールにDebianパッケージをまったく使用しませんでした。

何てdpkg --list mysql\*言うの?

/var/log/mysql.errは何と言っていますか?または、他のmysqlログ?

編集:

だから、mysqladmin shutdown働いていましたか?

それに応じて、mysql-serverパッケージがインストールされます(mysql-server-5.0。mysql-serverパッケージはおそらく単なるスタブです)。それで彼らはそれの上にインストールしたのでしょうか?実行debsums mysql-server-5.0すると、より多くのことがわかります。 dpkg --listfiles mysql-server-5.0助けることもできます...

/etc/init.d/mysqlには実際には何がありますか?私はパッケージのその特定のバージョンをチェックしていませんが、それを使用しようとする必要がありますmysqladmin shutdown...たぶんあなたは幸運だと彼らはそれを破っただけ...


乾杯、さらに情報を追加しました。
デレクオルガン

Debianパッケージを使用してmysqlをインストールしなかったと思われる
Derek Organ

誰かが少なくとも一度はDebianパッケージを使用しました。彼らは、他の方法...ソースからコンパイルされ、実際のファイルを上書き、またはそれを破ったかもしれない
freiheit

22

なぜこれが起こっているのか

mysqldump -Aバックアップから復元する場合など、mysqlインポートを実行してmysqlデータベース自体を上書きする場合、これは一般的な問題です。

これは良いことです。おそらく、すべてのmysqlユーザー、パーミッションなどをバックアップしたいのですが、mysqlを完全にシャットダウンするために使用されるdebian-sys-maintユーザーのようなもので大混乱を引き起こす可能性があります。

この新しいデータベースはルートパスワードとdebian-sys-maintパスワードの両方を変更する可能性がありますが、もちろん/etc/mysql/debian.cnfで予想されるdebian-sys-maintパスワードを自動的に変更することはありません。実際、そのファイルもバックアップしていない限り、おそらくそのパスワードが何であるかさえ知らないでしょう!

mysql rootパスワードのリセット(オプション)

まず最初に。mysqlのルートパスワードが古いサーバーと新しいサーバーで異なっていた場合、mysqladminを使用して修正できます。

mysql -p -u root password 'newpassword'

ただし、apt-getをインストールしてmysql-serverをインストールすると、おそらく新しいmysqlルートパスワードの入力が求められ、おそらく以前と同じパスワードを使用したことになります。

debian sys maintパスワードを修正します。

そこで、新しいサーバーにインストールしたときにdebianが作成したdebian sys maintパスワードを調べます。(これは高度に保護されたファイルである必要があるため、sudoが必要です。)

sudo cat /etc/mysql/debian.cnf

次に、上記で設定したルートパスワードを使用してmysqlにログインします。

mysql -p -u root   # use your new password when prompted

debian-sys-maintユーザーのパスワードをリセットし、特権をフラッシュすることを忘れないでください:

>  SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('samepassword');
>  FLUSH PRIVILEGES;
>  QUIT

動作することを確認するためのテスト:

sudo /etc/init.d/mysql restart

簡単なヒント

サーバーを停止することなくサーバーのrootパスワードをリセットする必要がある場合、このユーザーアカウントにはそれを行う権限があります。debian.cnfファイルをcatして、そのユーザーでログインするだけです。NBこのユーザーアカウントは、rootと同様に保護してください。


2
ジェイミーソン、ありがとうございます。
-slhck

1
素晴らしい、そして大歓迎です!私は認めようとするよりも頻繁にそのファイルにフォールバックしなければなりませんでした;)
ジェイミーソンベッカー14年

1
素晴らしい答え。私の場合、データベースダンプ(およびそれを使用してrootパスワード)をインポートすることがまさにその理由でした。唯一の違いは、debian.cnfファイルが「debian-sys-maint」ではなくmysqlの「root」ユーザーを使用したことです。debian.cnfにルートパスワードを入力するだけで、「service mysql <command>」でmysqlを制御できるようになりました。
トマスP.シナルスキー

6

さらに2つのヒント:

sh -x /etc/init.d/mysql restart

これにより、initスクリプトによって実行されるコマンドが表示されます。

パッケージdebsumsをインストールすると、どのパッケージが変更されたかをテストできます(検証はRPMでも利用できますが、IMHOの方がうまく機能します)。


1
私はOPと同じ問題を抱えていたし、このコマンドを実行すると、提案"Access denied for user 'debian-sys-maint'@'localhost'"は絶対に正しいだった、:私のMySQLデータベースがまだ割り当てられていなかったすべての権限を、そうmysql stopシャットダウンするデータベース自体の権限を持っていませんでした。マニュアルmysqladmin shutdownは完璧に機能しました。
ジェボン

5
pkill mysql

間違いなく動作します


これが私の質問「mysqlデータベースサーバーmysqldの停止に失敗しました」を解決したものです。100万ポイントを獲得できます!
ハンスワッシンク

2

パッケージがやや奇妙だと仮定すると、問題はpidファイルである可能性があります。新しいパッケージまたはコンパイルされたインストールが/ var / run / mysql /またはpidファイルが書き込まれるDebianの標準を作成していないか、initスクリプトが別の場所でmysqld.pidファイルを探していると思われます。init / pidファイルの不一致を修正できれば、おそらく動作するはずです。


initスクリプトは、サーバーを停止するためにpidファイルを使用しません。
theotherreceive

2

mysqlシャットダウンスクリプトは、/ etc / mysql / debian.cnfからユーザーのパスワードを読み取ることにより、debian-sys-maintユーザーを使用して「mysqladmin shutdown」を実行します。このファイルが存在すること、およびこのユーザーとしてmysqladmin shutdownを実行できることを確認する必要があります。


1

技術的には次のように終了できます。

pkill -9 mysqld

しかし、データを失う可能性がありますか?

http://www.serverfault.comで誰かに尋ねた方がいいかもしれません


私はそれをそのように行うことを知っていますが、私が定期的にやろうとしていることではありません。
デレクオルガン

1

「pkill mysql」を使用すると、特に「pkill -9」として呼び出された場合、データが失われる可能性があります:(

また、「sh -x」を使用してinitスクリプトの問題を確認することをお勧めします。また、MySQLのエラーログ(/ var / log / mysql または / var / lib / mysql、構成に依存します)本当に長時間実行されているクエリなどに引っかかっているので、まだ優雅に終了しないかどうかを確認します。


1

あなたの質問に対するコメントをフォローアップするために、私は完全な答えを書き留めます:

問題は、デフォルトのソケットが/tmp/mysql.sockMySQLソース/var/run/mysqld/mysqld.sockとDebianバイナリにあることです。

ソリューションは、ソケットパスを修正することである/etc/mysql/debian.cnf良いを提供することで、socket=。または、それを維持することにより、で変更し/etc/mysql/my.cnfます。

これを見つけた方法は次のとおりです。/etc/init.d/mysql«failed»メッセージが表示されると、次の行が呼び出されます。

echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug

これは、私を指摘$MYADMIN pingしています、mysqladmin --defaults-file=/etc/mysql/debian.cnf ping。このコマンドの実行は次で終了します:

/ usr / bin / mysqladmin:「localhost」のサーバーへの接続に失敗しました

エラー: 'ソケット' /var/run/mysqld/mysqld.sock '(2)'を介してローカルMySQLサーバーに接続できません

mysqldが実行中であり、ソケット「/var/run/mysqld/mysqld.sock」が存在することを確認してください!

それで、私は/etc/mysql/debian.cnfそれを見て、それが悪いソケットであることがわかりました。



0

debianでmysql(および他のほとんどのサービス)の停止を開始するには、スーパーユーザーである必要があります。

あなたが既にあるかどうかわからない...そうでない場合、あなたはのいずれかを行う必要があります

  • ルートとしてログイン
  • /etc/init.d/mysql restartコマンドの前にsudoを置きます(パスワードを尋ねられます。sudoersグループに所属する必要があります)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.