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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS