私はPerlを初めて使い、RHELボックスにスクリプトを書き込もうとしました。このスクリプトは、私たちがホスト上に作成した新しいサイト用のバニラDBを自動設定します。私はすでに接続ステートメントが働いていると私は接続し、スクリプトからDBを作成することができる(使用して$ dbh - > do(qq(CREATE DATABASE $ dbcreate));これは最善の方法ですか?私はそれらを動作させる方法を理解することができていないカップルを持っている。Perlスクリプトがmysqlコマンドを実行していますか?
これは私が問題を抱えている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シェルと対話的に作業しようとしていますか?あなたの質問の最初の半分はPerlを扱い、後半はファイルをコマンドラインツール 'mysql'にリダイレクトすることです。あなたのサンプルコードにはPerlはありません。また、あなたは何を持っているのか説明していません。私たちは推測すべきでしょうか? – DavidO
これらの文はすべて 'DBI'から正常に動作し、' $ dbh-> do() 'から実行できます。エラーメッセージが表示されている場合は、それらを投稿してください。もう少しPerlを投稿してください。あなたが掲示した単一の声明にはいくつかのリスクがありますが、文脈が存在しなければ私たちが助けることはあまりありません。文字列を間違って引用すると(つまり、 'q {} 'ではなく' qq {} 'で)補間される可能性のある' @ 'を使用することが考えられます。 –
@morungos私は以下のエラーと一緒に試したコードを含めるために投稿を編集しました。あなたは@記号について正しいと思います。 – Brandon