Назад | Перейти на главную страницу

Как я могу запустить задание Cron для создания резервных копий сервера MySQL по SSH

У меня есть производственный сервер под управлением CentOS с базой данных MySQL. Дома у меня есть NAS от QNAP (работает немного встроенного Linux). Я хочу сделать Cron на моем NAS для резервного копирования данных с моего производственного сервера CentOS. Проблема в том, что я не хочу передавать данные в несжатом виде (дамп SQL будет около 5 ГБ). Я хочу подключиться к серверу по SSH, запустить дамп SQL, сжать результат, загрузить его.

Возможно ли это? Какой способ был бы наиболее эффективным?

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

ssh user@remoteserver "mysqldump -h myhost -u myuser -pmypass mydb | gzip" > /path/to/my/dump.sql.gz

Короче говоря, результат, сгенерированный вашим mysqldump Команда SSH будет передана по конвейеру gzip на удаленной стороне соединения а затем перенаправлен на stdout, который затем перенаправляется на /path/to/my/dump.sql.gz на вашем NAS. По сети будут отправляться только сжатые данные.

Вы можете немного расширить это, выполнив в сценарии следующее (это эквивалентно тому, что Джон указал в своем ответе):

ssh user@remoteserver "mysqldump -h myhost -u myuser -pmypass -D mydb | gzip > /tmp/dump.sql.gz"
scp user@remoteserver:/tmp/dump.sql.gz /path/to/my/dump.sql.gz
ssh user@remoteserver "rm -f /tmp/dump.sql.gz"

Это немного более длинный подход, и сначала выполняется дамп / сжатие всей базы данных, а затем ее копирование по сети через scpи, наконец, удалите удаленную копию.

Хорошо, я делюсь своим личным методом, который я использовал для ежедневного резервного копирования всей базы данных mysql с архивом.

  1. Создайте файл mysqlbackup.sh в / bin или любом другом месте, которое вам нравится, с помощью следующего кода

    #!/bin/bash
    # modify the following to suit your environment
    export DAYS="3"
    export DB_BACKUP="/backup/"
    export DB_USER="root"
    export DB_PASSWD="<you root password>"
    # title and version
    echo ""
    echo "mySQL_backup"
    echo "----------------------"
    echo "* Deleting OLD Backup ..."
    # this will delete old file older than DAYS
    find $DB_BACKUP -mtime +$DAYS -exec rm -rf {} \; 
    echo "* Creating new backup..."
    # Next command take backup compressed with bzip2 save in directory DB_BACKUP
    mysqldump --all-databases | bzip2 > $DB_BACKUP/mysql-`date +%Y-%m-%d-%H:%M`.bz2
    echo "----------------------"
    echo "Done"
    exit 0
    
  2. Сохраните этот файл
  3. Отметьте этот исполняемый файл сценария, используя chmod + x filename
  4. Настройте этот сценарий в cron для ежедневного запуска 0 0 * * * /bin/mysqlbackup.sh, который будет создаваться каждый день в 12 часов ночи.
  5. Rsync / резервное копирование для вас ежедневно с помощью cron. для настройки rsync вы можете использовать ссылку ниже. http://www.thegeekstuff.com/2011/07/rsync-over-ssh-without-password/ https://blogs.oracle.com/jkini/entry/how_to_scp_scp_and

ИЛИ

  1. Вы также можете изменить исходный сценарий, который включает rsync для вашей папки, в этом случае вам не нужно устанавливать второй cron.

Удачи....

Это возможно - я делал нечто очень похожее. Используйте SSH для выполнения mysql_dump (или ваш любимый аналог) и-ed с gzip, затем используйте scp для передачи, затем снова SSH на rm файл дампа.