MySQL導入ガイド

アップグレード、ダウングレード

アップデートのリリース

MySQL のアップデート時には次のポリシーが使われています。

  • それぞれのマイナーアップデートで、バージョン文字列中の最後の数値が増加する。主要な新機能や前のバージョンとのマイナーな非互換があった時には、バージョン文字列中の2番目の数値が増加する。また、ファイル形式が変更した時、最初の数値が増加する。
  • 安定にテストされたリリースは年に約 1、2
    回公開。その他、必要に応じてバグフィックスされたリリースを公開。
  • 作業中のリリースは約 1、8 週間毎に公開。
  • いくつかのプラットフォームのためのバイナリ配布も行っている。
  • バグ修正後、パッチを公開。
  • 危険ではないがやっかいなバグは、TCXに通知すればパッチが作成される。その他の場合、製作中のパッチに含められる。

MySQLのアップグレード/ダウングレード

MySQL のリコンパイルによって文字セットが変更する場合、全てのテーブルにmyisamchk -r -q --set-character-set=charsetを行なう必要があります。そうしなければ、インデックスが正しい順になりません。

アップグレード時には、古いデータベースをバックアップもしておくべきです。もし新しいmysqldが予期せぬ何かを行った場合、それをシャットダウンし、古いmysqldを再起動することができます。

アップグレード後、再コンパイルされたクライアントプログラムで、予期せぬ問題が起きる場合、プログラムのコンパイル時に古いヘッダやライブラリファイルを使用している可能性があります。この場合、mysql.hファイルとlibmysql.a ライブラリが、新しい MySQL配布からのものであるかどうかを確かめるために、日付をチェックしましょう。もし違っていれば、プログラムを再コンパイルします。

もし新しいmysqldサーバーが起動できないとか、パスワード無しで接続できないといった問題が発生した場合、以前のインストールでできた古いmy.cnfファイルがあるかどうかを確認しましょう。program-name --print-defaultsで確認できます。
もしこの出力がプログラムの名称以外の物を返した場合、有効になっているmy.cnfファイルがあります。

新しいリリースのMySQLをインストールした場合に常にMsql-Mysql-modulesを再構築、再インストールしたほうが良いでしょう。すべての DBI スクリプトが MySQLのアップグレード後にコアダンプする兆候に気づいた場合は、特にそうしましょう。

MySQL 4.0 パッケージのインストール中に、"libmysqlclient.so.10 is
needed by ...
"といったような依存関係エラーが発生した場合、MySQL-shared-compatパッケージもインストールする必要があります。このパッケージには、下位互換性のために両方の共有ライブラリ(MySQL
4.0 の libmysqlclient.so.12 と MySQL 3.23 の
libmysqlclient.so.10
)が含まれています。

あと、無事にMySQLがインストールできたけど、今まで使っていたプログラムでSQL関連のエラーが出るようになった、という場合は、予約語を調べよう。新しいバージョンで追加された予約語を使っている場合、予約語となっているフィールド名などを
` で囲んであげると良いでしょう。

select `check` from table;

他のアーキテクチャへのアップグレード

もし、MySQL 3.23 を使用しているならば、違うアーキテクチャのマシンに、".frm"、".MYI"、".MYD" ファイルをコピーすることができます。ただし、両者間で、同じ浮動小数点のフォーマットをサポートしている場合に限ります。

現在 MySQL データとインデックスファイル (ISAM "*.ISD" と "*.ISM" ファイル) はアーキテクチャ依存で、いくつかのケースでは OS 依存です。アプリケーションを、現在のマシンとは異なるアーキテクチャ/OS を持つ他のマシンに移したい場合は、mysqldump を使用します。

有効なオプションが何かを見るためには、mysqldump --help を試しましょう。データを MySQL のより新しいバージョンに移す場合、速くコンパクトなダンプを得るために、より新しいバージョンで mysqldump --opt を使用します。

2つのマシン間でデータベースを移動する最も簡単な方法は、データベースが置かれているマシン上で次のコマンドを実行することです。

> mysqladmin -h '任意のホスト名' create
データベース名
> mysqldump --opt データベース名 | mysql -h '任意のホスト名' データベース名

遅いネットワーク上でリモートマシンからデータベースをコピーしたい場合

> mysqladmin create データベース名
> mysqldump -h '任意のホスト名' --opt --compress データベース名 |
mysql データベース名

ファイル内の結果を格納(この例では圧縮されている)

> mysqldump --quick データベース名 | gzip >
データベース名.contents.gz

データベースの中身を含んでいるファイルを、目的のマシンに転送して、次のコマンドを実行

> mysqladmin create データベース名
> gunzip < データベース名.contents.gz | mysql データベース名

データベース転送を実行するために、mysqldump と mysqlimport も使用できます。大きなテーブルでは、これは単純な mysqldump の使用よりもとても速いです。次に示すコマンドでは、DUMPDIR は mysqldump からの出力を格納するために使用するディレクトリの完全なパス名を表わしています。 

まず、出力ファイルのためのディレクトリを作成して、データベースをダンプします。

> mkdir DUMPDIR
> mysqldump --tab=DUMPDIR データベース名

それから、DUMPDIR ディレクトリ内のファイルを目的のマシン上の対応するディレクトリに転送し、MySQL にファイルをロードします。

・データベースの作成
> mysqladmin create データベース名

・テーブルの作成
> cat DUMPDIR/*.sql | mysql データベース名

・テーブルにデータをインポート
> mysqlimport データベース名 DUMPDIR/*.txt

mysql データベースのコピーも忘れないようにしましょう。承認テーブル (user, db, host) が格納されています。 mysql データベースをその場所に置くまで、新しいマシン上では MySQL root ユーザとしてコマンドを実行する必要があります。

新しいマシン上へ mysql データベースを導入した後、サーバが承認テーブル情報を再ロードするために、mysqladmin flush-privileges を実行します。

関連記事