Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menyelesaikan masalah pemadaman dan rollback pangkalan data MySQL secara tidak sengaja

Bagaimana untuk menyelesaikan masalah pemadaman dan rollback pangkalan data MySQL secara tidak sengaja

WBOY
WBOYke hadapan
2023-05-31 17:40:061000semak imbas

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

Bagaimana untuk menyelesaikan masalah pemadaman dan rollback pangkalan data MySQL secara tidak sengaja

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam