gpt4 book ai didi

mysql - 使用 shell 脚本备份 Mysql 数据库 - 绑定(bind)地址设置为 localhost

转载 作者:行者123 更新时间:2023-11-29 10:27:55 25 4
gpt4 key购买 nike

我正在使用 shell 脚本将数据库从远程服务器备份到 Synology NAS。该脚本工作正常,但是当我将 mysql 配置@远程服务器中的绑定(bind)地址设置为“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 key 的身份验证)、SSH_USER , SSH_HOST 变量。另外,如果您想将备份保存在本地计算机上(从您启动命令的位置),我还提供了两种解决方案。另请注意 mysql 命令(SHOW DATABASES 部分)中的 -s 标志,该标志不会打印出列名称(此处 数据库)。

关于mysql - 使用 shell 脚本备份 Mysql 数据库 - 绑定(bind)地址设置为 localhost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47940894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com