Mysql5.0→5.1にアップブレードしてみました

Mysql5.0→5.1にアップブレードしてみました。

■既存データのバックアップをとる。
データベースのバックアップをまずとってみました。
mysqldump -u root -p root -x --all-databases > /home/adachi/dump.sql

  • xでテーブルロック、--all-databasesでバックアップに「CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;」が出力されるとのこと。ところでmysqldumpを検索してみると、結果を.sqlと.dmpで出しているんですが、dmpってなんだろ。。

一度調べてみないと。
アンインストールする時にmy.cnfも消される恐れがあるのでコピーしておく。
デフォルトだと/etc/my.cnfにあるので、それをどこか別のとこにコピー。


既に入っている5.0とその5.0と依存関係のあるパッケージを全て消します。
残っていると正常に5.1がインストールできないので。
yum remove mysql
これでアンインストール完了。
依存関係のあるパッケージがちゃんと消えているかどうか、確認するには↓を実行。
rpm -qa |grep -i mysql
rpmに-qaオプションを付けるとインストールされているすべてのパッケージを表示させます。
その結果から「mysql」という文字列のあるパッケージを検索するgrepをパイプでつなげてます。
まだ何か残っている時はこの時出るはず。

依存関係のあるパッケージも入れたいので、再度インストールする時はrpmを使ってインストールします。
ひとまずMySQLのdownloadで5.1のrpm探してみました。
そしたらなんか色々rpmあって、何が何だかわからないので、ひとまずそれぞれ何なのか調べてみた。
MySQL-server-VERSION.i386.rpm
MySQL サーバ。別のマシンで動作している MySQL サーバに接続する際にのみこれが必要です。
注:MySQL 4.0.10 以前はサーバ RPM ファイルは MySQL-VERSION.i386.rpm と呼ばれていました。つまり、 -server がその名前にありませんでした。
MySQL-client-VERSION.i386.rpm
標準の MySQL クライアント プログラムこのパッケージは常にインストールの希望があるパッケージです。
MySQL-bench-VERSION.i386.rpm
テストおよびベンチマークPerlDBI および DBD::mysql モジュールが必要です。
MySQL-devel-VERSION.i386.rpm
Perl モジュールなど他の MySQL クライアントをコンパイルする際に必要なライブラリとファイルを含みます。
MySQL-shared-VERSION.i386.rpm
このパッケージには言語およびアプリケーションが動的にロードされ MySQL を使用する必要のある共有ライブラリ (libmysqlclient.so*) を含みます。それにはシングル スレッドとスレッド セーフのバイナリが含まれます。このパッケージをインストールする場合は、MySQL-shared-compat パッケージはインストールしないできださい。
MySQL-shared-compat-VERSION.i386.rpm
このパッケージには MySQL 3.23、4.0、4.1、および 5.1 の共有ライブラリが含まれています。それにはシングル スレッドとスレッド セーフのバイナリが含まれます。旧バージョンの MySQL に動的にリンクしたアプリケーションをインストールしていて現在のバージョンをライブラリの依存性を壊すことなくアップグレードを希望する際には MySQL-shared の代わりにこのパッケージをインストールします。
MySQL-embedded-VERSION.i386.rpm
埋め込み型 MySQL サーバライブラリ (MySQL 4.0 で利用可) です。
MySQL-VERSION.src.rpm
これにはすべての旧パッケージのソースコードが含まれています。他のアーキテクチャ (例えば、Alpha あるいは SPARC) で RPM をビルドする際にも使用できます。

全部入れる必要はないみたい。
参考にしていたサイトでは
MySQL-client-xxx.i386.rpm
MySQL-devel-xxx.i386.rpm
MySQL-shared-compat-xxx.i386.rpm
MySQL-server-xxx.i386.rpm
を入れてたので、それにならいます。
これらをwgetでもらってきて、適当なディレクトリに突っ込みます。
そしてこれらrmpを一括インストール。
rpm -Uvh MySQL-*.rpm

