使用mysql和php强制导入新的数据库名称

T. *_*nes 5 php mysql database import

我有一个大型数据库dump.sql文件,我从linux中的命令行导入..sql转储创建名为"database_name"的数据库.我想从这个.sql文件导入数据库但我想强制它到一个具有不同名称的数据库,因为脚本当前覆盖"database_name"和"database_name"已经存在并且具有我无法覆盖的数据.

是.sql文件中查找和替换的最佳选择?由于文件是50mb,最好的方法是什么.我不能简单地在那个shiz上使用file_get_contents()吗?我可以吗?

下面是我必须在.sql文件中替换的行:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `database_name` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `database_name`;
Run Code Online (Sandbox Code Playgroud)

fab*_*fab 9

转储数据库时mysqldump,请使用该选项--no-create-db.这将CREATE DATABASE在您的转储文件中隐藏该语句.
然后使用
mysql -h <host> -u <user> -p <databaseName> < dump.sql
这种方式恢复数据库这样就可以在你喜欢的任何数据库中恢复你的数据(但是这个数据库必须存在!)

  • 在这种情况下,您必须替换`database_name`(如您所述).你可以用`sed'/ \``database_name \`/ \`new_database_name \`/'dumpFile.sql> newDumpFile.sql来做到这一点 (5认同)

T. *_*nes 7

您必须替换.sql文件中的database_name.

你可以用shell做到这一点 sed 's/database_name/new_database_name/' dumpFile.sql > newDumpFile.sql

这是我问题的正确答案,但是在另一个答案的评论中由'fab'提供.

注意:正如@Diego在注释中指出的那样,如果字符串'database_name'显示在此.sql转储中的任何其他位置,它也将在那里被替换.您可能希望使用less file_name.sql查找/替换后查看.sql文件的内容,然后更明确.

  • 请小心处理,因为该表达式会将每个字符串"database_name"更改为"new_database_name". (3认同)