web-dev-qa-db-ja.com

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

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 shutdownは機能しますが、なぜ/etc/init.d/mysqlコマンドが機能しないのかまだ知りません。

28
Derek Organ
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を使用する必要があります...運がよかったかもしれません。

25
freiheit

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

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

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

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

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

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

mysql -p -u root password 'newpassword'

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

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

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

Sudo cat /etc/mysql/debian.cnf

次に、上で設定したrootパスワードを使用して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し、そのユーザーでログインするだけです。 N.B.このユーザーアカウントをrootと同様に保護します。

22
Jamieson Becker

さらに2つのヒント:

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

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

パッケージdebsumsをインストールし、どのパッケージが変更されたかをテストできます(RPMでも検証を使用できますが、IMHOはより適切に機能します)。

6
elcuco
pkill mysql

間違いなく動作します

5
Jonathan

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

2
kashani

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

2
theotherreceive

質問のコメントをフォローアップするために、完全な回答を書き留めます。

問題は、デフォルトのソケットが/tmp/mysql.sock MySQLソース、および/var/run/mysqld/mysqld.sock Debianバイナリ。

解決策はソケットパスを修正することです in /etc/mysql/debian.cnf、良いsocket=。またはそれを維持することにより、その後/etc/mysql/my.cnf

これが私がこれを見つけた方法です:in /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そして、それが悪いソケットであることがわかりました。

1
Yvan

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

また、 'sh -x'を使用してinitスクリプトの問題を確認することをお勧めします。また、MySQLのエラーログ(/ var/log/mysqlまたは/ var/lib/mysql(設定によって異なります)really長時間実行されているクエリまたは何かでスタックしていて、正常に終了するつもりがないかどうかを確認しますまだ。

1
nixgeek

あなたは技術的にそれで終了することができます:

pkill -9 mysqld

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

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

1
John Kurlak

次のコマンドを使用します。

$ mysqladminシャットダウン

これは、あなたのケースでは/ usr/binディレクトリで利用できるはずです。

0
Masood Syed

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

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

  • rootとしてログイン
  • /etc/init.d/mysql restartコマンドの前にSudoを配置します(パスワードを要求され、sudoersグループに属している必要があります)
0
benlumley