我是新来的Perl,并试图在RHEL框中编写脚本,该脚本会自动配置我们在主机上创建的新站点的vanilla DB。我已经有连接语句工作,我能够连接并从脚本中创建一个数据库(使用$ dbh-> do(qq(CREATE DATABASE $ dbcreate));这是最好的方式???),但我有一对夫妇,我一直无法弄清楚如何让他们工作。执行mysql命令的Perl脚本?
这些是我有问题的mysql命令。有什么建议么?谢谢!
$dbh = DBI->connect("DBI:mysql:$db:$host", $user, $pass);
$dbh->do(qq(CREATE DATABASE $dbcreate));
$dbh->do(qq(GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `$dbcreate` . * TO 'moodle'@'%'`));
$dbh->do(qq(FLUSH PRIVILEGES));
$dbh->do(qq($dbcreate < MySQL_pristine.sql));
$dbh->do(qq(USE $dbcreate));
$dbh->do(qq(UPDATE md1_label SET content = REPLACE(content, "pristine", "$dbcreate")));
$dbh->do(qq(UPDATE md1_label SET contents = REPLACE(contents, "pristine", "$dbcreate")));
$dbh->do(qq(UPDATE md1_label SET questiontext = REPLACE(questiontext, "pristine", "$dbcreate")));
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX ,�' at line 1 at create-auto-db.pl line 52.
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test3 < MySQL_pristine.sql' at line 1 at create-auto-db.pl line 54.
DBD::mysql::db do failed: Table 'test3.md1_label' doesn't exist at create-auto-db.pl line 56.
DBD::mysql::db do failed: Table 'test3.md1_label' doesn't exist at create-auto-db.pl line 57.
DBD::mysql::db do failed: Table 'test3.md1_label' doesn't exist at create-auto-db.pl line 58.
如果你使用的是DBI,你为什么还试图与mysql shell交互工作?你的问题的前半部分涉及Perl,后半部分涉及将文件重定向到命令行工具'mysql'。你的示例代码中没有Perl。此外,你还没有解释你有什么问题。我们应该猜测吗? – DavidO
所有这些语句都可以在'DBI'中正常工作,并且可以从'$ dbh-> do()'执行。如果您收到错误消息,请将它们发布,然后再添加一些Perl。您发布的单个声明中存在一些风险,但没有任何我们可以在没有任何上下文的情况下提供帮助的风险。一个可能的问题是,如果你错误地引用了字符串(即用'qq {}'而不是'q {}'),则可能会插入'@'。 –
@morungos我编辑了我的帖子,包括我试过的代码以及下面的错误。我认为你对@符号是正确的。 – Brandon