如何从 Windows 中的多个 MySQL 数据库备份每个 table?

How to back up each table from multiple MySQL databases in Windows?

我在 WIndows 服务器上有多个 MySQL 数据库,我想 通过在 .SQL 相关数据库table 的每个文件夹。这个想法是为了更容易恢复信息,因为有时我只需要恢复一个 table 而不是整个数据库。

我对此进行了一些研究,发现了一个 shell 脚本可以做到这一点。此脚本为服务器上的每个数据库创建一个文件夹,并在其中为每个 table 创建一个 .SQL 文件,然后将所有这些文件夹压缩到一个 .ZIP 文件中,并仍然将其发送到 FTP服务器(这对我来说不是必需的)。

下面是我找到的 shell 脚本。

#!/bin/sh
# System + MySQL backup script
# Copyright (c) 2008 Marchost
# This script is licensed under GNU GPL version 2.0 or above
# ---------------------------------------------------------------------

#########################
######TO BE MODIFIED#####

### System Setup ###
BACKUP=YOUR_LOCAL_BACKUP_DIR

### MySQL Setup ###
MUSER="MYSQL_USER"
MPASS="MYSQL_USER_PASSWORD"
MHOST="localhost"

### FTP server Setup ###
FTPD="YOUR_FTP_BACKUP_DIR"
FTPU="YOUR_FTP_USER"
FTPP="YOUR_FTP_USER_PASSWORD"
FTPS="YOUR_FTP_SERVER_ADDRESS"

######DO NOT MAKE MODIFICATION BELOW#####
#########################################

### Binaries ###
TAR="$(which tar)"
GZIP="$(which gzip)"
FTP="$(which ftp)"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"

### Today + hour in 24h format ###
NOW=$(date +"%d%H")

### Create hourly dir ###

mkdir $BACKUP/$NOW

### Get all databases name ###
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do

### Create dir for each databases, backup tables in individual files ###
  mkdir $BACKUP/$NOW/$db

  for i in `echo "show tables" | $MYSQL -u $MUSER -h $MHOST -p$MPASS $db|grep -v Tables_in_`;
  do
    FILE=$BACKUP/$NOW/$db/$i.sql.gz
    echo $i; $MYSQLDUMP --add-drop-table --allow-keywords -q -c -u $MUSER -h $MHOST -p$MPASS $db $i | $GZIP -9 > $FILE
  done
done

### Compress all tables in one nice file to upload ###

ARCHIVE=$BACKUP/$NOW.tar.gz
ARCHIVED=$BACKUP/$NOW

$TAR -cvf $ARCHIVE $ARCHIVED

### Dump backup using FTP ###
cd $BACKUP
DUMPFILE=$NOW.tar.gz
$FTP -n $FTPS <<END_SCRIPT
quote USER $FTPU
quote PASS $FTPP
cd $FTPD
mput $DUMPFILE
quit
END_SCRIPT

### Delete the backup dir and keep archive ###

rm -rf $ARCHIVED

Source: https://www.howtoforge.com/shell-script-to-back-up-all-mysql-databases-each-table-in-an-individual-file-and-upload-to-remote-ftp

我终于可以使用这个脚本了,但是我这里没有 Linux 机器,我也无法使用 Linux 创建任何虚拟机。我试图将此脚本转换为批处理文件 (.bat),但我没有成功,因为我对高级脚本不是很了解。

Windows有没有满足我需要的解决方案?或者是否可以将此脚本转换为在 Windows?

中工作

提前致谢。

如果您的要求只是为 database instance 中的所有 databases 导出数据 tablewise,则以下脚本将为您带来神奇效果,它会在 [=31] 中发挥作用=].您在问题中提到的代码片段更多地满足了您的要求,例如发送到 FTP/zipping 等等。这似乎不是您的要求,但您也可以通过修改我在这里提供的基本短脚本来实现。

逻辑很简单。

  • 列出所有数据库。
  • 遍历数据库,列出所有表。
  • 遍历所有表并导出。

正确声明所有变量。

##Export all databases names to file
mysql -h your-host -u username -pPassword your-database-name --skip-column-names --execute="SHOW DATABASES;" > databases.tmp
echo "Start!"
#### Look over database names

#### Outter loop to get table names

for /F %%A in (databases.tmp) do (
   echo "Exporting table Names for %%A"
   mysql -h your-host -u username -pPassword %%A --skip-column-names --execute="SHOW TABLES;" >"%%A_tables.tmp"

   mkdir %%A


#### nested loop to create table name files per table
   for /F %%B in (%%A_tables.tmp) do (
   echo "Exporting data for %%B of %%A"
   mysqldump -h your-host -u username -pPassword %%A %%B> "%%A\%%A_%%B.sql"
   )
)

del *.tmp

希望对你有用。