За последние 24 часа нас посетили 17900 программистов и 1566 роботов. Сейчас ищут 1272 программиста ...

Выполнение баш скрипта(может кому интересно будет)

Тема в разделе "Решения, алгоритмы", создана пользователем Survivor, 18 дек 2023.

  1. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    87
    Симпатии:
    17
    Доброго времени суток.

    Предыстория: понадобилось срочно и быстро делать бэкапы определенных таблиц базы данных, а в других случаях сразу нескольких или вообще всех.

    Выкладываю "миниатюрку", авось кому пригодится, а может кто чего дельного посоветует.
    В настройках ничего сложного.

    НЕ ЗАБЫВАЕМ:
    1) backup_dir = устанавливаем директорию для сохранения бэкапа
    2) в mysqldump ПАРОЛЬ меняем на свой пароль (p.s. гонять так пароли не рекомендуется из консоли, надо держать в отдельном файлике и для конкретного пользователя )
    3) Для теста, я ограничил кол-во бэкапов двумя (2) и нужный мне формат названия файла, меняйте на свой вкус.
    4) Папку с бэкапом всегда держать за пределами веб-морды и с нужными правами для записи и создания

    Код (Text):
    1. #!/bin/bash
    2.  
    3. # Название и дата бэкапа
    4. filename=cash_register`date +%F-%H-%M-%S`.sql
    5.  
    6. # Папка для бэкапов
    7. backup_dir=/home/backup/cash_register
    8.  
    9. # Создадим папку для этой таблицы
    10. mkdir -p "$backup_dir"
    11.  
    12. # Бэкапим
    13. nice mysqldump -u root -p'ПАРОЛЬ' frontpad cash_register > $backup_dir/$filename;
    14.  
    15. # Переход в директорию с бэкапами
    16. cd $backup_dir;
    17.  
    18. # Удаление всех файлов, кроме последних 2
    19. rm $(ls -t $backup_dir | sort | head -n -2)
    и обязательно:
    chmod +x /ваш путь до крона/file.sh
    делаем созданный файл исполняемым

    Запустить из консоли можно так

    bash /ваш путь до крона/file.sh
    sh /ваш путь до крона/file.sh
     
    Sofiasai нравится это.
  2. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    87
    Симпатии:
    17
    А ещё конечно лучше использовать gzip, как по мне))

    Это
    Код (Text):
    1. nice mysqldump -u root -p'ПАРОЛЬ' frontpad cash_register > $backup_dir/$filename;
    На это
    Код (Text):
    1. nice mysqldump -u root -p'ПАРОЛЬ' frontpad cash_register | gzip > "$backup_dir/$filename"
    Ну и нужно будет переменную обновить filename="cash_register$(date +%F-%H_%M_%S).sql.gz"
     
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    437
    Симпатии:
    84
    Адрес:
    Бавария, Германия

    Добрый день!

    Спасибо за Ваш пост про бэкапы.

    Несколько соображений по этому поводу:

    1. Это замечально, когда есть непосредственный досту к консоле,
    а если нет, то остётся использовать PuTTY или что-то похожее, а это, извините, ещё тот геморой.
    В данном случае, можно без этого обойтись, использую Cronjob
    Crontab code:
    Код (Text):
    1. 10 2 * * * ваш путь/file.sh
    Также mysqldump можно запускать через Cronjob или из PHP, например.
    PHP:
    1. exec('mysqldump --single-transaction -u user -p [database_name] | gzip > dumpfilename.sql.gz');
    2. В mysqldump рекомендуют задавать опцию --single-transaction, которая предотвращает блокировку таблиц
    и тем самым обеспечивает более надежные бэкапы.
    В Вашем file.sh, mysqldump не делает бэкапы одной базы данных и/или определенных таблиц базы данных, а только вообще всего.
    Чаше бывает необходимо делать именно выборочные бэкапы.

    3. Может быть стоит написать не большой PHP скрипт, который редактировал и сохранял на сервере Ваш file.sh,
    который затем будет запусаться из Cronjob. (при необходимости здесь можно также редактировать и сохранять Crontab)
    В этом скрипте можно выводить для вывора список баз данных и таблиц для быкапов.
     
    Sofiasai нравится это.