※ここで下記のように怒られていたら、sharedとshared-compatの両方をインストールしてます。
ファイル /usr/lib/libmysqlclient.so.16.0.0 は MySQL-shared-5.1.34-0.glibc23.i386MySQL-shared-compat-5.1.34-0.glibc23.i386 のインストールで競合しています。
リファレンスでも書いてあるように、sharedはshared-compatに含まれているのでインストールで衝突するのは当たり前。。
shared-compatを入れるのであればsharedは必要ないです。

そしたら結果がこうなりました↓
Starting MySQL....................................................................................................Manager of pid-file quit without updating file.[失敗]
インストールと同時に起動しているようですけど、起動で失敗。
じゃインストールちゃんとできてるのか?と思って出力されたものをみてみると上の方でこんなエラーが。
ERROR: 1136 Column count doesn't match value count at row 1
カラムの数が合わない、と。
何をやってるんだ?と思って調べてみるとInsertとかで指定したvalueとカラム数が合わない時に出るエラーらしい。
Insertしてるってことはテーブルはできてるって思われてるようなので、多分既存のテーブル見に行ってる?
ってことはテーブルが残ってるってことなので
find / -name 'mysql'
ってやってみたら
/var/lib/mysql
/var/lib/mysql/mysql
やっぱりデータ残ってた。。データは消してくれないんですね。。
yes | rm -r /var/lib/mysql/で消して再度チャレンジ。


準備中... ########################################### [100%]
1:MySQL-shared-compat ########################################### [ 25%]
2:MySQL-client ########################################### [ 50%]
3:MySQL-devel ########################################### [ 75%]
4:MySQL-server ########################################### [100%]
090507 15:17:41 [Warning] Forcing shutdown of 2 plugins
090507 15:17:41 [Warning] Forcing shutdown of 2 plugins

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h affiliate01.localdomain password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available at http://www.mysql.com/
Support MySQL by buying support/licenses from http://shop.mysql.com/

Starting MySQL...Manager of pid-file quit without updating file.[失敗]

またもや起動で失敗。
でも見てるとインストールは成功している様子。
で、色々調べてみるとlogにヒントが書いてあるらしい。
vi /var/log/mysqld.log
090507 15:17:42 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
090507 15:17:42 [ERROR] Do you already have another mysqld server running on port: 3306 ?
090507 15:17:42 [ERROR] Aborting
ぉ。すでにmysqlserverがいる?
ps ax | grep mysqlでプロセスを確認してみるとmysqlmysql_safeがいた。。。
ここで他の方がMySQL接続しっぱなしになっていたのでちょいと切ってもらいましたが、まだ生きてる。
とりあえずmysql_safeってなんだ?と思ってぐぐってみるとmysqlデーモンのことだとか。
そういえば自動起動にしてたけど、それのことかな?(違ってそう。
とりあえずデーモンを止めるために停止
mysqladmin shutdown
そしたら怒られた。
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!
…/var/lib/mysql/ってさっき消したし。。。
どうしようも出来なさそうなのでkillで消しました。。(汗
次からはちゃんとプロセス確認して止めてから消さないとだめですね。。
ps ax | grep mysqlやってもちゃんと消えてることを確認。
念のためfind / -name *.pid | grep mysqlでpidファイルが残ってないことも確認。
再度/etc/init.d/mysql startで開始してみたら、できた。
そしてversion確認。
mysql --version
mysql Ver 14.14 Distrib 5.1.34, for pc-linux-gnu (i686) using readline 5.1
ちゃんと上がってるb
最後に設定ファイル(my.cnf)を元に戻してあげればアップグレードはOK。
(my.cnfはどうやら書き変わらない様子。でも一応念のために残しておくのがよいと思います。)

リカバリ
下記コマンドでできます。
mysql -B -uroot -proot < /home/adachi/dump.sql

MySQLと依存関係のあるパッケージのインストール
消したので新たに入れなおします。
※以下はPHPの例
yum install php-mysql
これがないとphpからMySQLを使えません。
でもインストールしないまま動かしてもエラーが出ません…
Apacheを再起動した後で正常に動かなくなります。)

Apache等、MySQLと依存関係のあるものすべてを再起動
依存関係のあるパッケージも新しく入れなおしたので再起動します。