使用用户/密码文件连接到多个数据库并导入数据

使用用户/密码文件连接到多个数据库并导入数据

大家好,我在同一个主机上有大约 30 个空数据库。我正在尝试编写一个脚本来导入所有数据库架构和数据,这些架构和数据已经使用 mysqldump 以正确的格式从另一台主机导出。

格式如下:
MYSQL_USER= for users in 'cat db_users.txt';done
MYSQL_PASS= for pass in 'cat db_pass.txt';done
DBNAME= for dbs in 'cat db_name.txt';done
DBSCHEMAFILES= ls *.schema.sql
DBDATAFILES=ls *.data.sql

执行 mysql -h mydbhost -u $MYSQL_USER -p$MYSQL_PASS $DBNAME < $DBSCHEMAFILES;完成

执行 mysql -h mydbhost -u $MYSQL_USER -p$MYSQL_PASS $DBNAME < $DBDATAFILES;完成

以上只是想法,完全无法实现。
提前谢谢您。

MySQL 版本:mysql Ver 8.0.26

答案1

您不需要为此使用 for 循环。如果您转储所有数据库并在另一台主机上恢复它们​​,则您只需要 mysqldump 命令。

MySQL(Oracle)对此有非常详尽的记录。

在 mysqldump 文档中检查 mysqldump ''--all-databases'' https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html

至于用户和访问权限,也应该记录下来。我认为您可以为此转储和恢复 mysql 架构。

答案2

谢谢你的回答。也许我应该提到源数据库是 GCP MySQL 数据库,目标数据库服务器是 planetscale MySQL。抱歉,应该更具体一点。目标数据库服务器拥有所有数据库,但每个数据库都有自己的用户名和密码,因此无法从 mysqldump 导入。每个数据库都已导出到两个单独的文件中。一个是 xyz.schema.sql,另一个是 xyz.data.sql

我使用带有 dbname、host、user、pass 列的 .csv 文件,按照以下步骤操作:

当 IFS="," 读取 -r dbname host user pass 时;执行 mysql -h "$host" -u "$user" -p"$pass" $dbname < "$dbname.data.sql" 完成 < secrets.csv

希望它能够帮助那些迁移到行星规模的人。

答案3

30 份相同的数据?如果是的话,

  • 装入一份副本。
  • 告诉mysqldump不要“创建数据库”;而是简单地填充它。
  • 使用该转储 30 次,每次都自己做CREATE DATABASE并告知mysql将转储加载到该数据库中。

如果有 30 个不同的数据库,请澄清问题。

相关内容