#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