TL;DR
- それ、S3でできるらしいよ
- S3を使わない範囲でファイルサーバにMySQLのバックアップを置きたい
普段から使っていたのはファイルサーバー側でポートを開いてリダイレクトしちゃう。実際にはもう少し「ランダムにポートを開いてその番号を教えてくれるスクリプトだけをssh越しに実行させる」とか「curlで叩くとトークン検証してランダムにポートを開いてその番号を教えてくれるAppにする」とかの工夫はできる。
nc -l 13306 > /path/to/myfile
バックアップはリモートから書き込む。bash使いなので /dev/tcp
は好き。
xtrabackup -S /usr/mysql/8.4.5/data/mysql.sock -uroot --backup --stream=xbstream | pv > /dev/tcp/file_server/13306
書き込みが終わる(異常終了を含む)とncプロセスは落ちるので再利用のためにはレシーバー側でncの再実行が必要。そのタイミングでリダイレクト先のファイル名を変更できるので上書きも回避できる(noclobberでエラーにするか、別のファイルとして受けるかの違いではある)
もし通信経路を通す前に圧縮したいなら送信元で圧縮すればいいし、
xtrabackup -S /usr/mysql/8.4.5/data/mysql.sock -uroot --backup --stream=xbstream | pzstd -c | pv > /dev/tcp/file_server/13306
受信側でそのまま展開したいならncからパイプしてやればいい(xbstreamまではパイプで繋げるけどxtrabackup —prepareは別でやらないといけない)
nc -l 13306 | pzstd -dc | xbstream -x
受ける側でパスワードをかけたりもした(ランダムに推測不可能なものを作ってDBAにだけメールしてた気がする)
nc -l 13306 | openssl aes-256-cbc -pbkdf2 -e -pass pass:something > /tmp/myfile.enc
$ file /tmp/myfile.enc
/tmp/myfile.enc: openssl enc'd data with salted password
$ openssl aes-256-cbc -pbkdf2 -d -in /tmp/myfile.enc -out /tmp/myfile
enter AES-256-CBC decryption password:
$ pzstd -dc /tmp/myfile | xbstream -x
/tmp/myfile : 75159378 bytes
デーモンにしたりすると面倒だけど後々が楽。。
0 件のコメント :
コメントを投稿