MySQL 若想要回復某段區間的資料, 除了備份的資料外, binary log(bin-log) 也是另外一條路.
bin-log 是 DB 的所有 新增、刪除、修改 的 SQL 語法紀錄(主要是給 replication 用)
bin-log 啟用
- vim /etc/mysql/my.cnf
[mysqld]
log-bin = /var/lib/mysql/mysql-bin.* - /etc/init.d/mysql restart
查看 bin-log 內容
-
看 bin-log 的內容:
mysqlbinlog mysql-bin.000001 > /tmp/binlog-dump.sql
回復某段時間區間的資料
此段語法會將 2006/01/01 ~ 2007/12/24
的 SQL 語法都 dump 出來(前題當然是這段時間的 bin-log 沒有被砍掉過)
mysqlbinlog --start-date="2006-01-01 00:00:00" --stop-date="2007-12-24 00:00:00" /var/lib/mysql/mysql-bin.* > /tmp/mysql_restore.sql
通常使用是在 完整備份時間 + 區間資料還原, 以將資料回復~ 🙂
相關網頁文件
- MySQL :: Point-in-Time Data Recovery
- MySQL :: MySQL 5.1 Reference Manual :: 13.6.6.1 Forcing InnoDB Recovery
- MySQL :: MySQL 5.0 Reference Manual :: 5.2.3 The Binary Log
當 MySQL 掛掉時, 在 log 有時後會看到類似的資訊, 可由此知道 MySQL 的記憶體使用的算法.
key_buffer_size=0
read_buffer_size=258048
max_used_connections=0
max_threads=151
threads_connected=0
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 116190 K bytes of memory
A good article!