ホームページ  >  記事  >  データベース  >  オンライン データベースが誤って削除されたという悲しい話

オンライン データベースが誤って削除されたという悲しい話

coldplay.xixi
coldplay.xixi転載
2020-09-12 17:59:013539ブラウズ

オンライン データベースが誤って削除されたという悲しい話

関連する学習の推奨事項: mysql チュートリアル

序文

最近の学校シーズンのため、弊社は大学関連の業務も行っているため、とても忙しく記事を書く時間があまりありませんが、人は一度忙しすぎると、忙しさの中でミスをしてしまいがちです。私に関して言えば、つい数日前、いや、私の友人が数日前にオンラインデータベースを操作していたところ、データベースの削除を実行されそうになって逃走しました。

オンライン データベースが誤って削除されたという悲しい話

事前に注意してください: 彼は実際には私の友人であり、私ではありません。それは本当に私の友人であり、私ではありません。それは本当に私の友人であり、私ではありません。ただし、説明の便宜上、以下では「私の友人」を「私」と呼びます。

いくつかのテーブル構造を比較してみたところ、このライブラリと他のライブラリのテーブル構造が大きく異なっていたため、この環境では使用されていないのではないかと思い、直接比較してみました。これらのテーブルの上書き操作が行われたのですが、たまたまこれらのテーブルが学生の財布に関係していたので、夕方10時頃、会社の第一線のスタッフがなぜ財布の中のお金が0になったのかをグループで報告しました。 . これを見た瞬間、私は怖くておしっこをしてしまい、逃げるべきか迷いました。

オンライン データベースが誤って削除されたという悲しい話

幸いなことに、私はいくつかのデータベース回復計画を見てきており、それらについてはまだ少し知っています。

データ回復

1. binlog ログを有効にする

データを回復するために binlog ログを使用します。binlog を使用するには、まず binlog ログが有効になっていることを確認する必要があります。コマンドを使用して表示できます。

show variables like 'log_%';复制代码
オンライン データベースが誤って削除されたという悲しい話

ON 状態になっていることがわかり、電源が入っていることがわかります。OFF 状態の場合は、 .cnf [mysqld]構成を追加した後、mysql サービスを再起動して有効にします。

# my.cnf文件
[mysqld]
log-bin=mysql-bin
server-id=1复制代码

2. binlog ログを確認する

binlog 日を開いた後、コマンドを通じて binlog ログのステータスを確認できることを確認してください。

# 查看binlog日志的目录show master status;复制代码
オンライン データベースが誤って削除されたという悲しい話
# 查看binlog日志内容show binlog events IN 'mysql-bin.000002';复制代码
オンライン データベースが誤って削除されたという悲しい話
  • Log_name は binlog ログ名を表します
  • Pos は pos の開始点を表します
  • Event_type は、この操作のタイプを表します。
  • Server_id は、my.cnf の構成で指定されたマシン ID を表します。
  • End_log_pos は、pos エンドポイントを表します
  • Info は特定のステートメントを表します
オンライン データベースが誤って削除されたという悲しい話
# 进入存储binlog日志的文件木了,可以通过这条命令查看详情
 mysqlbinlog --base64-output=decode-rows -v mysql-bin.000002;复制代码
オンライン データベースが誤って削除されたという悲しい話
# 将binlog日志转为txt导出
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000002 > sql.txt复制代码

3. データの復元

データを復元する場合binlog ログから、コマンド ラインの回復が一般的に使用されます。または、binlog ログをコピーし、binlog 読み取りツールを使用してそれを .sql ファイルに変換し、使用する必要があるすべての SQL をコピーして再実行する方法です。 . ここでの主な焦点は、コマンド ラインの回復方法です。

コマンドラインリカバリは主にbinlogログを確認し、復元する開始点と終了点を確認し、復元するコマンドを入力することで行われます。または、ミスをした時間を推定し、一定期間内にデータを回復します。

# 通过起始点和结束点恢复    
mysqlbinlog --start-position="582" --stop-position="9414" mysql-bin.000002 | mysql -uroot -proot;复制代码
# 通过起始时间和结束时间来恢复,传入的时间可以是一个yyyy-MM-dd HH:mm:ss 的时间格式,也可以是一个时间戳
mysqlbinlog --start-datetime="2020-9-1 8:25:04" --stop-datetime="2020-9-1 20:00:00" mysql-bin.000002 | mysql -uroot -proot复制代码
オンライン データベースが誤って削除されたという悲しい話
オンライン データベースが誤って削除されたという悲しい話
##ご覧のとおり、回復コマンドを入力した後、データベースをクリアしました。データが戻ってきました。

4. 問題

binlog ログはデータを回復できますが、問題もあり、binlog ログが増加し続けると自動的に削除され、その結果、ファイルの一部が削除されてしまいます。データは復元できません。

ただし、binlog ログのサイズと保存時間は mysql で設定できます。ただし、問題が発生しないように毎日バックアップを作成することをお勧めします。

# 设置文件大小,单位是字节,下面换算是100Mset global max_binlog_size=104857600;

# 设置文件保存天数,下面是保存7天,默认值为0,表示"没有自动删除"set global expire_logs_days = 7;复制代码

每日备份

对于线上环境来说,做好每日备份和binlog一起用才是王道。线上一般都是部署在linux上的,所以这里就简单列一下linux的定时备份方法。

1.检查是否安装定时任务,安装crontab

yum install crontabs复制代码

2.设置定时任务

/var/spool/cron/root  此文件为crontab定时任务,可通过crontab -e或者直接修改此文件修改.

crontab -l查看定时任务.

3.创建一个shell脚本

touch xxx.sh

mysqldump -uroot -p"密码" 数据库名 > /mysql/person_`date +%Y%m%d`.sql复制代码

4.修改文件权限

chmod 777 xxx.sh

5.打开定时任务文件

crontab -e

每天凌晨2点执行
00 2 * * * /xxx.sh复制代码

完结!

想了解更多编程学习,敬请关注php培训栏目!

以上がオンライン データベースが誤って削除されたという悲しい話の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。