将MySQL数据库备份到Amazon S3
时间:2020-02-23 14:37:41 来源:igfitidea点击:
在本教程中,我将带我们完成将MySQL数据库的步骤备份到Ubuntu和基于CentOS的MySQL服务器上的Amazon S3.
Amazon S3是Amazon Web服务提供的Web服务。
它通过Web Services接口提供存储,并为我们提供API到存储在其上的对象。
由于S3是一种高度可用的分布式对象存储服务,因此它是存储不消耗大空间的数据库等关键数据的理想场所。
在通过API上与S3交互之前,我们需要安装提供AWS命令的AWSCLI工具。
在CentOS,Ubuntu和MacOS上安装AWSCLI
唯一的要求是Python 2 2.6.5+或者Python 3版本3.3 +要在CentOS 7上安装AWSCLI,请运行命令:
$sudo yum install python-pip # For CentOS $sudo apt-get python-pip # For Debian and Ubuntu $brew install python3 && curl -O https://bootstrap.pypa.io/get-pip.py \ && python3 get-pip.py --user # For MacOS
然后从pip安装awscli
$sudo pip install awscli $pip3 install awscli --upgrade --user # For python3
通过运行AWS -Version验证AWS CLI是否正确安装。
$aws --version aws-cli/1.14.45 Python/3.6.4 Darwin/17.4.0 botocore/1.8.49
AWS CLI定期更新以添加对新服务和命令的支持。
要更新到最新版本的AWS CLI,请再次运行安装命令。
$pip install awscli --upgrade --user
如果需要卸载AWS CLI,请使用pip卸载。
$pip uninstall awscli
配置AWSCLI.
通过运行通过用户的凭据配置AWS CLI工具:
# aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
至少提供访问密钥ID和秘密访问密钥。
这将创建一个带有凭据的~/.aws的文件夹。
$ls .aws config credentials
转储MySQL数据库
现在是时候备份MySQL数据库了。
我们首先需要导出用于转储MySQL数据库的一些变量。
export DB_USER="root" export DB_PASSWORD="" export DB_HOST="localhost" export date_format=`date +%a` export db_dir="/tmp/databases/$date_format" export dest_backup_file="/tmp/mysql-databases-$date_format.tgz" export s3_bucket="s3://bucket-name" mkdir -p $db_dir 2>/dev/null
创建db_dir,如果它不存在:
if [ ! -d $db_dir ]; then mkdir -p $db_dir fi
下一件事是将数据库转储到文件。
# Get all MySQL databases databases=`mysql -u $USER -h $HOST -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database` # Dump all databases for db in $databases; do if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then echo "Dumping database: $db" mysqldump -u $USER -h $HOST -p$PASSWORD --databases $db > $db_dir/$db-$date_format.sql fi done
所有数据库都将导出为指定的DB_DIR值导出到指定的DB_DIR值。
将MySQL数据库备份到S3
我们拥有导出的所有数据库,我们应该准备好备份到S3.
在同步之前压缩它们是一个很好的做法。
# tar -zcvf $dest_backup_file -C $db_dir . # aws s3 cp $dest_backup_file ${s3_bucket}
这将将压缩文件上传到AWS S3.
一旦完成,检查内容使用:
# aws s3 ls ${s3_bucket}