如何在Windows中备份多个MySQL数据库中的每个表?

问题描述 投票:0回答:2

我在 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 创建任何虚拟机。我尝试将此脚本转换为批处理文件(.bat),但没有成功,因为我对高级脚本不太了解。

Windows 上有满足我需求的解决方案吗?或者是否可以将此脚本转换为在 Windows 中运行?

提前谢谢您。

mysql windows batch-file database-backups mysql-backup
2个回答
1
投票
如果您的要求只是导出

tablewise

 中所有 
databases
 的数据 
database instance
,则以下脚本将为您带来魔力,并且它将在 Windows 中运行。您提到的代码片段更多地满足您的要求,例如发送到 FTP/压缩等等。这似乎不是您的要求,但您也可以通过修改我在这里提供的基本短脚本来实现这一点。

逻辑很简单。

    列出所有数据库。
  • 循环数据库,并列出所有表。
  • 循环遍历所有表并导出。
适当地声明所有变量。

##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

希望对你有用。


0
投票
我有一个要求,我需要从 62 个 MYSQL 数据库中提取数据信息_Schema 分区表,并通过电子邮件发送详细信息。 我想在所有数据库上都有一个 crontab 计划,但这会更复杂。 有没有什么简单的方法可以将所有 62 个 MYSQL 数据库中的数据提取到一个表中,然后从那里通过电子邮件发送详细信息/ 如果有任何想法或脚本。在这里帮忙吧。非常感谢

© www.soinside.com 2019 - 2024. All rights reserved.