Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd

Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd

prehistory

I tupono kua whakaekea te tūmau e te huaketo ransomware, na te "aitua waimarie," i waiho tetahi waahanga o nga konae .ibd (nga konae raraunga raw o nga ripanga innodb) kaore i pa, engari i taua wa ka whakamunatia nga konae .fpm ( kōnae hanganga). I tenei take, ka taea te wehewehe .idb ki:

  • i raro i te whakahokinga mai ma nga taputapu paerewa me nga kaiarahi. Mo enei keehi, he pai rawa atu riro;
  • nga ripanga kua whakamunatia. Ko te nuinga he ripanga nui enei, mo te mea (ki taku mohio) kaore i nui te RAM o nga kaiwhaiwhai mo te whakamunatanga katoa;
  • Ana, nga ripanga kua whakamunatia e kore e taea te whakaora.

I taea te whakatau ko tehea waahanga nga ripanga ma te whakatuwhera noa i roto i tetahi ētita tuhinga i raro i te whakawaehere e hiahiatia ana (i taku keehi ko UTF8) me te maataki noa i te konae mo te waahi o nga mara tuhinga, hei tauira:

Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd

I tua atu, i te timatanga o te konae ka taea e koe te kite i te maha o nga paita 0, me nga huaketo e whakamahi ana i te poraka whakamunatanga algorithm (te mea noa) ka pa ki a raatau ano.
Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd

I roto i taku keehi, ka waiho e nga kaiwhaiwhai he aho 4-paita (1, 0, 0, 0) i te mutunga o ia konae whakamunatia, he mea ngawari te mahi. Hei rapu i nga konae kaore i pangia, he nui te tuhinga:

def opened(path):
    files = os.listdir(path)
    for f in files:
        if os.path.isfile(path + f):
            yield path + f

for full_path in opened("C:somepath"):
    file = open(full_path, "rb")
    last_string = ""
    for line in file:
        last_string = line
        file.close()
    if (last_string[len(last_string) -4:len(last_string)]) != (1, 0, 0, 0):
        print(full_path)

No reira, ka kitea nga konae no te momo tuatahi. Ko te tuarua he maha nga mahi a-ringa, engari ko nga mea i kitea kua ranea. Ka pai nga mea katoa, engari me mohio koe hanganga tino tika a (o te akoranga) i ara ake tetahi keehi me mahi ahau me tetahi teepu huri haere. Karekau he tangata i maumahara mena i hurihia te momo mara, kua taapirihia he pou hou.

Ko Wilds City, kaore i taea te awhina i tenei keehi, na reira ka tuhia tenei tuhinga.

Haere ki te kaupapa

He hanganga tepu mai i nga marama 3 ki muri kaore i te rite ki te ahuatanga o naianei (tetahi mara pea, me etahi atu). Hanganga ripanga:

CREATE TABLE `table_1` (
    `id` INT (11),
    `date` DATETIME ,
    `description` TEXT ,
    `id_point` INT (11),
    `id_user` INT (11),
    `date_start` DATETIME ,
    `date_finish` DATETIME ,
    `photo` INT (1),
    `id_client` INT (11),
    `status` INT (1),
    `lead__time` TIME ,
    `sendstatus` TINYINT (4)
); 

i tenei keehi, me tango e koe:

  • id_point int(11);
  • id_user int(11);
  • date_start TE RANGI;
  • date_finish TE TIME.

Mo te whakaora, ka whakamahia he wetewete paita-a-paita o te konae .ibd, katahi ka huri ki te ahua ka taea te panui. I te mea ki te rapu i nga mea e hiahiatia ana, me tātari noa nga momo raraunga penei i te int me te wa raraunga, ma te tuhinga anake e whakaatu, engari i etahi wa ka korero ano matou ki etahi atu momo raraunga, ka awhina i etahi atu aitua rite.

Raruraru 1: ko nga mara me nga momo DATETIME me TEXT he uara NULL, a ka pekehia noa i roto i te konae, na tenei, kaore i taea te whakatau i te hanganga hei whakahoki mai i taku keehi. I roto i nga pou hou, he null te uara taunoa, a ka ngaro tetahi waahanga o te tauwhitinga na te tautuhinga innodb_flush_log_at_trx_commit = 0, no reira me whakapau te wa ki te whakatau i te hanganga.

Raruraru 2: me mahara ko nga rarangi kua mukua ma te DELETE ka noho katoa ki roto i te konae ibd, engari me te ALTER TABLE e kore e whakahoutia to raatau hanganga. Ko te mutunga, ka rereke te hanganga raraunga mai i te timatanga o te konae ki tona mutunga. Mena ka whakamahi koe i te OPTIMIZE TABLE, kare pea koe e pa ki tenei raru.

