Автор Тема: bash скрипт бэкапа MySQL  (Прочитано 197 раз)

Оффлайн Cool_Lamer

  • Давно тут
  • **
  • Сообщений: 473
bash скрипт бэкапа MySQL
« : 16.12.2022 10:40:26 »
Всем привет.
Пытаюсь накорябать скрипт бэкапа БД.
Исходные: Есть несколько БД, у каждой естественно своё название $db_name, свой юзер $db_user и его пароль $db_pass.
Задача: Задать условие, чтобы логин, пасс и название соответствовали друг другу.
mysqldump -u$user -p$pass $db_name > /dir/$db_name_${day}.sql
« Последнее редактирование: 16.12.2022 11:39:58 от Cool_Lamer »

Оффлайн mig

  • Давно тут
  • **
  • Сообщений: 102
    • Email
Re: bash скрипт бэкапа MySQL
« Ответ #1 : 16.12.2022 11:07:03 »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 099
Re: bash скрипт бэкапа MySQL
« Ответ #2 : 16.12.2022 11:38:26 »
Задача: Задать условие, чтобы логин, пасс и название соответствовали друг другу.
Что значит "условие" в данном контексте? Это же просто список.

Оффлайн Cool_Lamer

  • Давно тут
  • **
  • Сообщений: 473
Re: bash скрипт бэкапа MySQL
« Ответ #3 : 16.12.2022 11:39:45 »
Что значит "условие" в данном контексте? Это же просто список.
Да, ошибся, не условие, а исходные данные)


Посмотри здесь https://kabtim.ru/rezervnoye-kopirovaniye-zabbix-backup-mysql/
Спасибо. Пользуюсь похожим скриптом, решил модернизировать и мне не нужны все БД.
« Последнее редактирование: 16.12.2022 11:46:01 от Cool_Lamer »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 099
Re: bash скрипт бэкапа MySQL
« Ответ #4 : 16.12.2022 11:46:12 »
Построчно и задать. Строки читать, парсить через регулярное выражение. Причём, наверное, лучше прямо в bash. sed быстрее говорят, но явно тут потери на вызов sed из bash не окупяся.

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 031
  • ITS
Re: bash скрипт бэкапа MySQL
« Ответ #5 : 16.12.2022 14:45:23 »
Для постгрес, я на коленке написал вот такой:
#!/bin/bash
### Куда сохранить: если каталога нет, первый проход будет без дампа
DIRPGDUMP="$HOME/db/pgdump"
### Какие базы, через пробел
BASEDUMP="basecomp cartridges"
BACKUSER="backupuser"

if [[ -d $DIRPGDUMP ]]
then
    for pdump in $BASEDUMP; do
    echo "Копирование базы $pdump"
    pg_dump -h 127.0.0.1 -p 5432 -U $BACKUSER -d $pdump -C -F p -b -v -f $DIRPGDUMP/$pdump\_`date +%Y-%m-%d_%H-%M-%S`
    echo  $DIRPGDUMP/$pdump\_`date +%Y-%m-%d_%H-%M-%S`
    echo ""
    done
else
echo "Создадим каталог $HOME/db/pgdump"
mkdir -p $HOME/db/pgdump
fi
я не пишу часто скрипты, но вот так немного себе обеспечил автоматизацию.
Локальный доступ без пароля в постгрес настроен.

Вот так будет лучше:
#!/bin/bash
LIST="/tmp/userdb.csv"
# Список csv
# БАЗА|ЛОГИН|ПАРОЛЬ (заполнить файл)
#      1     2       3        4
echo "БАЗА1|ЛОГИН1|ПАРОЛЬ1|/туда1/сюда1" > $LIST
echo "БАЗА2|ЛОГИН2|ПАРОЛЬ2|/туда2/сюда2" >> $LIST
# Разделитель полей в списке
DELIM="|"
# Разделитель полей для цикла for
IFS=$'\n'
# Получить из файла csv строчку разделенную | и превратить в строчку разделенную пробелом
for LOGINPW in $(cut -d $DELIM -f 1,2,3,4 --output-delimiter=" " "$LIST")
do
# Выделить из переменной поля разделенные пробелом
BASESQL=`echo "$LOGINPW" | cut -d " " -f 1`
LOGIN=`echo "$LOGINPW" | cut -d " " -f 2`
PASSW=`echo "$LOGINPW" | cut -d " " -f 3`
PATHS=`echo "$LOGINPW" | cut -d " " -f 4`
# Здесь добавить скрипт дампа базы, переменные в нижнем регистре
echo "mysqldump ${LOGIN,,} ${PASSW,,} ${BASESQL,,} > $PATHS/$BASESQL_`date +%Y-%m-%d_%H-%M-%S`"
done
rm -f $LIST
« Последнее редактирование: 16.12.2022 16:17:49 от rits »