个性化阅读
专注于IT技术分析

在Plesk中创建MySQL Server数据库的非增量(逻辑备份)自动备份外壳脚本(sh)

本文概述

自动化任务是理智而懒惰的开发人员的正常行为。通常自动化的任务之一是服务器中数据库的备份。使用MySQL, 使用mysqldump进行的逻辑备份非常容易实现和自动化。但是, 在Plesk环境中, 你可能会遇到一些细节问题, 例如知道MySQL服务器中以admin / root身份访问的密码是什么。默认情况下, 使用Plesk安装和配置的MySQL没有名为” root”的用户。它被重命名为” admin”, 并且仅具有” localhost”访问权限。在Linux上, 密码被加密并存储在/etc/psa/.psa.shadow中。知道了这一点, 你可能想编写自己的Shell脚本来自己自动执行数据库的非增量(完整)备份, 但是如果我们告诉你已经为它编写了一个脚本, 该脚本可能对你有用呢?

在本文中, 我们将与你分享一个非常简单的脚本, 以使用Plesk中的mysqldump生成压缩备份。

1.创建备份脚本

继续创建备份脚本, 在这种情况下, 我们将命名为plesk_db_backup.sh并将以下代码附加到该脚本:

#!/bin/bash

# Script to export all the databases stored in MySQL Server in Plesk
# Note: This file needs to use the LF break line format, not CRLF
# Is recommendable as well to use absolute paths for the directories
# @author Carlos Delgado <dev@ourcodeworld.com>

# Define constants of the script
USERNAME="admin"
BACKUP_DIRECTORY="/var/ourcodeworld-db-backups/backups"

# Important:
# This directory will be created and **DELETED** after executing the script
TMP_BACKUP_DIRECTORY="/var/ourcodeworld-db-backups/tmp-backups"
EXCLUDED_DATABASES="Database|information_schema|performance_schema|mysql"

# 1. Build array of databases registered
BASES_DE_DATOS=$(MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysql -u $USERNAME -e "SHOW DATABASES;" | tr -d "| " | egrep -v $EXCLUDED_DATABASES)

printf "Starting backup of databases ... \n\n"

# 2. Verify if the temporary backup folders exists, otherwise create it 
[ -d $TMP_BACKUP_DIRECTORY ] || mkdir $TMP_BACKUP_DIRECTORY

# 3. Iterate over the database array available for the signed user (admin)
for db in $BASES_DE_DATOS; do
    printf "    Exporting database: '$db' | "

    # 3. Dump database with mysqldump
    # MYSQL_PWD is used to access as admin in MySQL inside Plesk based servers
    # MYSQL_PWD=`cat /etc/psa/.psa.shadow`
    BKP_FILENAME=`date +%Y%m%d`.$db.sql.gz
    MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysqldump -u $USERNAME --databases $db | gzip > $TMP_BACKUP_DIRECTORY/$BKP_FILENAME

    printf "OK\n"
done

printf "\nThe backups have been succesfully generated ... Compressing all databases into a single file ... \n"

# 5. Verify if the backup folder exists in the current directory, otherwise create it
[ -d $BACKUP_DIRECTORY ] || mkdir $BACKUP_DIRECTORY

# 6. Compress generated backups (.sql files)
FNL_BKP_FILENAME=`date +%Y_%m_%d_%H_%M_%S`.mysql_databases_backup.tar.gz
tar -zcvf $BACKUP_DIRECTORY/$FNL_BKP_FILENAME $TMP_BACKUP_DIRECTORY

printf "\nCleaning up !\n"

# 7. Delete the temporary directory of backups
rm -rf $TMP_BACKUP_DIRECTORY

printf "\nBackup succesfully generated. \n"

粘贴内容之后, 请确保使用LF(unix)行尾而不是CLRF(Windows)将shell脚本保存在系统上, 否则shell脚本将不会运行(即使具有执行权限)。

怎么运行的

备份的逻辑如下:首先, 需要以管理员身份定义用于访问plesk的用户名, 在本例中, 用户名是相同的” admin”。你还需要定义一些变量, 这些变量包含一些将在备份期间使用的目录, 一些变量用于存储临时文件, 而另一些变量将包含最终的备份文件。然后, 将创建一个新变量, 它将包含MySQL服务器上可用数据库的名称数组, 另外还有一个变量将某些数据库排除在外, 以防你需要排除它们。

阵列可用后, 脚本需要验证是否有一个临时备份目录, 其中包含将在以后压缩的转储, 如果不存在, 将创建该临时转储, 并在内部创建转储。现在, 备份的重点是执行mysqldump命令, 该命令针对数据库名称数组中的每个项目执行。将转储的.sql文件压缩并存储在临时目录中。转储每个数据库后, 脚本将压缩临时目录的所有内容, 并在备份目录内创建一个新的压缩tar文件。

创建备份后, 将删除临时文件夹, 并且该过程完成!

2.运行备份脚本

现在你知道了脚本的工作原理, 你只需要执行它, 因此请确保使用以下命令将执行权限授予SH文件:

chmod +x plesk_db_backup.sh

然后以你想要的方式运行shell脚本:

# Simply run the shell script directly if it has write permissions
./plesk_db_backup.sh

# Or run the shell script with the sh command
sh ./plesk_db_backup.sh

在终端中生成的输出将类似于:

Starting backup of databases ... 

    Exporting database: 'ourcodeworld-es' | OK
    Exporting database: 'ourcodeworld' | OK
    Exporting database: 'ourcodeworld-docs' | OK
    Exporting database: 'other_database' | OK

The backups have been succesfully generated ... Compressing all databases into a single file ...

/var/ourcodeworld-db-backups/tmp-backups/20180517.ourcodeworld-es.sql.gz
/var/ourcodeworld-db-backups/tmp-backups/20180517.ourcodeworld.sql.gz
/var/ourcodeworld-db-backups/tmp-backups/20180517.ourcodeworld-docs.sql.gz
/var/ourcodeworld-db-backups/tmp-backups/20180517.other_database.sql.gz

Cleaning up !

Backup succesfully generated.

脚本完成后, 你将在创建脚本的目录中有一个新文件夹, 即备份。在内部, 你将找到一个gzip压缩文件, 其中包含Plesk的MySQL服务器中可用的每个数据库的mysqldump生成的所有压缩转储:

Plesk备份MySQL服务器

编码愉快!

赞(0)
未经允许不得转载:srcmini » 在Plesk中创建MySQL Server数据库的非增量(逻辑备份)自动备份外壳脚本(sh)

评论 抢沙发

评论前必须登录!