Upgrade to 6.0.0 Squeeze, a problem about mysql-server

今更ながら, Debian を 5から6へ, lenny からsqueezeへupgrade.

apt-get update
apt-get dist-upgrade

すると, grub のバージョンが変わったからとりあえず古いやつから新しいやつをchain loadするとか, diskの命名法がUUIDに変わったとか, いろいろ怖そうなことを言われるが, 意外にも, reboot すると何の問題もなかった. mysql-server を除いては.

まずは /var/run/mysql/mysql.sock がないと言われる. 自分で作ってもよかったかもしれないが, 安直にも

apt-get remove --purge mysql-server; apt-get install mysql-server 

してみる.

hostname:/home/username# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
hostname:/home/username# ERROR 1577 (HY000) at line 1: Cannot proceed because system tables used by Event Scheduler were found damaged at server start

こんな方法で修正

hostname:/home/username# mysql_upgrade -u root -h localhost -p --verbose --force
Enter password: 
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock' '--host=localhost' 
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock' '--host=localhost' 
database.table                                     OK
(...)
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event
Error    : Can't find file: './mysql/event.frm' (errno: 13)
status   : Operation failed
mysql.func                                         OK
mysql.general_log
Error    : Can't find file: './mysql/general_log.frm' (errno: 13)
status   : Operation failed
mysql.help_category                                OK
(...)

ここで問題になっている .frm ファイルは, データベースのデータ本体らしいが, /var/lib/mysql/mysql のこと. ユーザデータではなく, mysqlがもともともつ管理用データベース. これらの owner:group が root:root になってるものだけ, このエラーを出していたので,他のものと同じ mysql:mysql に直したら, ErrorやWarningは出なくなった.