Резервное копирование и восстановление больших баз данных порой может быть сложной задачей.

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

Создать сценарий резервного копирования

Сначала давайте создадим скрипт bash для резервного копирования таблицы базы данных за таблицей. Сохраните следующий скрипт как backup_db.sh. Этот скрипт будет делать резервную копию каждой таблицы в вашей базе данных в отдельный файл.sql.

#!/bin/bash

MYSQL_DB="wordpress_db"

BACKUP_DIR="/root/mysql/${MYSQL_DB}"

mkdir -p "$BACKUP_DIR"

TABLES=$(mysql -N -e "SHOW TABLES FROM ${MYSQL_DB}")

for TABLE in $TABLES
do
    echo "Backing up table: $TABLE"
    /usr/bin/mysqldump "${MYSQL_DB}" "$TABLE" > "$BACKUP_DIR/${TABLE}.sql"
done

echo "Backup completed. Files are stored in $BACKUP_DIR"

Запустить скрипт резервного копирования

После создания backup_db.sh вы можете запустить его с помощью:

bash backup_db.sh

После запуска скрипта каждая таблица из вашей базы данных будет сохранена в виде отдельного файла.sql в указанном каталоге резервных копий.

Создать сценарий восстановления

Теперь, когда у вас есть резервная копия, вам понадобится способ восстановить эти таблицы. Следующий скрипт восстановит каждую таблицу из соответствующего ей файла.sql.

#!/bin/bash

MYSQL_DB="wordpress_db"

BACKUP_DIR="/root/mysql/${MYSQL_DB}"

if [! -d "$BACKUP_DIR" ]; then
    echo "Error: Backup directory does not exist."
    exit 1
fi

for SQL_FILE in "$BACKUP_DIR"/*.sql
do
    if [ -f "$SQL_FILE" ]; then
        TABLE_NAME=$(basename "$SQL_FILE".sql)
        echo "Restoring table: $TABLE_NAME"
        /usr/bin/mysql "${MYSQL_DB}" < "$SQL_FILE"
        if [ $? -eq 0 ]; then
            echo "Successfully restored $TABLE_NAME"
        else
            echo "Error restoring $TABLE_NAME"
        fi
    fi
done

echo "Restore process completed."

MYSQL_DB: снова замените «wordpress_db» на фактическое имя вашей базы данных.

Run the Restore Script

После создания restore_db.sh сделайте его исполняемым и запустите:

bash restore_db.sh

Written by Иван Васильков

Системный администратор и DevOps с опытом 10+ лет.