Рейтинг:1

странное поведение в сценарии Windows 2019 .BAT

флаг cn

Мне нужно восстановить резервную копию из Linux MariaDB в Windows MariaDB, куда шлюз PowerBI будет импортировать свои данные. «mariabackup» — это инструмент физического резервного копирования MariaDB. Но чтобы его восстановить, папка назначения (%programfiles%\MariaDB 10.3\данные\) должен быть пустым.

С rmdir /S /Q "%programfiles%\MariaDB 10.3\data\ удалит каталог «data» (чего я не хочу!!!), я работал над тем, чтобы избежать этого нежелательного поведения в следующем скрипте (uncompress.bat):

rem Распаковать резервную копию, отправленную сервером Linux.
rem и импортирует его в MariaDB
Рем Жилберто Мартинс - 19.11.2021

rem Распаковать резервную копию
rem Путь резервной копии "mnt\external01\"
tar -xf c:\users\mariabkp\bkp.tgz -C c:\users\mariabkp\

рем Стоп MariaDB
чистая остановка mysql

rem Подготовка резервной копии к восстановлению
"C:\Program Files\MariaDB 10.3\bin\mariabackup.exe" --prepare --target-dir="c:\users\mariabkp\mnt\external01\backup"\

rem Стереть файлы базы данных
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 Импорт резервной копии в MariaDB
"C:\Program Files\MariaDB 10.3\bin\mariabackup.exe" --move-back --target-dir="c:\users\mariabkp\mnt\external01\backup"\

rem Восстановить файл конфигурации MariaDB
скопируйте "c:\Users\Administrator\my.ini" "c:\Program Files\MariaDB 10.3\data" /y

rem Запустить MariaDB
чистый запуск mysql

У меня работает хорошо, вплоть до того момента, когда мне приходится стирать файлы для восстановления, как вы можете видеть впереди:

Microsoft Windows [версия 10.0.17763.1935]
(c) 2018 Корпорация Майкрософт. Все права защищены.

C:\Пользователи\Администратор>uncompress.bat

C:\Users\Administrator>rem Распаковать резервную копию, отправленную сервером Linux.

C:\Users\Administrator>rem и импортирует его в MariaDB

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

C:\Users\Administrator>rem Распаковать резервную копию

C:\Users\Administrator>rem Путь резервной копии "mnt\external01\backup"

C:\Пользователи\Администратор>tar -xf c:\users\mariabkp\bkp.tgz -C c:\users\mariabkp\

C:\Users\Administrator>rem Остановить MariaDB

C:\Users\Администратор>net stop mysql
Служба MySQL останавливается.
Служба MySQL была успешно остановлена.


C:\Users\Administrator>rem Подготовка резервной копии к восстановлению

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 на основе сервера MariaDB 10.3.31-MariaDB Win64 (AMD64)
[00] 2021-11-22 16:26:29 перейдите в c:\users\mariabkp\mnt\external01\backup\
[00] 2021-11-22 16:26:29 запрошено ограничение на количество открытых файлов 0, установлено значение 0
[00] 22-11-2021 16:26:29 Эта цель, кажется, еще не подготовлена.
[00] 22.11.2021, 16:26:29 mariabackup: использование следующей конфигурации InnoDB для восстановления:
[00] 22.11.2021, 16:26:29 innodb_data_home_dir = .
[00] 22.11.2021, 16:26:29 innodb_data_file_path = ibdata1:12M:autoextend
[00] 22.11.2021, 16:26:29 innodb_log_group_home_dir = .
[00] 22.11.2021, 16:26:29 Запуск экземпляра InnoDB для восстановления.
[00] 22.11.2021, 16:26:29 mariabackup: использование 104857600 байт для пула буферов (устанавливается параметром --use-memory)
2021-11-22 16:26:29 0 [Примечание] InnoDB: мьютексы и rw_locks используют взаимосвязанные функции Windows
2021-11-22 16:26:29 0 [Примечание] InnoDB: использует мьютексы событий
2021-11-22 16:26:29 0 [Примечание] InnoDB: сжатые таблицы используют zlib 1.2.11
22.11.2021, 16:26:29 0 [Примечание] InnoDB: Количество пулов: 1
2021-11-22 16:26:29 0 [Примечание] InnoDB: использование инструкций SSE2 crc32
2021-11-22 16:26:29 0 [Примечание] InnoDB: Инициализация пула буферов, общий размер = 100M, количество экземпляров = 1, размер фрагмента = 100M
22.11.2021, 16:26:29 0 [Примечание] InnoDB: завершена инициализация пула буферов.
22.11.2021, 16:26:29 0 [Примечание] InnoDB: запуск аварийного восстановления с контрольной точки LSN=7032026737757
22.11.2021, 16:26:29 0 [Примечание] InnoDB: запуск последней партии для восстановления 68 страниц из журнала повторов.
[00] 2021-11-22 16:26:30 Последний бинарный файл, позиция 0
[00] 2021-11-22 16:26:31 выполнено ОК!

C:\Users\Administrator>rem Стереть файлы базы данных

C:\Пользователи\Администратор>del /q "C:\Program Files\MariaDB 10.3\data\*.*"
\Программа была неожиданной в это время.

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

C:\Пользователи\Администратор>

Мои вопросы:

  1. Почему сообщение \Программа была неожиданной в это время. когда я пытаюсь del /q "C:\Program Files\MariaDB 10.3\data\*.*"

  2. Почему оригинальная инструкция FOR /D %p IN ("c:\Program Files\MariaDB 10.3\data\*") DO rmdir "%p" /s /q повторяется как FOR /D \Program Files\MariaDB 10.3\data\*") DO rmdir "p" /s /q ? КАЖЕТСЯ (но я не уверен), что это может быть что-то связанное с переменной "%p".

  3. Почему остальные инструкции (импорт резервной копии, восстановление my.ini и запуск MariaDB) не выполняются?

Должен признаться, я новичок в Windows Scripting. А ставить полный Python3 только на один скрипт считаю излишним!

Обновление: я пытался «Стереть файлы базы данных» перед «Подготовкой резервной копии к восстановлению», но получил тот же результат, то есть останавливается на инструкции «FOR».

Рейтинг:1
флаг cn

Вывод действительно сбивает с толку, потому что он показывает вывод FOR перед эхом FOR, поэтому кажется, что строка над ним не работает, но это не так.

Исправить легко, просто удвойте свою переменную, вот так...

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

Я могу сказать вам, что даже опытные программисты пакетных файлов в свое время вырвали бы себе волосы из-за этого материала. Я бы лично автоматизировал это в PowerShell, поскольку в наши дни он готов ко всем установкам Windows. Python тоже хорош, когда он есть. :-)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.