我需要创建一个脚本来更新具有不同文件的多个数据库。 遵循当前进程的描述:
show database;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Audi |
| Bmw |
| Ferrari |
| mysql |
| performance_schema |
+--------------------+
对于每个数据库,我都有一个 sql 文件,例如:
update_Audi.sql
update_Bmw.sql
update_Ferrari.sql
我使用这个方法:
mysql -uroot -pxxxxx Audi < /path_to_/update_Audi.sql
mysql -uroot -pxxxxx Bmw < /path_to_/update_Bmw.sql
mysql -uroot -pxxxxx Ferrari < /path_to_/update_Ferrari.sql
这只是一个示例,但我们每个品牌都有 50 多个数据库......
有时我有一个适用于所有数据库的通用文件,例如 all_db.sql。我使用这个程序:
mysql -uroot -pxxxxx Audi < /path_to_/all_db.sql
mysql -uroot -pxxxxx Bmw < /path_to_/all_db.sql
mysql -uroot -pxxxxx Ferrari < /path_to_/all_db.sql
当我想要导入多个文件时,我需要将特定文件“ex audi”关联到正确的数据库:
mysql -uroot -pxxxxx Audi < /path_to_/update_Audi.sql
如何自动选择文件“update_Audi.sql”将其导入到数据库“Audi”中?
现在,我需要将同一个文件导入到多个数据库中,我该怎么做?
我曾尝试这样做,但我已经停止了,因为我不知道如何继续...... 这是不完整的 bash 脚本:
#!/bin/bash
MyUSER="root" # USERNAME
MyPASS="xxxxx" # PASSWORD
MyHOST="localhost" # Hostname
#Autodetected via which command
MYSQL="$(which mysql)"
#Gethostname
HOST="$(hostname)"
#Date
NOW="$(date +"%d-%m-%Y")"
# Store list of databases
DBS=""
#I dont know to do it...
SINGLE_FILE="path_to_file"
MULTIPLE_FILE="Multiple file path"
# Exclude these databases
IGGY="mysql information_schema performance_schema"
# Get all database list first
DBS="$($MYSQL -u$MyUSER -p$MyPASS -h$MyHOST -Bse 'show databases')"
for db in $DBS
do
skipdb=-1
if [ "$IGGY" != "" ];
then
for i in $IGGY
do
[ "$db" == "$i" ] && skipdb=1 || :
done
fi
if [ "$skipdb" == "-1" ] ; then
#For single File to import
$MYSQL -u $MyUSER -h $MyHOST -p$MyPASS $db < $SINGLE_FILE
#For multiple file to import
$MYSQL -u $MyUSER -h $MyHOST -p$MyPASS $db < $MULTIPLE_FILE
fi
done
最佳答案
您只需要在一个 while 循环中完成即可:
$MYSQL -N -u"$MyUSER" -h"$MyHOST" -p"$MyPASS" -e 'show databases' | \
grep -v 'mysql\|information_schema\|performance_schema' | \
while read -r db; do
single_file="/path_to_/update_$db.sql"
multiple_file=/path_to_/all_db.sql
[ -f "$single_file" ] && $MYSQL -u"$MyUSER" -h"$MyHOST" -p"$MyPASS" "$db" <"$single_file"
[ -f "$multiple_file" ] && $MYSQL -u"$MyUSER" -h"$MyHOST" -p"$MyPASS" "$db" <$multiple_file
done
关于mysql - 用于使用多个文件更新多个数据库的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24327755/