RIGHT:[[フリーソフトウェアのコンパイル]]
MySQL 4.1 より以前のバージョンのデータを MySQL 5.X に移行する.
*ちょっと強引版 [#t18f4df4]
**(1) データのリストア [#bcb8b9bc]
バックアップデータから MySQL のデータ(/var/lib/mysql)をリストアします.
**(2) MySQL を起動 [#c7c153d1]
一旦,MySQL を起動します.
**(3) ユーザデータベースの権限調整 [#y0272df0]
MySQL 4.1 から,ユーザのパスワードの格納方法が変わったため,
以下のコマンドを実行し,ユーザデータベースを調整します.
(XXXXX には MySQL の root のパスワードが入ります.)
# mysql_fix_privilege_tables --password=XXXXX
**(4) 設定ファイルの修正 [#sd947ecc]
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 ← 追加
**(5) VARCHAR および CHAR の長さ変更 [#fa4044f8]
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
**(6) テーブルのデフォルト charset の設定 [#g6d654c6]
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;
----
*DB のダンプをとって行う [#yad7656c]
**DB ダンプ [#ua8ea8a1]
# /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
**ダンプデータの修正 [#t3070676]
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 アップデート後リストア [#v68e9be0]
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
**後処理 [#a4fa5d17]
# /opt/mysql/mysql/bin/mysql_fix_privilege_tables --password=XXXXXX