SEARCH

Введите поисковый запрос в поле выше ^, или воспользуйтесь поиском по форуму.

#1 2025-01-16 14:44

cOR
Администратор
Зарегистрирован: 2023-08-29
Сообщений: 85
Сайт

Скрипта для создания резервной копии базы MySQL

Скрипт будет создавать для каждой базы свой дамп. Это необходимо для быстрого восстановления данных.
Создаем каталог для скриптов и сам скрипт:

mkdir /scripts
nano /scripts/mysql_backup.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

destination="/backup/mysql"
userDB="backup"
passwordDB="backup"
fdate=`date +%Y-%m-%d`

test -d $destination/$fdate || mkdir -p $destination/$fdate
find $destination -type d \( -name "*-1[^5]" -o -name "*-[023]?" \) -mtime +30 -exec rm -R {} \; 2>&1
find $destination -type d -name "*-*" -mtime +180 -exec rm -R {} \; 2>&1

for dbname in `echo show databases | mysql -u$userDB -p$passwordDB -Bs | egrep -v 'information_schema|performance_schema|mysql|sys|test'; do
mysqldump --databases --skip-comments --no-tablespaces -u$userDB -p$passwordDB $dbname | gzip > $destination/$fdate/$dbname.sql.gz
done;

Задаем права скрипту на выполнение:

chmod +x /scripts/mysql_backup.sh
Описание скрипта

1          Указываем на путь к интерпретатору.
2           Задаем системные переменные, чтобы не пришлось в скрипте прописывать полные пути до исполняемых файлов.
4 - 7     Задаем переменные.
4           Каталог, в котором будем сохранять резервные копии.
5           Учетная запись для подключения к базе данных.
6           Пароль для подключения к базе данных.
7           Дата, когда запускается скрипт.
9           Создаем каталог (если его нет), в который будем сохранять резервные копии. В качестве имени каталога используем дату запуска скрипта в формате ГГГГ-MM-ДД.
10           Находим все резервные копии, которые старше 30 дней и удаляем их. Оставаляем для архива файлы на 15 число.
11        Удаляем все резервные копии старше 180 дней.
13 - 15       Подключаемся к базе данных и вытаскиваем список всех баз данных (пропускаем служебные базы information_schema, mysql, performance_schema, sys, test). Для каждой делаем резервную копию.
14           Делаем резервную копию для баз.

Подготовка системы

Подключаемся к базе данных и создаем учетную запись с правом на создание резервных копий:

mysql -uroot -p
> CREATE USER 'backup'@'localhost' IDENTIFIED BY 'backup';

* в данном примере мы создаем учетную запись backup с паролем backup.
даем права:

> GRANT SELECT, SHOW VIEW, EVENT, TRIGGER, LOCK TABLES, EXECUTE, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER, LOCK TABLES, EXECUTE ON *.* TO backup@localhost;

Выходим из SQL-оболочки:

> quit
Сохранение данных на удаленном компьютере

Резервные копии необходимо создавать на удаленном компьютере или внешнем диске, чтобы они были доступны при выходе из строя сервера. В данном примере используется общая папка на удаленном сервере, в которой будут размещаться файлы с backup.

Чтобы упростить процесс монтирования сетевой папки, откроем на редактирование следующий файл:

/etc/fstab

и добавим в него следующую строчку:

//10.0.0.2/backup /mnt cifs user,rw,noauto,credentials=/root/.smbclient 0 0

* в данном примере выполняется монтирование общей папки backup на сервере с IP-адресом 10.0.0.2 в каталог /mnt. В качестве сетевой файловой системы используется cifs (протокол SMB: сервер samba или общая папка Windows). Параметры для подключения — user: позволяет выполнить монтирование любому пользователю, rw: с правом на чтение и запись, noauto: не монтировать автоматически при старте системы, credentials: файл, в котором написаны логин и пароль для подключения к общей папке.

Теперь создадим файл с логином и паролем:

nano /root/.smbclient

и приведем его к следующему виду:

username=backup
password=backup

* username: имя пользователя, password: пароль. Само собой, в вашем случае указываются свои данные.
Теперь введите следующую команду:

# mount /mnt

Должна примонтировать сетевая папка //10.0.0.2/backup. Это можно проверить следующей командой:

# mount
Автоматический запуск по расписанию

Создадим правило в cron для автоматического запуска нашего скрипта. Выполняем команду:

crontab -e

И добавляем строку:

0 3 * * * /scripts/mysql_backup.sh

* в данном примере мы будем запускать резервирование каждый день в 3 часа ночи.


Думай дважды, кодь однажды. (c) cOR

Offline

#2 2025-01-17 08:06

cOR
Администратор
Зарегистрирован: 2023-08-29
Сообщений: 85
Сайт

Re: Скрипта для создания резервной копии базы MySQL

Если Вам нужно делать бэкап конкретной одной базы, пример

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

destination="/opt/backup"
userDB="backup"
passwordDB="fdBackup234"
fdate=`date +%Y-%m-%d`

test -d $destination/$fdate || mkdir -p $destination/$fdate
find $destination -type d \( -name "*-1[^5]" -o -name "*-[023]?" \) -mtime +30 -exec rm -R {} \; 2>&1
find $destination -type d -name "*-*" -mtime +180 -exec rm -R {} \; 2>&1
mysqldump -u$userDB -p$passwordDB icrb | gzip > $destination/$fdate/icrb.sql.gz

Думай дважды, кодь однажды. (c) cOR

Offline

Copyright © 2023 TDM ltd.
Created by cOR.

TDM Logo