Puncte:1

comportament ciudat într-un script Windows 2019 .BAT

drapel cn

Trebuie să refac o copie de rezervă dintr-un MariaDB Linux într-un MariaDB Windows, unde gateway-ul PowerBI își va importa datele. „mariabackup” este instrumentul de backup fizic al MariaDB. Dar pentru a-l restaura, folderul de destinație (%programfiles%\MariaDB 10.3\data\) trebuie să fie goală.

De cand rmdir /S /Q "%programfiles%\MariaDB 10.3\data\ va elimina directorul „date” (ceea ce nu vreau!!!), am lucrat pentru a evita acest comportament nedorit în următorul script (uncompress.bat):

rem Decomprimați backup-ul trimis de serverul linux
rem și îl importă în MariaDB
rem Gilberto Martins - 19.11.2021

rem Decomprimați copia de rezervă
rem Calea de rezervă este „mnt\external01\”
tar -xf c:\utilizatori\mariabkp\bkp.tgz -C c:\utilizatori\mariabkp\

rem Stop MariaDB
net stop mysql

rem Pregătiți copia de rezervă pentru restaurare
„C:\Program Files\MariaDB 10.3\bin\mariabackup.exe” --prepare --target-dir="c:\users\mariabkp\mnt\external01\backup"\

rem Ștergeți fișierele bazei de date
del /q „C:\Program Files\MariaDB 10.3\data\*.*”
FOR /D %p IN ("c:\Program Files\MariaDB 10.3\data\*") DO rmdir "%p" /s /q

rem Importă backup în MariaDB
„C:\Program Files\MariaDB 10.3\bin\mariabackup.exe” --move-back --target-dir="c:\users\mariabkp\mnt\external01\backup"\

rem Restaurați fișierul conf MariaDB
copiați "c:\Users\Administrator\my.ini" "c:\Program Files\MariaDB 10.3\data" /y

rem Porniți MariaDB
net start mysql

Funcționez bine, până în punctul în care trebuie să șterg fișierele pentru restaurare, după cum puteți vedea în continuare:

Microsoft Windows [Versiunea 10.0.17763.1935]
(c) 2018 Microsoft Corporation. Toate drepturile rezervate.

C:\Utilizatori\Administrator>uncompress.bat

C:\Users\Administrator>rem Decomprimați backup-ul trimis de serverul linux

C:\Users\Administrator>rem și îl importă în MariaDB

C:\Users\Administrator>rem Gilberto Martins - 19/11/2021

C:\Users\Administrator>rem Decomprimați copia de rezervă

C:\Users\Administrator>rem Calea de rezervă este „mnt\external01\backup”

C:\Utilizatori\Administrator>tar -xf c:\utilizatori\mariabkp\bkp.tgz -C c:\utilizatori\mariabkp\

C:\Users\Administrator>rem Stop MariaDB

C:\Users\Administrator>net stop mysql
Serviciul MySQL se oprește.
Serviciul MySQL a fost oprit cu succes.


C:\Users\Administrator>rem Pregătiți copia de rezervă pentru restaurare

