大家好,我在同一个主机上有大约 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 个不同的数据库,请澄清问题。