質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

3601閲覧

perlでMySQL上にDBを作成する際のエラーについて

oh__307

総合スコア7

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2015/12/24 04:46

OrthoMCLというツールを用いてクラスタリングしたいと考えているのですが、これをする際にperl経由でMySQLに接続しDBを作成する手順があるのですが、DBDやDBIのperl moduleを入れて実行しています。

#!/usr/bin/perl use DBI; use FindBin; use lib "$FindBin::Bin/../lib/perl"; use OrthoMCLEngine::Main::Base; use strict; usage() unless (@ARGV >= 2); my $configFile = $ARGV[0]; my $blastFile = $ARGV[1]; my $base = OrthoMCLEngine::Main::Base->new($configFile); my $dbh = $base->getDbh(); my $dbVendor = $base->getConfig("dbVendor"); if ($dbVendor eq 'mysql') { loadBlastMySQL($base, $blastFile); } elsif ($dbVendor eq 'oracle') { loadBlastOracle($base, $blastFile); } else { die "Config file '$configFile' contains invalid value '$dbVendor' for dbVendor\n"; } sub loadBlastMySQL { my ($base, $blastFile) = @_; require DBD::mysql; my $dbh = $base->getDbh(); my $sst = $base->getConfig("similarSequencesTable"); my $sql = " LOAD DATA LOCAL INFILE \"$blastFile\" REPLACE INTO TABLE $sst FIELDS TERMINATED BY '\\t' "; my $stmt = $dbh->prepare($sql) or die DBI::errstr; $stmt->execute() or die DBI::errstr; } sub loadBlastOracle { my ($base, $blastFile) = @_; my $dbLogin = $base->getConfig("dbLogin"); my $dbPassword = $base->getConfig("dbPassword"); my $dbString = $base->getConfig("dbConnectString"); my @database = split(/:/, $dbString); my $dbInstance = $database[2]; open (PARFILE, ">orthomclPar.tmp"); print PARFILE "userid=$dbLogin/$dbPassword\@$dbInstance\n"; close PARFILE; my $sst = $base->getConfig("similarSequencesTable"); my $sqlHeader = " LOAD DATA INFILE '$blastFile' INTO TABLE $sst FIELDS TERMINATED BY \"\\t\" OPTIONALLY ENCLOSED BY '\"' TRAILING NULLCOLS ( query_id, subject_id, query_taxon_id, subject_taxon_id, evalue_mant, evalue_exp, percent_identity, percent_match ) "; open (CTLFILE, ">orthomclCtl.tmp"); print CTLFILE $sqlHeader; close CTLFILE; my $command=`sqlldr parfile=orthomclPar.tmp control=orthomclCtl.tmp`; unlink("orthomclCtl.tmp", "orthomclPar.tmp"); } sub usage { die " Load Blast results into an Oracle or Mysql database. usage: orthomclLoadBlast config_file similar_seqs_file where: config_file : see below similar_seqs_file : output from orthomclParseBlast EXAMPLE: orthomclSoftware/bin/orthomclLoadBlast my_orthomcl_dir/orthomcl.config my_orthomcl_dir/similarSequences.txt NOTE: the database login in the config file must have update/insert/truncate privileges on the tables specified in the config file. Sample Config File: dbVendor=oracle (or mysql) dbConnectString=dbi:Oracle:orthomcl dbLogin=my_db_login dbPassword=my_db_password similarSequencesTable=SimilarSequences "; }

以上のコードでタブ区切りの.txtファイルをそのままMySQL上にDBを作れるはずなのですが、

DBD::mysql::st execute failed: Table 'mysql.similarsequences' doesn't exist at ../orthomclLoadBlast line 39, <F> line 14.

というエラーコードが出てきます。
また、

# this config assumes a mysql database named 'orthomcl'. adjust according # to your situation. dbVendor=mysql dbConnectString=dbi:mysql:mysql dbLogin=root dbPassword=insideout similarSequencesTable=SimilarSequences orthologTable=Ortholog inParalogTable=InParalog coOrthologTable=CoOrtholog interTaxonMatchView=InterTaxonMatch percentMatchCutoff=50 evalueExponentCutoff=-5 oracleIndexTblSpc=NONE

以上のconfigファイルの中身と見比べてみてもsimilarSequencesTable=SimilarSequences となっておりそれで大丈夫だと思っているのですがなぜかエラーが出続けます。
どなたかこのエラーに対するアドバイスをいただけたらと思います。宜しくお願いします。

ちなみにperl -v でv5.18.2
Mac OS X 10.10.5
MySQL-5.7.10
です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

詳しくは調べていませんが、気になる点としては、データベース名がmysql(MySQL自体が使うデータベース)になっているというのがまずあります。
これ自体はconfigファイルに修正が必要かと思います。(dbConnectStringのところ)
ユーザーガイドを眺めてみましたが、orthomclInstallSchemaというのを実行しないとデータベースの中身(テーブルとか)は作成されないような気がしますが、手順通りに使用されているでしょうか?
ちなみに、上記以前に、MySQLのユーザーやデータベースの作成は先にする必要があるかと思います。
参考までに、質問に出ているエラーは、テーブルが存在しないと言うエラーかと思います。

投稿2015/12/24 06:21

TaMaMhyu

総合スコア1356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oh__307

2015/12/24 07:14

回答ありがとうございます。orthomclInstallSchema実行をしたつもりになっていたみたいで、再度やり直したところエラーが出ずプログラムが動き始めました。 すごい簡単な、コードとかほとんど関係ないところでのミスでしたすみません。 自分の中でチェックしていたつもりでしたが抜けていたので次回からはしっかり自分の中で確認します。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問