Как проверить, была ли база данных успешно восстановлена ​​с помощью файла дампа? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь написать bash-скрипт для получения дампа из базы данных 2 ГБ mysql . Затем я удаляю эту базу данных и восстанавливаю ее из скрипта bash, используя дамп mysql. Я буду инициировать этот скрипт с удаленной машины. Поэтому мне нужен способ узнать, завершился ли процесс восстановления дампа на удаленной машине для выполнения следующих команд. Поскольку я ничего не мог найти в Интернете, я попытался определить, равен ли размер созданной базы данных желаемому размеру базы данных. Тем не менее, я не могу сделать, так как я использовал приведенный ниже скрипт для получения размера базы данных:

size=$(mysql -u root -ppass -D tpcw -e "SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as 'Size in GB' FROM information_schema.TABLES WHERE table_schema = 'tpcw'")

и когда я пытаюсь запустить этот скрипт:

    size=$(mysql -u root -ppass -D tpcw -e "SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as 'Size in GB' FROM information_schema.TABLES WHERE table_schema = 'tpcw'")

    echo $size

    if [ "$size" == "Size in GB 2.47" ] ; then
        echo "match"
        break 
    else
        echo "does not match"
    fi

Возвращает «не совпадает». Это потому, что строка, перенастроенная запросом, отображается как

Размер в ГБ
2,47

когда я печатаю это с помощью:

echo "$size"

Но это печатает как:

Размер в ГБ 2,47

когда я печатаю это с помощью:

echo $size

Я не могу понять, что не так.

1 Ответ

1 голос
/ 16 мая 2019

Вы можете вставить новую строку в тестовую строку:

 if [ "$size" = "Size in GB"$'\n'"2.47" ] ; then

Я не могу понять, что не так.

Переменная size содержит новую строку внутри. Когда вы делаете

 echo "$size"

Выполняется как:

 echo $'Size in GB\n2.47'

Новая строка get распечатывается, пробелы сохраняются, и echo get - только один аргумент.

Когда вы делаете:

 echo $size

Затем он выполняет эхо с 4 аргументами:

 echo 'Size' 'in' 'GB' '2.47'

И эхо печатает их, разделяя их пробелом. Разделение аргументов выполняется по пробелам, переводу строки и табуляциям (для IFS по умолчанию).

Как проверить, была ли база данных успешно восстановлена ​​с помощью файла дампа?

Просто проверьте состояние завершения mysql при восстановлении базы данных.

if ! mysql -u root -ppass <dump.file; then
    echo "Och no, restoring the database failed!"
fi

или

mysql -u root -ppass <dump.file
ret=$?
if (($ret != 0)); then
    echo "Och no, restoring the database failed with exit status $ret!"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...