Автоматический бэкап MySQL базы удаленно на Ubuntu (automysqlbackup, rsync)

Как обычно, учусь на своих ошибках. Посыпался винт на рабочем компе с данными продаж: список недавно добавленных товаров, измененные цены, новые покупатели и список продаж за 3 месяца пропал (ручной бэкап трех месячной давности нашелся), но восстановить большинство информации потерянной за 3 месяца очень трудоемкая задача. В общем, ближе к телу - делаем ежедневный автоматический бэкап базы данных mysql на ubuntu. Другие файлы у меня не так часто меняются, но в принципе, подтянуть их к бэкапу - уже несложно.

На сервере Ubuntu Server, который имеет выделенный IP адрес:

1. Создаем пользователя для rsync (сам rsync устанавливается вместе с ubuntu)

useradd rsync

2. Добавляем публичный ключ клиента, который будет обращаться к текущему серверу в authorized_keys пользователя rsync на сервере.

mkdir /home/rsync/.ssh
nano /home/rsync/authorized_keys #самый простой способ просто копировать и вставить ключ

3. Даем права запускать команду rsync через sudo без пароля. Для этого в visudo добавляем строку:

rsync   ALL=(root) NOPASSWD: /usr/bin/rsync

(для большей защиты можно уточнить команду параметрами)
Это даст возможность rsync на сервере удалять и перезаписывать файлы, владельцем которых он не является (ведь владельцы и права доступа копируются от клиента).

На клиенте, который будет отправлять на сервер свои измененные данные:

1. Устанавливаем бэкапщик

sudo apt-get install automysqlbackup

2. Заходим в его настройки и редактируем по своему. В моем случае надо было поменять папку куда сохранять бэкапы и ввести имя базы важной для меня.

sudo nano /etc/default/automysqlbackup

3. Меняем права доступа к создаваемым дампам баз данных. Находим в строку "chmod 600" в файле "/usr/sbin/automysqlbackup" и заменяем права создаваемого файла на 644, чтобы читать дампы мог любой пользователь.

chmod 644

3. Запускаем пока вручную automysqlbackup (от лица админа, то есть через sudo). Проверяем, что ваши файлы выбранных баз данных появились.

4. Для того, чтобы копировать и файлы движка, сделаем символьную ссылку на его папку

ln -s /var/www/site.com /var/home/toopro/backups/www

5. Дадим права на чтение. В моем случае папка www была закрыта от чтения посторонним, в этом случае нам все же надо разрешить её считывать, чтобы не только www-data мог до неё добраться. Поэтому дадим others права на чтение и исполнение X (почему-то если не дать X права, то в папке без Х не читаются права файлов входящих в неё).

sudo find /var/www -type d -exec chmod o=rX {} + #разрешаем читать www
sudo chmod o=rX -R /home/toopro/backups/ #разрешаю чтение паки с бэкапами всем юзерам 

Также разрешаем читать папку с бэкапами всем юзерам, т.к. сами бэкапы базы данных будут создаваться от рута и если запускать rsync от своего лица, то дампы mysql базы данныъ не будут доступны для чтения.

4. Пробуем выполнить команду вручную, перед этим сделав "пустое" подключение к серверу (ssh rsync@SERVER_IP):

rsync -avzPLx -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --rsync-path="sudo rsync" --numeric-ids --delete /home/toopro/backups/ rsync@312.324.213.338:/home/rsync/backups/NFKonst

Обратите внимание на:
а) в адресе папки откуда берутся файлы стоит завершающий / , если бы его не стояло, то вся папка бы копировалась на сервер, а не только её содержимое, что создало бы на сервере структуру папок: /home/rsync/backups/backups/...files...
б) Указанные параметры ssh позволяют нам избавиться от лишних вопросов в консоли
в) Параметры для команды:
-a - архивный рекурсивный метод переноса файлов, при котором сохраняются ссылки, даты создания/изменения файла, владельцы, группы, права доступа.
-z - компрессия перед отправкой (для уже сжатых дампов БД - бесполезна, но для текстовых PHP файлов CMS(движка) - значительно экономит трафик).
- P - объединяет флаги --partial и --progress
-L - копировать не ссылки, а файлы куда они ссылаются
-x - не разрешает подыматься на уровень выше
--numeric-ids - не дает переводить владельца на сервере по id, оставляет цифрой (если на сервере другие юзеры с другими id, чтобы не было путаницы)
--delete - разрешает удалять файлы на сервере, если они были удалены на клиенте
Проверяем файлы на сервере должны появиться.

5. Если все ок, создадим ежедневную задачу выполнения этой команды, создав файл в папке cron.daily:

sudo nano /etc/cron.daily/tooprorsync

Содержимое файла

#!/bin/sh
rsync -avzPLx -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --rsync-path="sudo rsync" --numeric-ids --delete /home/toopro/backups/ rsync@312.324.213.338:/home/rsync/backups/NFKonst

6. Дадим файлу права на исполнение (иначе Убунту не сможет запускать его, несмотря на то, что он лежит в нужной папке).

sudo chmod 755 /etc/cron.daily/tooprorsync