深入淺出mysql筆記
備份
mysqldump:
- ? 備份指定的數據庫,或者此數據庫中某些表
mysqldump [options] db_name [tables]
- ? 備份指定的一個或多個數據庫。
mysqldump [options] --database DB1 [DB2 DB3...]
- ? 備份所有數據庫。
mysqldump [options] --all-databases
完全恢復
- 從備份文件中恢復
mysql –uroot –p dbname < bakfile
- 將備份恢復后數據并不完整,還需要將備份后執行的日志進行重做
mysqlbinlog binlog-file | mysql -u root –pPASSWORD
- 使用 mysqlbinlog 恢復自 mysqldump 備份以來的 BINLOG。
mysqlbinlog localhost-bin.000015 | mysql -u root –p test
基于時間點恢復
由于誤操作,比如誤刪除了一張表,這時使用完全恢復是沒有用的,因為日志里面還存 在誤操作的語句,我們需要的是恢復到誤操作之前的狀態,然后跳過誤操作語句,再恢復后 面執行的語句,完成我們的恢復。這種恢復叫不完全恢復,在 MySQL 中,不完全恢復分為 基于時間點的恢復和基于位置的恢復。
- 如果上午 10 點發生了誤操作,可以用以下語句用備份和 BINLOG 將數據恢復到故 障前:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 |mysql -uroot -pPASSWORD
- 跳過故障時的時間點,繼續執行后面的 BINLOG,完成恢復
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456| mysql -u root -pPASSWORD
基于位置恢復
和基于時間點的恢復類似,但是更精確,因為同一個時間點可能有很多條 SQL 語句同時 執行。恢復的操作步驟如下:
將某段時間內的binlog導出
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
找到出錯語句前后的位置號
恢復了以前的備份文件后,應從命令行輸入下面內容:
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 | mysql -u root -pPASSWORD
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 | mysql -u root -pmypwd
上面的第一行將恢復到停止位置為止的所有事務。下一行將恢復從給定的起始位置直到二進 制日志結束的所有事務。因為 mysqlbinlog 的輸出包括每個 SQL 語句記錄之前的 SET TIMESTAMP 語句,因此恢復的數據和相關 MySQL 日志將反應事務執行的原時間。