MySQL 是一個常用的關系型數據庫管理系統,支持多種操作系統,也是世界上最流行的開源數據庫之一。在數據庫管理中,數據丟失是一個非常嚴重的問題。幸運的是,MySQL 提供了一種稱為 Point-in-Time Recovery (PITR) 的技術來進行數據丟失的還原。
在 MySQL 中,PITR 可以通過參數設置和日志文件恢復來實現。其中最重要的參數是 binlog_format,它規定了 MySQL 服務器在將更新寫入二進制日志(binary log)時所使用的格式。PITR 還需要事務日志,因此我們需要啟用查詢日志和事務日志。
[mysqld] log-bin=mysql-bin binlog-format=row log-slave-updates max-binlog-size=100M expire-logs-days=90
上面的配置將啟用二進制日志,使用行格式記錄事務信息,并設置了最大二進制日志大小和日志過期時間。查詢日志和事務日志的啟用可以在 mysql 運行時動態開啟:
mysql>SET GLOBAL general_log = 'ON'; mysql>SET GLOBAL innodb_status_output=1;
通過使用這些參數,我們可以將 MySQL 數據庫還原到一個更早的點。首先,我們需要找到最后一個完整的備份和日志文件。然后,我們執行以下操作來進行數據庫還原:
mysqlbinlog --start-datetime='2018-01-01 00:00:00' --stop-datetime='2018-01-02 00:00:00' mysql-bin.000001 | mysql -u root -p new_database
上述命令將在時間段內解碼日志文件并將其重定向到新的數據庫。如果需要恢復到一個特定的事務,則可以使用以下命令:
mysqlbinlog mysql-bin.000001 | grep '### begin transaction' -B 1 | awk '{print $4}' | head -n 1 | xargs -I "F" mysqlbinlog --start-position=F mysql-bin.000001 | mysql -u root -p new_database
以上命令將在時間點前查找基礎事務,并根據該事務的位置應用所有日志條目。
上一篇mysql purage
下一篇mysql putty