深入淺出mysql筆記
備份
mysqldump:
- ? 備份指定的數(shù)據(jù)庫,或者此數(shù)據(jù)庫中某些表
mysqldump [options] db_name [tables]
- ? 備份指定的一個(gè)或多個(gè)數(shù)據(jù)庫布朦。
mysqldump [options] --database DB1 [DB2 DB3...]
- ? 備份所有數(shù)據(jù)庫蜘渣。
mysqldump [options] --all-databases
完全恢復(fù)
- 從備份文件中恢復(fù)
mysql –uroot –p dbname < bakfile
- 將備份恢復(fù)后數(shù)據(jù)并不完整,還需要將備份后執(zhí)行的日志進(jìn)行重做
mysqlbinlog binlog-file | mysql -u root –pPASSWORD
- 使用 mysqlbinlog 恢復(fù)自 mysqldump 備份以來的 BINLOG驮肉。
mysqlbinlog localhost-bin.000015 | mysql -u root –p test
基于時(shí)間點(diǎn)恢復(fù)
由于誤操作,比如誤刪除了一張表,這時(shí)使用完全恢復(fù)是沒有用的辅辩,因?yàn)槿罩纠锩孢€存 在誤操作的語句,我們需要的是恢復(fù)到誤操作之前的狀態(tài)娃圆,然后跳過誤操作語句玫锋,再恢復(fù)后 面執(zhí)行的語句,完成我們的恢復(fù)讼呢。這種恢復(fù)叫不完全恢復(fù)撩鹿,在 MySQL 中,不完全恢復(fù)分為 基于時(shí)間點(diǎn)的恢復(fù)和基于位置的恢復(fù)悦屏。
- 如果上午 10 點(diǎn)發(fā)生了誤操作节沦,可以用以下語句用備份和 BINLOG 將數(shù)據(jù)恢復(fù)到故 障前:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 |mysql -uroot -pPASSWORD
- 跳過故障時(shí)的時(shí)間點(diǎn)键思,繼續(xù)執(zhí)行后面的 BINLOG,完成恢復(fù)
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456| mysql -u root -pPASSWORD
基于位置恢復(fù)
和基于時(shí)間點(diǎn)的恢復(fù)類似甫贯,但是更精確吼鳞,因?yàn)橥粋€(gè)時(shí)間點(diǎn)可能有很多條 SQL 語句同時(shí) 執(zhí)行〗懈椋恢復(fù)的操作步驟如下:
將某段時(shí)間內(nèi)的binlog導(dǎo)出
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
找到出錯(cuò)語句前后的位置號(hào)
恢復(fù)了以前的備份文件后赔桌,應(yīng)從命令行輸入下面內(nèi)容:
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
上面的第一行將恢復(fù)到停止位置為止的所有事務(wù)。下一行將恢復(fù)從給定的起始位置直到二進(jìn) 制日志結(jié)束的所有事務(wù)渴逻。因?yàn)?mysqlbinlog 的輸出包括每個(gè) SQL 語句記錄之前的 SET TIMESTAMP 語句纬乍,因此恢復(fù)的數(shù)據(jù)和相關(guān) MySQL 日志將反應(yīng)事務(wù)執(zhí)行的原時(shí)間。