MySQL 4.1 より以前のバージョンのデータを MySQL 5.X に移行する.
バックアップデータから MySQL のデータ(/var/lib/mysql)をリストアします.
一旦,MySQL を起動します.
MySQL 4.1 から,ユーザのパスワードの格納方法が変わったため, 以下のコマンドを実行し,ユーザデータベースを調整します. (XXXXX には MySQL の root のパスワードが入ります.)
# mysql_fix_privilege_tables --password=XXXXX
MySQL を停止します.
バックアップから MySQL の設定ファイル(/etc/my.cnf)をリストアし,次のように修正します.
26行目から30行目
[mysqld] old-passwords ← 追加 datadir = /var/lib/mysql port = 3306 socket = /var/lib/mysql/mysql.sock
42行目から48行目
# language #language=/usr/share/mysql/japanese #language=/usr/share/mysql/korean #language=/usr/share/mysql/czech #default-character-set=euc-jp default-character-set=ujis ← 追加 skip-character-set-client-handshake ← 追加
74行目から84行目
[mysqldump] quick set-variable = max_allowed_packet=16M default-character-set = ujis ← 追加 skip-opt ← 追加 [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates default-character-set = ujis ← 追加
MySQL 4.1 から,VARCHAR() および CHAR() のマルチバイトを扱う際のサイズが変わったため, 以下の調整をします.
MySQL を起動し,http://www.mysql.gr.jp/frame/modules/bwiki/?Contrib#content_1_2 にあるスクリプト mysql_change_char_len.sh を実行します.
# sh mysql_change_char_len.sh --fix --user=root --password=XXXXX
MySQL 4.1 から,各データベース,テーブルにデフォルトの charset を 設定できるようになり, デフォルトの charset が設定されていない場合は,ログに warnning を吐き出します. これを抑制するため,以下のように各テーブルの設定を行います.
なお,デフォルトの charset は EUC(ujis) に設定しています.
# mysql -p Password: mysql> use aesmdb; ← 繰り返し,他のデータベースについても行います mysql> show tables; ← データベース内のテーブルのリストを表示します
表示されたテーブル名を次のコマンドに繰り返し入れていきます.
mysql> ALTER TABLE テーブル名 DEFAULT CHARCTER SET ujis COLLATE ujis_japanese_ci;
# /usr/sfw/bin/mysqldump --all-databases --add-drop-table -p > mysql4.dump # /opt/mysql5/bin/mysqldump --socket=/tmp/mysql5.sock \ --all-databases --add-drop-table -p > mysql5.dump
dump したデータのうち,
update tinyint(1) NOT NULL ... reads int(100) NOT NULL ...
などの行がバージョンアップした MySQL の syntax にあわないので
`update` tinyint(1) NOT NULL ... `reads` int(100) NOT NULL ...
と変更する(emacs で編集)
DB をアップデートした後,データベースを初期化して, ダンプデータをリストアする.
# /etc/rc3.d/S99mysql stop # rm -rf /var/mysql # mkdir /var/mysql # chown mysql:mysql /var/mysql # cd /var/lib/mysql # tar cvpf - . | (cd /var/mysql; tar xpf -) # /etc/rc3.d/S99mysql start # /opt/mysql/mysql/bin/mysql -p < mysql5.dump # /etc/rc3.d/S99mysql stop # /etc/rc3.d/S99mysql start # /opt/mysql/mysql/bin/mysql -p < mysql4.dump # /etc/rc3.d/S99mysql stop # /etc/rc3.d/S99mysql start
# /opt/mysql/mysql/bin/mysql_fix_privilege_tables --password=XXXXXX