使用shell脚本备份Mysql数据库 - 将bind-address设置为localhost

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用shell脚本备份Mysql数据库 - 将bind-address设置为localhost相关的知识,希望对你有一定的参考价值。

我正在使用shell脚本将我的数据库从远程服务器备份到Synology NAS。脚本工作正常但是当我在de mysql config @中将绑定地址设置为'localhost'时,脚本不再工作了。该脚本需要SSH验证。

问题:如何在此脚本中创建SSH连接/凭据?

在我使用的脚本下面:

#! /bin/bash

TIMESTAMP=$(date +"%Y-%m-%d")
PAST=$(date +"%Y-%m-%d" -d "30 days ago")
BACKUP_DIR="/volume1/dir/dir2/$TIMESTAMP"
PAST_DIR="/volume1/dir/di2/$PAST"
HOST="myip"
MYSQL_USER="username"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="password"
MYSQLDUMP=/usr/bin/mysqldump


rm -rv $PAST_DIR 

mkdir -p $BACKUP_DIR

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

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

您需要通过ssh发送命令。脚本的修改版本应该完成任务。

#! /bin/bash

TIMESTAMP=$(date +"%Y-%m-%d")
PAST=$(date +"%Y-%m-%d" -d "30 days ago")
BACKUP_DIR="/volume1/dir/dir2/$TIMESTAMP"
PAST_DIR="/volume1/dir/di2/$PAST"
HOST="myip"
MYSQL_USER="username"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="password"
MYSQLDUMP=/usr/bin/mysqldump

SSH_KEY=""
SSH_USER=""
SSH_HOST=""

REMOTE_COMMAND="$MYSQL -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD -s -e 'SHOW DATABASES' | grep -v 'information_schema'"
databases=$(ssh -i $SSH_KEY $SSH_USER@$SSH_HOST "$REMOTE_COMMAND")

created=0

for db in $databases; do
  DUMP="$BACKUP_DIR/$db.sql"

  # To save backup on remote machine
  case $created in
    0) REMOTE_COMMAND="rm -rv $PAST_DIR; mkdir -p $BACKUP_DIR"; created=1
       ssh -i $SSH_KEY $SSH_USER@$SSH_HOST "$REMOTE_COMMAND" ;;
    *) ;;
  esac

  REMOTE_COMMAND="$MYSQLDUMP --force --opt -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip -9 > $DUMP.gz"
  ssh -i $SSH_KEY $SSH_USER@$SSH_HOST "$REMOTE_COMMAND"

  # To save backup on local machine
  # case $created in
  #   0) rm -rv $PAST_DIR; mkdir -p $BACKUP_DIR; created=1 ;;
  #   *) ;;
  # esac
  # REMOTE_COMMAND="$MYSQLDUMP --force --opt -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db"
  # ssh -i $SSH_KEY $SSH_USER@$SSH_HOST "$REMOTE_COMMAND" | gzip -9 > $DUMP.gz

done

注意:您需要设置SSH_KEY(如果您有基于ssh密钥的身份验证),SSH_USERSSH_HOST变量。此外,我提供了两个解决方案,以防您在本地计算机上保存备份,从您启动命令的位置。还要注意-s旗帜和mysql命令(SHOW DATABASES部分),它不会打印出colum名称(这里是Database)。

以上是关于使用shell脚本备份Mysql数据库 - 将bind-address设置为localhost的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本

如何使用shell脚本每天自动备份mysql数据库

使用Shell脚本实现自动备份MySQL数据库

使用Shell脚本实现自动备份MySQL数据库

使用shell脚本实现自动备份MySQL数据库

MySql DUMP 自动备份数据库 Shell 脚本