バックアップ・リストア
バックアップ
バックアップを圧縮して取得する
mysqldump --all-databases -uroot -p"**********" | pv | gzip -c > /var/backup/database/SERVER.mysqldump.gz
※pvコマンドを挟んで処理したデータ量と転送スピードをリアルタイムで確認
リストア
フルダンプのデータから特定のテーブルのみをリストア
フルダンプファイルがexment-mysql-20210722-0532.mysqldump
だった場合の例
# csplit でファイルを分割(`xx〇〇`という〇〇が数値のファイル名に分割される) csplit exment-mysql-20210722-0532.mysqldump '/DROP TABLE IF EXISTS/' {*} # 対象のテーブルが含まれるファイルを探す(テーブル名をバッククォートで括る必要あり) grep -il 'create table `<テーブル名>`' * # 対象のファイルからDBを指定してリストア実施(文字コード指定せずに文字化けするのあるある) mysql --default-character-set=utf8 -u root -p"**********" exment_database < xx78
断片化した InnoDB テーブルを最適化
断片化の確認
- NextCloudの例(テーブル名としてnextcloudを指定した場合)
MariaDB [(none)]> SELECT table_schema, table_name, data_free, table_rows FROM information_schema.tables WHERE table_schema = 'nextcloud';
最適化
mysqlcheckコマンドを使った最適化
データベース指定
mysqlcheck -o <データベース名>
全てのデータベースに対して実施
mysqlcheck -uroot -p'**********' -o --all-databases
note : Table does not support optimize, doing recreate + analyze instead
というメッセージが表示されることがあるが、最適化は実施されているので問題なし
SQL(ALTER or OPTIMIZE)による最適化
テーブル単位なので全体に実施するにはループで回すなど一工夫がいりそう
ALTER TABLE <テーブル名> ENGINE INNODB; OPTIMIZE TABLE <テーブル名>;