DTIサーバー構築34 「新しい場所で再出発!」

MySQLのバックアップとリストアでデータベースを移行しよう。

だが!
バックアップ元のシステムの文字コードがlatin1、データベースがUTF-8となっていて、

バックアップ先のシステムとデータベースがUTF-8の時、
文字化けが発生するので、いろいろ大変。
具体的には、

$ mysql -u myswluser -p

バックアップ元の文字コード

mysql> show variables like ‘collation%’;
+———————-+——————-+
| Variable_name        | Value             |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE ‘char%’;
+————————–+—————————-+
| Variable_name            | Value                      |
+————————–+—————————-+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                      |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)

バックアップ先の文字コード

mysql> show variables like ‘collation%’;
+———————-+—————–+
| Variable_name        | Value           |
+———————-+—————–+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+———————-+—————–+
3 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE ‘char%’;+————————–+—————————-+| Variable_name            | Value                      |+————————–+—————————-+| character_set_client     | utf8                       || character_set_connection | utf8                       || character_set_database   | utf8                       || character_set_filesystem | binary                     || character_set_results    | utf8                       || character_set_server     | utf8                       || character_set_system     | utf8                       || character_sets_dir       | /usr/share/mysql/charsets/ |+————————–+—————————-+8 rows in set (0.00 sec)

まず、mysqldumpで文字コードにlatin1を指定する。

$ sudo mysqldump -u username -p –default-character-set=latin1 dbname > dump.sql
 ファイル中のlatin1の部分をutf8に置換。

$ sed -i -e ‘s/SET NAMES latin1/SET NAMES utf8/g’ dump.sql

リストア先で

$ mysql -u mysqluser -p dbname < dump.sql

★DTIサーバー構築一覧はこちら★

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です