Как загрузить, чтобы сжать и загрузить на s3 на лету с s3cmd
Я только что обнаружил, что в моей коробке осталось 5% жесткого диска, и у меня есть почти 250 ГБ файла mysql bin, который я хочу отправить на s3. Мы перешли с mysql на NoSQL и в настоящее время не используем mysql. Однако я бы хотел сохранить старые данные перед миграцией.
Проблема в том, что я не могу просто заархивировать файлы в цикле, прежде чем отправить их туда. Поэтому я подумал, что смогу распаковать на лету перед отправкой, чтобы не хранить сжатый файл на жестком диске.
for i in * ; do cat i | gzip -9c | s3cmd put - s3://mybudcket/mybackups/$i.gz; done
Чтобы проверить эту команду, я запустил ее без цикла, и она ничего не отправляла, но и ни на что не жаловалась. Есть ли способ достичь этого?
ОС ubuntu 12.04 s3cmd версия 1.0.0
Спасибо вам за ваши предложения.
2 ответа
В качестве альтернативы вы можете использовать https://github.com/minio/mc. Minio Client aka mc
написан на Golang, выпущен под лицензией Apache версии 2.
Это реализует mc pipe
команда для пользователей для потоковой передачи данных непосредственно в Amazon S3. mc pipe
может также передавать по нескольким направлениям параллельно. Внутренне mc pig выполняет потоковую передачу и параллельную многоэтапную загрузку.
$ mc pipe
NAME:
mc pipe - Write contents of stdin to files. Pipe is the opposite of cat command.
USAGE:
mc pipe TARGET [TARGET...]
пример
#!/bin/bash
for i in *; do
mc cat $i | gzip -9c | mc pipe https://s3.amazonaws.com/mybudcket/mybackups/$i.gz
done
Если вы можете увидеть mc
также реализует mc cat
Команда:-).
Функция, позволяющая вводить stdin для S3, была добавлена в ветку Master в феврале 2014 года, поэтому я думаю, что ваша версия новее этой? Версия 1.0.0 от 2011 года и ранее, текущая (на момент написания этой статьи) 1.5.2. Вероятно, вам нужно обновить вашу версию s3cmd
Кроме этого, в соответствии с https://github.com/s3tools/s3cmd/issues/270 это должно работать, за исключением того, что в "do cat i" отсутствует знак $, чтобы указать его как переменную.