为了进行备份,我创build了一个脚本,将所有需要备份的文件夹归档,并将其发送到S3(通过s3cmd),然后在上载完成后将其删除。
我正在寻找一种方法来避免创build存档,然后删除它,因为我没有足够的空间临时存储存档! 可能吗?
这是我的脚本:
DBLIST=`mysql -uMYSQL_USERNAME -pMYSQL_PASSWORD --events -ANe"SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','performance_schema')" | sed 's/,/ /g'` MYSQLDUMP_OPTIONS="-uMYSQL_USERNAME -pMYSQL_PASSWORD --single-transaction --routines --triggers" BACKUP_DEST="/home/backup/db" for DB in `echo "${DBLIST}"` do mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip -f > ${BACKUP_DEST}/${DB}.sql.gz & done wait tar -czvf /home/backup/db2/`date +\%G-\%m-\%d`_db.tar.gz ${BACKUP_DEST} s3cmd --reduced-redundancy put -r /home/backup/db2/ s3://MY-S3-BUCKET/ --no-encrypt find /home/backup -type f -delete
在旁注中,我敢打赌,以纯文本格式存储用户名/密码并不是一个最佳实践,我该如何解决这个问题?
提前致谢 :)
它看起来像s3cmd可以接受来自stdin的input,至less根据这个bug的分辨率在2/6/2014。 如果你的s3cmd比你应该能够做的更新:
tar -czvf - ${BACKUP_DEST} | s3cmd --reduced-redundancy put - s3://MY-S3-BUCKET/`date +\%G-\%m-\%d`_db.tar.gz --no-encrypt
大多数实用程序使用-作为文件名来指示写入标准输出或从标准input读取。 这将消除驱动器上的.tar.gz文件。
至于密码/键/等去,它看起来像你可以指定一个configuration文件s3cmd与-c FILENAME ,大概你会使用生成的命令添加 – --dump-config到一个完整的--dump-config命令行创build文件。 不过,您仍然需要保护该文件。 同样,MySQL也有~/.my.cnf文件(参见这里的例子),在这里你可以存储连接信息。
而且,由于您已经在对单个数据库进行转储,我怀疑再次对tar进行压缩并不会对数据进行更多的压缩,并且会使整个过程花费更长的时间。 考虑只使用-cvf -和.tar作为文件名。