Rumah > Artikel > pangkalan data > Bagaimana untuk menyelesaikan masalah pemadaman dan rollback pangkalan data MySQL secara tidak sengaja
Suatu ketika saya secara tidak sengaja menggunakan padam dari xxx untuk memadamkan beberapa data penting, saya dapati banyak kaedah di Internet, tetapi semuanya bertaburan.
Ia dibahagikan secara kasar kepada langkah berikut
1 Periksa sama ada binlog dihidupkan
# log_bin是ON,就说明打开了 OFF就是关闭状态,以下操作,只有为 ON 时有效。 show variables like 'log_bin';
2 Cari nama fail binlog
show master logs;
dan jalankan di atas kod, seperti yang ditunjukkan dalam rajah di bawah TS1-bin .000009 ialah nama fail yang kami cari
3. Semak lokasi log binlog
show variables like '%datadir%';
4. Cari TS1-bin berdasarkan lokasi yang diperolehi di atas .000009 fail
5. Masukkan direktori bin direktori pemasangan mysql dan laksanakan arahan berikut untuk mengeksport fail TS1-bin.000009 ke dalam fail sql mengikut julat masa yang dipadam secara tidak sengaja
mysqlbinlog --base64-output=decode-rows -v --database=数据库名 --start-datetime="2022-06-29 15:35:00" --stop-datetime="2022-06-29 15:45:00" C:/Users/Administrator/Desktop/TS1-bin.000009 > C:/Users/Administrator/Desktop/mysqllog.sql
di sini saya saya menyalin fail TS1-bin.000009 ke desktop Kerana laluan storan asal fail mengandungi ruang, pelaksanaan arahan gagal dan laluan tidak boleh dijumpai.
Selepas mendapat fail mysqllog.sql, anda boleh membukanya dengan Notepad, cari kata kunci DELETE, dan cari rekod data yang dipadam
6. Ubah kenyataan DELETE kepada pernyataan INSERT, dan gunakan vbs untuk melaksanakannya di bawah Windows Salin dan simpan kod berikut sebagai: fail deleteToinsert.vbs (mesti fail format .vbs) dalam direktori yang sama dengan mysqllog.sql, kemudian klik dua kali untuk menjalankan, fail mysqllogOK.sql akan dijana, iaitu pernyataan INSERT yang kami mahu
'========================== '用VBS实现 MYSQL binglog DELETE转INSERT '========================== function replaceregex(patern,str,tagstr) dim regex,matches set regex=new regExp regex.pattern=patern regex.IgnoreCase=true regex.global=true matches=regex.replace(str,tagstr) replaceregex=matches end function '======Mysql binlog DELETE转INSERT================ 'VBS打开文本文件 Set oldStream = CreateObject("ADODB.Stream") oldStream.CharSet = "utf-8" oldStream.Open oldStream.LoadFromFile("mysqllog.sql") 'binLog生成的DELETE原日志文件 oldText = oldStream.ReadText() newText=replace(oldText,"### DELETE FROM", ";INSERT INTO") newText=replace(newText,"### WHERE", "SELECT") newText=replace(newText,"###", "") newText=replace(newText,"@1=", "") newText=replaceregex("\@[1-9]=",newText, ",") newText=replaceregex("\@[1-9][0-9]=",newText, ",") oldStream.Close 'VBS保存文件 Set newStream = CreateObject("ADODB.Stream") newStream.Type = 2 'Specify stream type - we want To save text/string data. newStream.Charset = "utf-8" 'Specify charset For the source text data. newStream.Open 'Open the stream And write binary data To the object newStream.WriteText newText newStream.SaveToFile "mysqllogOK.sql", 2 'DELETE转成INSERT以后的新的SQL文件名 newStream.Close
7. Laksanakan selepas mendapat pernyataan INSERT yang sepadan.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah pemadaman dan rollback pangkalan data MySQL secara tidak sengaja. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!