- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-02-22T01:19:23+00:00","default:wikiadmin","wikiadmin")
#author("2019-07-27T06:42:14+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に入れるときは既存データなくなる!|
***スキーマのみ [#a7d77090]
--no-dataのオプションをつける
**テーブル単位 [#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