import

pvを挟んで進捗を見る

yum install pv
pv mysqldump.sql | mysql -uroot -phogehoge 
innodb_flush_log_at_trx_commit = 13:44
innodb_flush_log_at_trx_commit = 03:42
innodb_flush_log_at_trx_commit = 23:41
binlog無効3:03
xtrabackup16秒!

innodb_flush_log_at_trx_commitだけでは、binlog書き込みがボトルネックなので有意差なし。

MySQL Dump

# エラーは-fで無視する
mysql -u root -phogehoge -f < mysqldump.sql

Aurora

  1. Replication停止はできない

https://blog.manabusakai.com/2017/03/difference-between-mysql-and-aurora/

  1. Binlog停止はできる

https://helen.hatenablog.com/entry/2019/06/13/200022

mysqlpump

コマンド例

特定のDBかつ別ホストのDBかつ通信を圧縮するmysqlpump -u root -p -h 192.168.11.157 --databases cakephp --compress

Xtrabackup

xtrabackup --backup -u root -pパスワード --target-dir /tmp/backup

mariabackup

mariabackup --backup -u root -pパスワード --target-dir /tmp/backup
mariabackup --prepare --target-dir /tmp/backup
cat /tmp/backup/xtrabackup_binlog_info
systemctl stop mariadb
rm -rf /var/lib/mysql/*
mariabackup --copy-back --target-dir /tmp/backup
chown -R mysql:mysql /var/lib/mysql/*
systemctl start mariadb

mysqldump

オプション

一貫性を保つために

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

オプション一覧

mysqldump --all-databases --lock-all-tables全テーブルロックで一番安全。ダンプ中にアプリケーションから更新処理が走る場合は下の選択肢。xでも同じことだがあとで見た時に意味不明なのでやめる
mysqldump --all-databases --single-transactionダンプ中にMyIsamテーブルを更新しない、innoDBスキーマを変更しない
--flush-logsダンプ時にバイナリログをリセットする
--master-data=2バイナリログの位置をコメントで出力。レプリケーションやPITRに便利
--eventsイベント関連のテーブルを明示的にバックアップする。 --all-databasesをつけていると除外されてワーニングがでるので、一緒につけることが多い

インポート、エクスポート

CSVインポート

LOAD DATA LOCAL INFILE 'car_import.csv' INTO TABLE テーブル名 FIELDS TERMINATED BY ',';
LOAD DATA LOCAL INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);
LOAD DATA LOCAL INFILE 'test.txt' INTO TABLE test (col1);

バックアップ&リカバリー

エクスポート

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

| 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に入れるときは既存データなくなる!

スキーマのみ

テーブル単位

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

データベース単位

バックアップ

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

リカバリー

mysql> create database mysql2;
mysql> exit
mysql -u root -p mysql2 < mysql.sql
zcat mysql.sql.gz  | mysql -u root -p データベース名

全部のデータベース

バックアップ

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

リカバリ

mysql -u root -p < dump.sql 
Counter: 3114, today: 1, yesterday: 2

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