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