mysql_upgrade を実行する

昨日MySQLをアップグレードしたんですが、いろいろすったもんだした挙句、無事に動いていると思っていました。

しかし、ログをよく確認すると以下のようなログが。。。

110420 21:20:14 [ERROR] Column count of mysql.
proc is wrong. Expected 20, found 16.
Created with MySQL 50044, now running 50511.
Please use mysql_upgrade to fix this error.

どうやら問題があるので mysql_upgrade をしてね。ということらしい。

mysql_upgrade とは?

MySQLのリファレンスに以下のようなページがありました。

MySQL のアップグレードでは、その度に、mysql_upgrade を実行します。これにより、データベース内のテーブルにおける最新の MySQL Server との互換性をチェックすることができます。該当テーブルが非互換の場合は、チェックの対象になり、問題があれば、そのテーブルを修正します。mysql_upgrade コマンドは、システム テーブルのアップグレードも行うため、新たな権限と追加機能を使用できるようになります。

MySQLをアップグレードしたら、mysql_upgradeをしてね。だそうです。知らんかった。

mysql_upgrade のやり方

mysqld が起動している状態で以下のコマンドを実行する。

mysql_upgrade -u root -p

-p はパスワードプロンプトを出してねという意味なので、環境に応じて。

というわけで、エラーログもでなくなりました。

MySQL5.5.3にアップグレードしたら再起動に失敗した。

本日、yumでアップデートを行ったところMySQLが起動しなくなって、そりゃーもうあせりました。

  • OSはCentOS5.x。
  • アップデート後のMySQLのバージョンは、mysql-server-5.5.11-1.el5

エラーログ

すぐにログを確認したところ、以下ようなログが残っていました。

/var/log/mysqld.log

[ERROR] /usr/libexec/mysqld: unknown variable 'default-character-set=utf8'

取り急ぎ/etc/my.cnfから該当する行をコメントアウトして再起動したら無事に復活。

原因

いつものとおりGoogle先生に聞いたら以下のような記述がありました。

[url2link url="http://www.mysql.gr.jp/frame/modules/news/article.php?storyid=175" summary="- いくつかの非推奨だった変数やコマンド、オプションなどが廃止になっています。特に TYPE を廃止して今後は ENGINE を使用することや、サーバの default-character-set オプションを廃止して今後は character-set-server を使用すること(クライアントの default-character-set はそのまま)など影響を受ける方も多いでしょう。"]

というわけで、[mysqld] ディテクティブの default-char-set を character-set-server に変更したら無事に再起動ができました。

ただし、[client] ディレクティブの default-charset は従来通りなので間違えないようにしましょう。

その他の廃止項目

他にも廃止となったり過去のバージョンですでに非推奨となっている項目があるようです。

アップデートする予定がなくても、今のうちに書き換えておいたほうがベターなようです。

http://d.hatena.ne.jp/sakaik/20100414/mysql533obsol

yumで依存関係のエラー

インストール直後のCentOS5.2で、yum updateとしたところ、依存関係のエラーがでた。

Error: Missing Dependency: dbus-glib >= 0.73-6 is needed by package NetworkManager-glib
Error: Missing Dependency: dbus >= 1.1 is needed by package NetworkManager-glib
Error: Missing Dependency: dbus >= 1.1 is needed by package NetworkManager
Error: Missing Dependency: dbus-glib >= 0.73-6 is needed by package NetworkManager
Error: kernel conflicts with ecryptfs-utils < 44

一晩寝て起きたら神の啓示が。。。

「ミラーサーバーがおかしいんちゃうの?」

さっそく、/etc/yum.repos.d/CentOS-Base.repoを開いて以下の通り修正したら解決。

  1. 各リポジトリのmirrorlistをコメントアウト
  2. baseurlをアンコメント

サードパーティーのリポジトリ追加したりとか、エラーがあるパッケージを削除したりとか、深みにはまらなくてよかった。

yum update後に、/etc/yum.repos.d/CentOS-Base.repoを念のため元に戻した。