如何在windows下备份多个mysql数据库中的每个表?

t9aqgxwy  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(440)

我在windows服务器上有多个mysql数据库,我想通过为相关数据库的每个表在.sql文件夹中创建一个包含数据库名称的文件夹来备份所有这些数据库。这样做的目的是使恢复信息更容易,因为有时我只需要恢复一个表而不是整个数据库。
我对此进行了一些研究,并找到了一个shell脚本。这个脚本为服务器上的每个数据库创建一个文件夹,并在其中为每个表创建一个.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

资料来源: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创建任何vm。我尝试将此脚本转换为批处理文件(.bat),但没有成功,因为我不太了解高级脚本。
有没有一个windows解决方案可以满足我的需要?或者是否可以将此脚本转换为在windows中工作?
先谢谢你。

3duebb1j

3duebb1j1#

如果您的要求只是导出数据 tablewise 对于所有的 databases 在你的 database instance ,下面的脚本将为您做魔术,它将在windows中工作。您在讨论中提到的代码片段比您的要求做得更多,比如发送到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

希望对你有用。

相关问题