C:\Users\Administrator>"C:\Program Files\MariaDB 10.3\bin\mariabackup.exe" --prepare --target-dir="c:\users\mariabkp\mnt\external01\backup"\
C:\Program Files\MariaDB 10.3\bin\mariabackup.exe bazat pe serverul MariaDB 10.3.31-MariaDB Win64 (AMD64)
[00] 2021-11-22 16:26:29 cd în c:\users\mariabkp\mnt\external01\backup\
[00] 2021-11-22 16:26:29 Limită de fișiere deschise solicitată 0, setată la 0
[00] 2021-11-22 16:26:29 Această țintă pare să nu fie pregătită încă.
[00] 2021-11-22 16:26:29 mariabackup: folosind următoarea configurație InnoDB pentru recuperare:
[00] 2021-11-22 16:26:29 innodb_data_home_dir = .
[00] 2021-11-22 16:26:29 innodb_data_file_path = ibdata1:12M:autoextend
[00] 2021-11-22 16:26:29 innodb_log_group_home_dir = .
[00] 2021-11-22 16:26:29 Pornirea instanței InnoDB pentru recuperare.
[00] 2021-11-22 16:26:29 mariabackup: se utilizează 104857600 de octeți pentru pool-ul de buffer (setat de parametrul --use-memory)
2021-11-22 16:26:29 0 [Notă] InnoDB: Mutexurile și rw_locks folosesc funcții interblocate Windows
2021-11-22 16:26:29 0 [Notă] InnoDB: Utilizează mutexuri de evenimente
2021-11-22 16:26:29 0 [Notă] InnoDB: Tabelele comprimate folosesc zlib 1.2.11
22-11-2021 16:26:29 0 [Notă] InnoDB: Număr de grupuri: 1
2021-11-22 16:26:29 0 [Notă] InnoDB: Utilizarea instrucțiunilor SSE2 crc32
22-11-2021 16:26:29 0 [Notă] InnoDB: Inițializarea pool-ului de buffer, dimensiune totală = 100 M, instanțe = 1, dimensiunea bucată = 100 M
2021-11-22 16:26:29 0 [Notă] InnoDB: Inițializarea pool-ului de buffer-uri a fost finalizată
2021-11-22 16:26:29 0 [Notă] InnoDB: Începe recuperarea accidentului de la punctul de control LSN=7032026737757
2021-11-22 16:26:29 0 [Notă] InnoDB: Se începe lotul final pentru a recupera 68 de pagini din jurnalul de refacere.
[00] 22-11-2021 16:26:30 Ultimul fișier binlog , poziția 0
[00] 22-11-2021 16:26:31 finalizat OK!

C:\Users\Administrator>rem Ștergeți fișierele bazei de date

C:\Users\Administrator>del /q "C:\Program Files\MariaDB 10.3\data\*.*"
\Programul a fost neașteptat în acest moment.

C:\Utilizatori\Administrator>PENTRU /D\Program Files\MariaDB 10.3\data\*") DO rmdir "p" /s /q

C:\Utilizatori\Administrator>

Intrebarile mele:

  1. De ce mesajul \Programul a fost neașteptat în acest moment. când încerc del /q „C:\Program Files\MariaDB 10.3\data\*.*”

  2. De ce instrucțiunea originală FOR /D %p IN ("c:\Program Files\MariaDB 10.3\data\*") DO rmdir "%p" /s /q este ecou ca PENTRU /D \Program Files\MariaDB 10.3\data\*") DO rmdir "p" /s /q ? SE PARE (dar nu sunt sigur) că ar putea fi ceva legat de variabila „%p”.

  3. De ce instrucțiunile rămase (import backup, restaurare my.ini și pornire MariaDB) nu sunt executate?

Trebuie să recunosc, sunt un începător în Windows Scripting. Și consider inutil să instalez Python3 complet pentru un singur script!

Actualizare: Am încercat să „Șterg fișierele bazei de date” înainte de „Pregătirea copiei de rezervă pentru restaurare”, dar am primit același rezultat, adică se oprește la instrucțiunea „PENTRU”.

Puncte:1
drapel cn

Ieșirea este confuză, într-adevăr, deoarece arată ieșirea lui FOR înainte de ecoul lui FOR, așa că se pare că linia de deasupra eșuează, dar nu este.

Remedierea este ușoară, doar dublu % din variabila dvs., așa...

FOR /D %%p IN ("c:\Program Files\MariaDB 10.3\data\*") DO rmdir "%%p" /s /q

Pot să vă spun că chiar și scriptori experimentați cu fișiere în loturi de pe vremuri își smulgeau părul peste chestia asta. Personal, aș fi automatizat acest lucru în PowerShell, deoarece este disponibil pentru toate instalările Windows în zilele noastre. Python este și el grozav, când este acolo. :-)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.