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

时间:2017-12-22 11:38:50

标签: mysql bash shell backup synology

我正在使用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

1 个答案:

答案 0 :(得分:1)

您需要通过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标记,该标记不会打印列名称(此处为Database)。