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コマンドが機能しないのかまだ知りません。
mysqladmin shutdown
サーバーをシャットダウンするために動作するはずです。
2つの可能性が考えられます。
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
を使用する必要があります...運がよかったかもしれません。
これは、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と同様に保護します。
さらに2つのヒント:
sh -x /etc/init.d/mysql restart
これにより、initスクリプトによって実行されたコマンドが表示されます。
パッケージdebsumsをインストールし、どのパッケージが変更されたかをテストできます(RPMでも検証を使用できますが、IMHOはより適切に機能します)。
pkill mysql
間違いなく動作します
パッケージが多少奇妙であると仮定すると、問題はpidファイルである可能性があります。新しいパッケージまたはコンパイルされたインストールでは、pidファイルが書き込まれる/ var/run/mysql /またはDebianの標準が作成されなかったか、initスクリプトが別の場所でmysqld.pidファイルを探していると思います。 init/pidファイルの不一致を修正できれば、おそらくうまくいくはずです。
Mysqlシャットダウンスクリプトは、/ etc/mysql/debian.cnfからユーザーのパスワードを読み取ることにより、debian-sys-maintユーザーを使用して「mysqladmin shutdown」を実行します。このファイルが存在すること、およびこのユーザーとしてmysqladmin shutdownを実行できることを確認する必要があります。
質問のコメントをフォローアップするために、完全な回答を書き留めます。
問題は、デフォルトのソケットが/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
そして、それが悪いソケットであることがわかりました。
「pkill mysql」を使用すると、特に「pkill -9」として呼び出された場合、データが失われる可能性があります:(
また、 'sh -x'を使用してinitスクリプトの問題を確認することをお勧めします。また、MySQLのエラーログ(/ var/log/mysqlまたは/ var/lib/mysql(設定によって異なります)really長時間実行されているクエリまたは何かでスタックしていて、正常に終了するつもりがないかどうかを確認しますまだ。
あなたは技術的にそれで終了することができます:
pkill -9 mysqld
しかし、データを失う可能性がありますか?
あなたはhttp://www.serverfault.comで誰かに尋ねた方がいいかもしれません
次のコマンドを使用します。
$ mysqladminシャットダウン
これは、あなたのケースでは/ usr/binディレクトリで利用できるはずです。
debianでmysql(およびその他のほとんどのサービス)の停止を開始するには、スーパーユーザーである必要があります。
あなたがすでにかどうかわからない...そうでない場合は、次のいずれかを行う必要があります