#author("2019-02-22T01:19:23+00:00","default:wikiadmin","wikiadmin")
#contents

*mysqldump [#d40500ab]

-指定されたDB/Tableについて、SQLを吐き出すだけ。単純だがSQLなので汎用性がたかいね。

**一貫性を保つために [#reaa0d8d]

5.7より前(つまり2019年でも)一貫性を保つためにmysqldumpのオプション指定が必要

**オプション一覧 [#p5aa1d11]

|mysqldump --all-databases --lock-all-tables|全テーブルロックで一番安全。ダンプ中に処理が走る場合は下の選択肢|
|mysqldump --all-databases --single-transaction|ダンプ中にMyIsamテーブルを更新しない、innoDBスキーマを変更しない|

*インポート、エクスポート [#a221f3ad]

**CSVインポート [#n9393c5b]

-デリミターを指定しない場合はタブ区切りとなる。
-日本語関係のフィールドをロードする場合はクライアントの文字コードをセットしておいた方が良いかも。

 LOAD DATA LOCAL INFILE 'car_import.csv' INTO TABLE テーブル名 FIELDS TERMINATED BY ',';

-フィールドを指定する場合

 LOAD DATA LOCAL INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

-autoincrement列を除外する場合はその列を除外すれば自動的に連番がふられる(insert分でも同様)

 LOAD DATA LOCAL INFILE 'test.txt' INTO TABLE test (col1);

*バックアップ&リカバリー [#e852c036]

**エクスポート [#e41d46fb]

標準出力にでるのでリダイレクトで保存すること。以下のコマンドを追加して、圧縮しつつバックアップを取るとよい。

 | gzip > dump.sql.gz

|単位|コマンド|備考|
|テーブル|mysqldump -u root -p --add-drop-table DB名 テーブル名|drop tableを入れるオプション付き|
|テーブル where条件付き|mysqldump -u root -p --add-drop-table DB名 テーブル名 --where 'is_delete = 0'|drop tableを入れるオプション付き|
|データベース|mysqldump -u root -p DB名|dropテーブルは自動で入るようなので、空じゃないDBに入れるときは既存データなくなる!|

**テーブル単位 [#la55d36c]

-主キーがかぶらないようにdrop tableして作り直す構文つきで出力

 mysqldump -u root -p --add-drop-table DB名 テーブル名 > /var/tmp/rooms.sql

-戻すときはデータベースの指定だけでOK

 mysql -u root -p DB名 < /var/tmp/rooms.sql

**データベース単位 [#lf547451]

***バックアップ [#b7780581]

-バックアップ対象はデータベースmysqlとし、出力ファイル名はmysql.sqlとする。

 mysqldump -u root -p データベース名 > mysql.sql

-危険を承知でパスワードをコマンドに入れてしまう場合はこちらで

 mysqldump -u root --password=パスワード データベース名 > mysql.sql

-圧縮しつつバックアップは以下の通り

 mysqldump -u root -p データベース名 | gzip > mysql.sql.gz

***リカバリー [#t7f42718]

-リカバリー対象データベースはcreateしておく。

 mysql> create database mysql2;
 mysql> exit
 mysql -u root -p mysql2 < mysql.sql

-圧縮したもののリカバリーは以下の通り

 zcat mysql.sql.gz  | mysql -u root -p データベース名

**全部のデータベース [#k87164b0]

***バックアップ [#bfdcb4d8]

-全部のデータベースを出力

 mysqldump -u root -x --all-databases > dump.sql 

***リカバリ [#d9c135f3]

-全部のデータベースをインポート(もとあるDBは名前がかぶらなければ残る)

 mysql -u root -p < dump.sql 

-リカバリーした後は''rootでログインして、flush privilegesすること''。さもないと移行されたユーザでログインできない。もしくはMySQLの再起動で反映される。



#counter

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS