将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}