バックアップと復元のメモ
特定のデータベースをバックアップ&復元する方法
mysqldumpでバックアップ&復元 - phpspot から。
バックアップ
$ mysqldump -u root -p データベース名 > dump.sql
復元
$ mysql -u root -p データベース名 < dump.sql
保存される場所は、今いるディレクトリの中。
特定のテーブルをバックアップ&復元する方法
MySQL テーブル単位でのデータバックアップ・復元 - スポンサー広告MYSQL から。
まずはMySQLクライアントを起動して、目的のテーブルがあるデータベースを開く。
$ mysql -u root -p ...この後パスワード入力 mysql> USE データベース名;
バックアップ
mysql> select * INTO OUTFILE 'dump.txt' from テーブル名;
復元
mysql> LOAD DATA INFILE 'dump.txt' INTO TABLE テーブル名;
私はAサーバからBサーバへのテーブル単位のデータ移動が目的だったんだけど、2つのエラーに直面したのでそれもメモ。
文字コードの違いによるエラー
ERROR 1366 (HY000): Incorrect string value: '\x00\x00\x00\x00\x00\x00...' for column 'name' at row 1
AサーバがUTF-8でBサーバがSJISになってた。
Bサーバの他のデータベースに影響が出ると困るので、特定のデータベースだけ文字コード変更。
データベース属性(文字セットと照合順序)を変更する(ALTER DATABASE文) | MySQLの使い方 を参考に。
ALTER DATABASE データベース名 CHARACTER SET utf8;
プライマリキーの重複
ERROR 1062 (23000): Duplicate entry 'X' for key 1
もともとBサーバにあったデータを、Aサーバで変更してBサーバに戻そうとしていたのでこうなった模様。
これの対処法は、MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.6 LOAD DATA INFILE 構文 を参考に。
mysql> LOAD DATA INFILE 'dump.txt' REPLACE INTO TABLE テーブル名;
このように、ファイル名の後に「REPLACE」キーワードを付けることで上書きが出来る。
その他、細かいこと
'〜〜〜〜/dump.txt' not found (Errcode: 2)
'〜〜〜〜'にファイルを移動するか、INFILEの前に「LOCAL」キーワードを付けて今いるディレクトリのファイルを参照させる。
mysql> LOAD DATA LOCAL INFILE 'dump.txt' REPLACE INTO TABLE テーブル名;
Access denied for user: 'xxxxx@localhost' (Using password: YES)
Access deniedエラー
ユーザにFILE 権限が有効化されていない。
(最初、データベース専用のユーザでやろうとしてこのエラーが出た。面倒だったのでrootでやった。)
という感じで、無事バックアップ&復元完了しました!