Skip to content

MySQLバックアップとリストア

inoue.h edited this page Aug 18, 2023 · 1 revision

Home > Software > ソフトウエア開発・PC管理のメモ帳 > this page (このページ)


MySQLデータベースのバックアップとリストア方法を個人的にメモしたものです



MySQL 5 以降の文字コード自動変換対策

端末の文字コードと、サーバの文字コードが違う場合、自動変換が勝手に掛かる。特に端末またはサーバのどちらかがlatin1文字コードの場合、7ビットに切り捨てられるため、データが破壊されてしまう。

文字コード設定の表示を行い、サーバ毎に違うと思われるこれらの設定を確認してから作業すること。

mysql> show variables like 'char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | ujis                             | 
| character_set_connection | ujis                             | 
| character_set_database   | ujis                             | 
| character_set_filesystem | binary                           | 
| character_set_results    | ujis                             | 
| character_set_server     | ujis                             | 
| character_set_system     | utf8                             | 
| character_sets_dir       | /usr/local/share/mysql/charsets/ | 
+--------------------------+----------------------------------+
8 rows in set (0.01 sec)

バックアップ時に --default-character-set=binary スイッチを付けて、文字コード自動変換を阻止すれば、問題が解決する場合が多い。

バックアップ

普通にバックアップ

 mysqldump --quote-names --host=MYSQL_SERVER --user=MYSQL_USER --password=PASSWORD /
  --default-character-set=binary DB_NAME > backup.sql

16進数を文字に変換してバックアップ(この方法を推奨)

 mysqldump --quote-names --host=MYSQL_SERVER --user=MYSQL_USER --password=PASSWORD /
  --default-character-set=binary --hex-blob DB_NAME > backup.sql

XML形式でバックアップ

 mysqldump --quote-names --host=MYSQL_SERVER --user=MYSQL_USER --password=PASSWORD /
  --default-character-set=binary --xml DB_NAME > backup.xml

リストア

リストア

 mysql --host=MYSQL_SERVER --user=MYSQL_USER --password=PASSWORD DB_NAME < backup.sql

XML形式バックアップファイルのリストア方法は、不明。