-
大小: 159KB文件類型: .rar金幣: 2下載: 1 次發(fā)布日期: 2024-02-24
- 語言: 數(shù)據(jù)庫
- 標(biāo)簽: 恢復(fù)數(shù)據(jù)??mariadb??數(shù)據(jù)備份??
資源簡(jiǎn)介
這是我從網(wǎng)上找到的mysql/mariadb對(duì)innodb表進(jìn)行數(shù)據(jù)恢復(fù)的工具,實(shí)現(xiàn)從innodb的數(shù)據(jù)庫文件中恢復(fù)數(shù)據(jù),用于實(shí)現(xiàn)下面情況:1、直接下載了innodb數(shù)據(jù)庫的文件,而不是導(dǎo)出其數(shù)據(jù),想恢復(fù)數(shù)據(jù)時(shí)(需要有完整的文件,比如你必須對(duì)mysql數(shù)據(jù)文件目錄完整下載) 2、innodb的數(shù)據(jù)庫崩潰,沒有做備份,需要恢復(fù)拯救數(shù)據(jù)時(shí)
工具是有效的,我已經(jīng)驗(yàn)證過,不過不能保證100%恢復(fù),有部分表可能操作不成功,但,可以試試?yán)瞺~
代碼片段和文件信息
using?System;
using?System.Threading;
using?System.Net;
using?System.Collections;
using?System.Collections.Specialized;
using?System.Collections.Generic;
using?System.Security;
using?System.Diagnostics;
using?System.Security.Permissions;
using?System.Text;
using?System.IO;
using?System.Reflection;
using?System.Runtime.InteropServices;
using?System.Text.Regularexpressions;
using?MySql.Data.MySqlClient;
class?a{
static?void?Main(string[]?args){
Console.WriteLine(“MySql?InnoDB?Restore?tool?by?zcgonvh.\r\n“);
if(args.Length!=5){Console.WriteLine(“usage:?InnoDBRestore?????“);return;}
string?dbname=args[4];
try{
MySqlConnection?conn=new?MySqlConnection(string.Format(“Host=localhost;UserName={0};Password={1};Port={2};“args[0]args[1]args[2]));
conn.Open();
MySqlCommand?cmd=conn.CreateCommand();
cmd.CommandTimeout=0x200000;
cmd.CommandText=“SET?GLOBAL?innodb_file_format=‘Barracuda‘;“;//innodb-compressed?row_format
cmd.ExecuteNonQuery();
cmd.CommandText=“set?global?innodb_file_per_table=‘on‘;“;//single?innodb
cmd.ExecuteNonQuery();
cmd.CommandText=“set?names?utf8;“;
cmd.ExecuteNonQuery();
cmd.CommandText=“create?database?“+dbname;
cmd.ExecuteNonQuery();
cmd.CommandText=“select?@@datadir“;
string?datadir=cmd.ExecuteScalar()+“\\“+dbname+“\\“;
string?filedir=args[3];
conn.ChangeDatabase(dbname);
foreach(FileInfo?frm?in?new?DirectoryInfo(filedir).GetFiles(“*.frm“))
{
??Console.WriteLine(“restoring?:?“+frm);
??string?tablename=frm.Name.Substring(0frm.Name.Length-4);
??//modify?frm?set?type=memory
??try{
??byte[]?b=File.ReadAllBytes(frm.FullName);
??if(b[0]!=0xfe?||?b[1]!=0x01)?//table?magic?fe?01
??{
??????Console.WriteLine(“not?a?table?frm“);
??????continue;
??}
??if(b[3]!=0x0c)?//table?type?innodb
??{
??????if(b[3]==0x09)
??????{
????????Console.WriteLine(“this?is?a?MyISAM?db?copy?it.“);
????????frm.CopyTo(datadir+frm.Nametrue);
????????File.Copy(filedir+tablename+“.MYD“datadir+tablename+“.MYD“);
????????File.Copy(filedir+tablename+“.MYI“datadir+tablename+“.MYI“);
??????}
??????else
??????{
????????Console.WriteLine(“unknown?table?type“);
??????}
??????continue;
??}
??uint?offset=BitConverter.ToUInt16(b6);//io_size
??offset+=BitConverter.ToUInt16(b0x0e);//tmp_key_length
??offset+=BitConverter.ToUInt16(b0x10);//rec_length
??offset+=2;//00?00
??uint?len=BitConverter.ToUInt16(b(int)offset);//type?string?lengthin?word
??offset+=2;
??if(Encoding.Default.GetString(b(int)offset(int)len)!=“InnoDB“)
??{
??????Console.WriteLine(“not?an?innodb?frm“);
??????continue;
??}
??b[3]=6;//_DB_TYPE_HEAP
??Array.Copy(new?byte[]{0x4d0x450x4d0x4f0x520x59}0boffset6);//MEMORY
??FileInfo?ibd=new?FileInfo(frm.FullName.Substring(0frm.FullName.Length-3)+“ibd“);
??if(!ibd.Exists)
??{
????Console.WriteLine(“can?not?found?ibd:?“+ibd);
????continue;
??}
??File.WriteAllBytes(datadir+frm.Nameb);//write?to?frm?file
??cmd.CommandText=“flush?table
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4653??2015-07-08?17:01??mysql恢復(fù)數(shù)據(jù)工具\(yùn)mysqlibd\InnoDBRestore.cs
?????文件???????8192??2015-07-08?17:01??mysql恢復(fù)數(shù)據(jù)工具\(yùn)mysqlibd\InnoDBRestore.exe
?????文件???????2934??2015-07-09?17:55??mysql恢復(fù)數(shù)據(jù)工具\(yùn)mysqlibd\mysql?innodb還原工具.txt
?????文件?????455168??2015-02-25?03:34??mysql恢復(fù)數(shù)據(jù)工具\(yùn)mysqlibd\MySql.Data.dll
?????文件???????3125??2015-07-08?16:53??mysql恢復(fù)數(shù)據(jù)工具\(yùn)mysqlibd\MySqlFrm.cs
?????文件???????6656??2015-07-08?16:53??mysql恢復(fù)數(shù)據(jù)工具\(yùn)mysqlibd\MySqlFrm.exe
?????目錄??????????0??2018-07-30?17:00??mysql恢復(fù)數(shù)據(jù)工具\(yùn)mysqlibd
?????目錄??????????0??2018-07-30?17:00??mysql恢復(fù)數(shù)據(jù)工具
-----------?---------??----------?-----??----
???????????????480728????????????????????8
評(píng)論
共有 條評(píng)論