Доброго времени суток. Предыстория: понадобилось срочно и быстро делать бэкапы определенных таблиц базы данных, а в других случаях сразу нескольких или вообще всех. Выкладываю "миниатюрку", авось кому пригодится, а может кто чего дельного посоветует. В настройках ничего сложного. НЕ ЗАБЫВАЕМ: 1) backup_dir = устанавливаем директорию для сохранения бэкапа 2) в mysqldump ПАРОЛЬ меняем на свой пароль (p.s. гонять так пароли не рекомендуется из консоли, надо держать в отдельном файлике и для конкретного пользователя ) 3) Для теста, я ограничил кол-во бэкапов двумя (2) и нужный мне формат названия файла, меняйте на свой вкус. 4) Папку с бэкапом всегда держать за пределами веб-морды и с нужными правами для записи и создания Код (Text): #!/bin/bash # Название и дата бэкапа filename=cash_register`date +%F-%H-%M-%S`.sql # Папка для бэкапов backup_dir=/home/backup/cash_register # Создадим папку для этой таблицы mkdir -p "$backup_dir" # Бэкапим nice mysqldump -u root -p'ПАРОЛЬ' frontpad cash_register > $backup_dir/$filename; # Переход в директорию с бэкапами cd $backup_dir; # Удаление всех файлов, кроме последних 2 rm $(ls -t $backup_dir | sort | head -n -2) и обязательно: chmod +x /ваш путь до крона/file.sh делаем созданный файл исполняемым Запустить из консоли можно так bash /ваш путь до крона/file.sh sh /ваш путь до крона/file.sh
А ещё конечно лучше использовать gzip, как по мне)) Это Код (Text): nice mysqldump -u root -p'ПАРОЛЬ' frontpad cash_register > $backup_dir/$filename; На это Код (Text): nice mysqldump -u root -p'ПАРОЛЬ' frontpad cash_register | gzip > "$backup_dir/$filename" Ну и нужно будет переменную обновить filename="cash_register$(date +%F-%H_%M_%S).sql.gz"
Добрый день! Спасибо за Ваш пост про бэкапы. Несколько соображений по этому поводу: 1. Это замечально, когда есть непосредственный досту к консоле, а если нет, то остётся использовать PuTTY или что-то похожее, а это, извините, ещё тот геморой. В данном случае, можно без этого обойтись, использую Cronjob Crontab code: Код (Text): 10 2 * * * ваш путь/file.sh Также mysqldump можно запускать через Cronjob или из PHP, например. PHP: 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) В этом скрипте можно выводить для вывора список баз данных и таблиц для быкапов.