重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
我們經常會遇到操作一張大表,發現操作時間過長或影響在線業務了,想要回退大表操作的場景。在我們停止大表操作之后,等待回滾是一個很漫長的過程,盡管你可能對知道一些縮短時間的方法,處于對生產環境數據完整性的敬畏,也會選擇不做介入。最終選擇不作為的原因大多源于對操作影響的不確定性。實踐出真知,下面針對兩種主要提升事務回滾速度的方式進行驗證,一種是提升操作可用內存空間,一種是通過停實例,禁用 redo 回滾方式進行進行驗證。
在碾子山等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都網站制作、做網站 網站設計制作按需策劃設計,公司網站建設,企業網站建設,品牌網站建設,成都全網營銷推廣,外貿營銷網站建設,碾子山網站建設費用合理。
仔細閱讀過官方手冊的同學,一定留意到了對于提升大事務回滾效率,官方提供了兩種方法:一是增加 innodb_buffer_pool_size 參數大小,二是合理利用 innodb_force_recovery=3 參數,跳過事務回滾過程。第一種方式比較溫和,innodb_buffer_pool_size 參數是可以動態調整的,可行性也較高。第二種方式相較之下較暴力,但效果較好。
兩種方式各有自己的優點,第一種方式對線上業務系統影響較小,不會中斷在線業務。第二種方式效果更顯著,會短暫影響業務連續,回滾所有沒有提交的事務。
1
找個別的機器安裝個同版本的mysql或從已安裝同版本的其他機器上(非同版本的也可以試下):
拷貝
mysql/data/mysql
目錄到你的mysql/data/
下吧
2
試著啟動mysql服務,如果能啟動了,理論上應該丟失的只有用戶、授權等一些系統信息,不影響你的使用的數據;
如果不能啟動,看錯誤日志,爭取啟動了。
3
趕緊把數據備份一份出來,重新把所有庫(只是你后來創建的業務相關的庫,不包括mysql庫)都刪了,重新導入一遍。理論上不這樣也可以,但只是非生產重要的環境下。
4
重新做用戶授權。
1.第一步,查詢語句:select*fromtable_name;或select*fromtable_namewhere條件,如下圖。
2.第二步,增加語句或插入數據insertintotable_name(clus...)values(values...)實例如圖
3.修改數據:updatetablenamesetxx=xx,xxx=xxwherexxx=xxxandxxx=xxx,如下圖。
4.第四步,刪除語句deletetable_namewhere條件實例如圖。
情況1、如果你有該庫的整體備份或對這個表的單獨備份,那么也許可以恢復。可以將最新的備份恢復到一個備用的服務器上,導出那表的內容,完成恢復
情況2、如果沒有任何備份,那就基本沒戲了。一般刪除表的操作是drop table,日志中不會記錄刪除具體行數的記錄。表所對應目錄下的文件已經被刪除(innodb獨立表空間,單表歸為一文件)。同樣的情況適用于myisam數據庫引擎,對應的myd/myi/frm文件均被刪除。這不像windows還有垃圾箱,是不可逆的操作
1、首先構建測試環境數據create table t1(a varchar(10),b varchar(10));insert into t1 values('1','1');insert into t1 values('2','2');commit;。
2、模擬誤修改,將t1表中的b字段更新為錯誤數據 "123456"update t1 set b='123456' where a='1';commit;select * from t1;。
3、將恢復工具上傳到服務器并進行解壓。unzip binlog2sql-master.zip。
4、得到誤修改時的binlog文件(show binary logs;),實驗環境是mysql-bin.000011。
5、通過?binlog2sql.py 腳本的到所有 對表 t1 的修改操作。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011'。
6、得到了誤刪除的sql的準確位置在1382-1615之間,使用 _**-B**_ 選項生成回滾sql。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011' --start-position=1382 --stop-position=1615 -B。
7、執行得到的回滾語句進行誤操作恢復。就完成了。