Kia tupato, ko te putanga DBMS e pa ana ki te ahua o te penapena raraunga, a ka kore pea tenei tauira e mahi mo etahi atu waahanga nui. I taku keehi, i whakamahia te putanga matapihi o mariadb 10.1.24. Ano, ahakoa i roto i te mariadb ka mahi koe me nga tepu InnoDB, he pono XtraDB, ka whakakore i te whakamahinga o te tikanga me InnoDB mysql.

tātari kōnae

I roto i te python, momo raraunga paita() he whakaatu raraunga Waehereao hei whakakapi i te huinga tau. Ahakoa ka taea e koe te tiro i te konae i roto i tenei puka, mo te pai ka taea e koe te huri i nga paita ki te ahua tau ma te huri i te huinga paita ki te rarangi auau (rarangi(example_byte_array)). Ahakoa he aha, he pai nga tikanga e rua mo te tātari.

I muri i te tirotiro i nga konae ibd maha, ka kitea e koe enei e whai ake nei:

Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd

I tua atu, ki te wehewehe koe i te konae ki enei kupu matua, ka whiwhi koe i te nuinga o nga poraka o nga raraunga. Ka whakamahia e matou te infimum hei wehewehe.

table = table.split("infimum".encode())

He tirohanga whakamere: mo nga ripanga he iti nga raraunga, kei waenga i te infimum me te teitei he tohu tohu ki te maha o nga rarangi o te poraka.

Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd — tepu whakamatautau me te rarangi tuatahi

Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd - tepu whakamatautau me nga rarangi e 2

Ka taea te pekehia te ripanga huinga haupae[0]. I muri i te tirotiro, kaore i kitea e au nga raraunga ripanga mata. Ko te nuinga, ka whakamahia tenei poraka ki te penapena i nga tohu me nga taviri.
Ka timata mai i te ripanga[1] me te whakamaoritanga ki te rarangi tau, kua kite koe i etahi tauira, ara:

Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd

He uara int enei e rongoa ana ki te aho. Ko te paita tuatahi ka tohu mena he pai, he kino ranei te tau. Ki taku take, he pai nga nama katoa. Mai i nga toenga 3 paita, ka taea e koe te whakatau i te tau ma te whakamahi i te mahi e whai ake nei. Hōtuhi:

def find_int(val: str):  # example '128, 1, 2, 3'
    val = [int(v) for v in  val.split(", ")]
    result_int = val[1]*256**2 + val[2]*256*1 + val[3]
    return result_int

Hei tauira, 128, 0, 0, 1 = 1ranei 128, 0, 75, 108 = 19308.
He matua matua te ripanga me te piki-aunoa, ka kitea hoki i konei

Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd

I te whakatairite i nga raraunga mai i nga ripanga whakamatautau, ka kitea ko te ahanoa DATETIME he 5 paita ka timata ki te 153 (te nuinga pea e tohu ana i nga waahi o ia tau). I te mea ko te awhe DATTIME ko '1000-01-01' ki te '9999-12-31', ki taku whakaaro ka rereke pea te maha o nga paita, engari i taku keehi, ka taka nga raraunga i te waa mai i te 2016 ki te 2019, no reira ka whakaaro tatou e 5 paita nui.

Hei whakatau i te wa kaore he hēkona, ka tuhia nga mahi e whai ake nei. Hōtuhi:

day_ = lambda x: x % 64 // 2  # {x,x,X,x,x }

def hour_(x1, x2):  # {x,x,X1,X2,x}
    if x1 % 2 == 0:
        return x2 // 16
    elif x1 % 2 == 1:
        return x2 // 16 + 16
    else:
        raise ValueError

