<返回更多

分享一段 Bash 脚本,用于MySQL备份压缩到Samba远程目录

2020-06-04    
加入收藏

引言

linux 做自动化其实非常方便,不会像windows一样受制于系统的配置以及桌面环境。Linux 完全没有这些负担,一个 Bash 就搞定了。

今天我们分享一段基本的 Bash 代码,实现 MySQL 数据库备份,并通过网络连接拷贝到远程服务器目录。

干货 | 分享一段 Bash 脚本,用于MySQL备份压缩到Samba远程目录

 

代码时间

首先声明所使用的解释器:

#!/bin/bash

声明时间戳变量:

TIMESTAMP=$(date +"%F")

然后是 MYSQL 操作所使用到的变量:

MYSQL="/usr/bin/mysql"
MYSQL_USER="{mysql_user_with_DBAdmin_permits}"
MYSQL_PASSword="{mysql_user_password}"
MYSQLDUMP="/usr/bin/mysqldump"

我们指定了 mysql 应用位置,以及 mysqldump 工具的绝对路径。还有连接数据库所使用的用户名和密码。

接着是 Samba 服务器的远程挂载目录相关的变量:

SMB_BACKUP_DIR="/mnt/backup"
SMB_BACKUP_SOURCE="//{path_to_network_share}"
SMB_BACKUP_USER="{network_user_with_permits_to_share}"
SMB_BACKUP_PASSWORD="{network_user_password}"

指定了备份的目录,以及原始目录,还有访问远程目录所使用的用户名和密码。

为了方便操作,再使用一个完整的备份文件路径变量:

BACKUP_DIR="$SMB_BACKUP_DIR/$TIMESTAMP"

下面是逻辑过程。

如果用于映射 Samba 远程目录的备份目录不存在,就创建:

[[ ! -d "$SMB_BACKUP_DIR" ]] && mkdir -p $SMB_BACKUP_DIR

然后,我们把远程通过网络访问的 Samba 服务器地址,挂载到本地目录,同时传递访问的用户授权信息。

mount -t cifs "$SMB_BACKUP_SOURCE" "$SMB_BACKUP_DIR" -o username="$SMB_BACKUP_USER",password="$SMB_BACKUP_PASSWORD"

注意文件类型一定是 cifs (Common Internet File System) 类型,需要 linux kernel 内核支持该文件系统。

如果需要备份的目录不存在,就创建:

[[ ! -d "$BACKUP_DIR" ]]  && mkdir -p $BACKUP_DIR

下面是数据库的备份。

我们把 MySQL 的数据库遍历出来:

databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"`

结果就是本地所有数据库名称,然后我们使用循环,逐一导出数据,并压缩到 $BACKUP_DIR ,文件名称是数据库名 + gz 后缀。

for db in $databases; do
 $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$db.gz"
done

好了,不知道会有多久这个任务执行完毕,就可以不用挂载远程 Samba 目录了,因为这很耗费网络资源。

umount $SMB_BACKUP_DIR

写在最后

本文我们通过一个简单的需求,在 Linux 下实现了 MySQL 自动备份到指定目录。同时挂载 Samba 远程目录,将数据库备份到异地。

逻辑很清晰,实现很简单,也没有复杂的过程,很适合自动化工作。

HAppy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>