ユーザ用ツール

サイト用ツール


サイドバー

database:mariadb:backup

差分バックアップ

MariaDBにしてもMySQLにしてもmysqldumpコマンドでSQL DUMPが取れるのだけど、設定を少ししておく事で差分バックアップも可能 まず、設定ファイルにログを吐き出すように設定する

# vi /etc/my.cnf.d/server.cnf

[mariadb]のセクションに以下の様に追記する

[mariadb]
binlog_format = row
log-bin = mysql-bin
log-error = error.log
slow_query_log_file   = slow-queries.log
character-set-server = utf8mb4
default_storage_engine = InnoDB
binlog-ignore-db = mysql

設定を保存したらサービスを再起動する

# systemctl restart mariadb
# systemctl status mariadb -l

しかし、systemctlはstart/stop/restartしてもログが何も表示されないのでヤダヤダw

単純なラッピングしたBash Scriptを作ったので良いのだけど・・・自宅サーバのgitlabにでもアップしとこうw

しかし、gitlabのURLは書かない嫌がらせwww

話がそれた(^^;)

# mysqldump --user=root --password=ルートパスワード --single-transaction --master-data=2 --flush-logs --database t取得したいデータベース名 > fulldump.sql

–single-transactionはInnoDB互換であれば一貫性の取れたデータバックアップになるそうな

–master-data=2はロールフォワードリカバリにどのバイナリログを使えば良いかを取得したダンプに書込むって意味らしい

–flush-logsはログの内容をフラッシュした上でバイナリログをローテーションさせる・・・

で・・・うまくエラーなくコマンドが実行されるとfulldump.sqlってファイルが作成される。これはSQLコマンドがずらずら~と書かれたテキストファイルで、この中にどのバイナリファイルを使うかも書いてある。

※ データベースの管理用に作成したユーザとパスワードで実行したがエラーになって正常にダンプが取得出来なかったのでroot(管理者)ユーザじゃないとダメっぽい

# grep -i change fulldump.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=245;

で、このファイル名はわかったけど、どこに保存されてるんだって話(^^;)findコマンドで以下の様に検索すればすぐに見つかるけど/var/lib/mysql/はどのバージョンでも変わりないんじゃないかな。たぶんだけど・・・

# find / -name mysql-bin.000002

作成されたmysql-bin.000002はバイナリなのでcatとかで見ても意味不明

# mysqlbinlog /var/lib/mysql/mysql-bin.000002

とコマンドを実行するとバイナリファイルをSQL文に変換してくれる。あとはこれを元になったフルバックアップを戻した後に突っ込んでやればOK

# mysqlbinlog /var/lib/mysql/mysql-bin.000002 | mysql -uroot -p

戻すテストする環境を構築中なのでデータベース名の指定が必要かは未確認。テスト後に更新する(予定)

database/mariadb/backup.txt · 最終更新: 2019/01/07 06:17 by MIYAKO