min_ = lambda x1, x2: (x1 % 16) * 4 + (x2 // 64)  # {x,x,x,X1,X2}

Kaore i taea te tuhi i tetahi mahi mahi mo te tau me te marama, no reira me tarai e au. Hōtuhi:

ym_list = {'2016, 1': '153, 152, 64', '2016, 2': '153, 152, 128', 
           '2016, 3': '153, 152, 192', '2016, 4': '153, 153, 0',
           '2016, 5': '153, 153, 64', '2016, 6': '153, 153, 128', 
           '2016, 7': '153, 153, 192', '2016, 8': '153, 154, 0', 
           '2016, 9': '153, 154, 64', '2016, 10': '153, 154, 128', 
           '2016, 11': '153, 154, 192', '2016, 12': '153, 155, 0',
           '2017, 1': '153, 155, 128', '2017, 2': '153, 155, 192', 
           '2017, 3': '153, 156, 0', '2017, 4': '153, 156, 64',
           '2017, 5': '153, 156, 128', '2017, 6': '153, 156, 192',
           '2017, 7': '153, 157, 0', '2017, 8': '153, 157, 64',
           '2017, 9': '153, 157, 128', '2017, 10': '153, 157, 192', 
           '2017, 11': '153, 158, 0', '2017, 12': '153, 158, 64', 
           '2018, 1': '153, 158, 192', '2018, 2': '153, 159, 0',
           '2018, 3': '153, 159, 64', '2018, 4': '153, 159, 128', 
           '2018, 5': '153, 159, 192', '2018, 6': '153, 160, 0',
           '2018, 7': '153, 160, 64', '2018, 8': '153, 160, 128',
           '2018, 9': '153, 160, 192', '2018, 10': '153, 161, 0', 
           '2018, 11': '153, 161, 64', '2018, 12': '153, 161, 128',
           '2019, 1': '153, 162, 0', '2019, 2': '153, 162, 64', 
           '2019, 3': '153, 162, 128', '2019, 4': '153, 162, 192', 
           '2019, 5': '153, 163, 0', '2019, 6': '153, 163, 64',
           '2019, 7': '153, 163, 128', '2019, 8': '153, 163, 192',
           '2019, 9': '153, 164, 0', '2019, 10': '153, 164, 64', 
           '2019, 11': '153, 164, 128', '2019, 12': '153, 164, 192',
           '2020, 1': '153, 165, 64', '2020, 2': '153, 165, 128',
           '2020, 3': '153, 165, 192','2020, 4': '153, 166, 0', 
           '2020, 5': '153, 166, 64', '2020, 6': '153, 1, 128',
           '2020, 7': '153, 166, 192', '2020, 8': '153, 167, 0', 
           '2020, 9': '153, 167, 64','2020, 10': '153, 167, 128',
           '2020, 11': '153, 167, 192', '2020, 12': '153, 168, 0'}

def year_month(x1, x2):  # {x,X,X,x,x }

    for key, value in ym_list.items():
        key = [int(k) for k in key.replace("'", "").split(", ")]
        value = [int(v) for v in value.split(", ")]
        if x1 == value[1] and x2 // 64 == value[2] // 64:
            return key
    return 0, 0

E tino mohio ana ahau ki te whakapaua e koe te nui o te wa, ka taea te whakatika i tenei pohehe.
Panuku, he taumahi e whakahoki mai ai i tetahi ahanoa wa mai i te aho. Hōtuhi:

def find_data_time(val:str):
    val = [int(v) for v in val.split(", ")]
    day = day_(val[2])
    hour = hour_(val[2], val[3])
    minutes = min_(val[3], val[4])
    year, month = year_month(val[1], val[2])
    return datetime(year, month, day, hour, minutes)

I whakahaeretia ki te kite i nga uara tukurua mai i te int, int, datetime, datetime Te whakaora i nga raraunga mai i nga ripanga XtraDB kaore he konae hanganga ma te whakamahi i te paita-a-paita tātari o te konae ibd, te ahua nei koinei te mea e hiahia ana koe. I tua atu, karekau e rua nga wahanga o te raupapa i ia rarangi.

Ma te whakamahi i te korero auau, ka kitea e matou nga raraunga e tika ana:

fined = re.findall(r'128, d*, d*, d*, 128, d*, d*, d*, 153, 1[6,5,4,3]d, d*, d*, d*, 153, 1[6,5,4,3]d, d*, d*, d*', int_array)

Kia mahara mai i te wa e rapu ana ma te whakamahi i tenei korero, kaore e taea te whakatau i nga uara NULL i roto i nga mara e hiahiatia ana, engari mo taku keehi ehara tenei i te mea nui. Na ka haere matou i roto i nga mea i kitea e matou i roto i te kohanga. Hōtuhi:

result = []
for val in fined:
    pre_result = []
    bd_int  = re.findall(r"128, d*, d*, d*", val)
    bd_date= re.findall(r"(153, 1[6,5,4,3]d, d*, d*, d*)", val)
    for it in bd_int:
        pre_result.append(find_int(bd_int[it]))
    for bd in bd_date:
        pre_result.append(find_data_time(bd))
    result.append(pre_result)

Ae, ko te mea katoa, ko nga raraunga mai i te rarangi hua ko nga raraunga e hiahiatia ana e matou. ###PS.####
Kei te mohio ahau kaore tenei tikanga e pai mo te katoa, engari ko te kaupapa matua o te tuhinga ko te akiaki i nga mahi, kaua ki te whakaoti i o raru katoa. Ki taku whakaaro ko te otinga tino tika me timata koe ki te ako i te waehere puna mariadb, engari na te iti o te wa, ko te tikanga o naianei te ahua tere.

I etahi wa, i muri i te tātari i te konae, ka taea e koe te whakatau i te hanganga tata me te whakahoki mai ma te whakamahi i tetahi o nga tikanga paerewa mai i nga hononga o runga. Ka tino tika tenei ka iti ake nga raru.

Source: will.com

Tāpiri i te kōrero