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

引言在 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 :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注 。

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


    推荐阅读