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