フリーソフトウェアのコンパイル

MySQL 4.1 より以前のバージョンのデータを MySQL 5.X に移行する.

ちょっと強引版

(1) データのリストア

バックアップデータから MySQL のデータ(/var/lib/mysql)をリストアします.

(2) MySQL を起動

一旦,MySQL を起動します.

(3) ユーザデータベースの権限調整

MySQL 4.1 から,ユーザのパスワードの格納方法が変わったため, 以下のコマンドを実行し,ユーザデータベースを調整します. (XXXXX には MySQL の root のパスワードが入ります.)

# mysql_fix_privilege_tables --password=XXXXX

(4) 設定ファイルの修正

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 の長さ変更

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 の設定

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 のダンプをとって行う

DB ダンプ

# /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 アップデート後リストア

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

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-10-01 (木) 17:02:14