
>> 入手先(MySQL)
MacOSX用にはバイナリパッケージ版が存在する。これを使えば「 .dmgファイルをダブルクリック」→「マウントしたイメージの .pkgファイルをダブルクリック」→(以下略)で済む。MySQLサーバのオンオフは「システム環境設定」で設定できる。
いいかげんにネット上にある情報をつまみ食いしながらMySQLサーバを使用するための設定していたところ、メチャクチャにしてしまったらしく再インストールすることとなった。このときどんな作業をしていたかの記録はとっていなかったため、何が原因でおかしくなったのかはよくわからない。
ただ一般的な注意点としては「何もするな」ということは言える。MacOSXの場合 .pkg ファイルを使って簡便にインストールが済んでいるので余計なことはしなくてよく、変に弄るとかえっておかしくしてしまうようだ。オラクルが書いている冗長で要点のわかりにくいマニュアルの類いは一切読まない&従わないという態度がよいのではないかとさえ思う。
とりあえずインストール後は(システム環境設定でMySQLをオンにしたら)ターミナルを起動して以下のようにタイプすれば操作可能なはずである。
mysql
このMySQLモニタを使って色々と行なう操作や設定の詳細については下記サイトなどを参考のこと。
>> MySQL初心者入門講座
下手に(私がやってしまったような)試行錯誤していると(再インストール後も)ユーザ名が空のアカウントなどが残ってしまうことがある。上記サイトにはそうしたものを削除する方法等の情報はない。この点では下記サイトなどが参考になった。
インストール後初めての root としてのログインを mysql -u root で行なっている点なども参考になるかもしれない。
Perl から MySQL を使うためには DBI モジュールと DBD::mysql モジュールが必要である。両者のインストールは CPAN を使って行なう。
以下のサイトを参考にした。
>> データベースを用いたWebによる情報システム構築概観
>> PerlでMySQLを扱う
使用例としては、たとえば以下の内容を含むCGIスクリプト(mysql.cgi)があげられる。WebブラウザからSQLコマンドをデータベースに送り、その結果を表示するものである。これが動作する前提としてDBIモジュールの他にCGIモジュールもインストール済みで use 宣言してある必要がある。CGIモジュールは Bundle::LWP をインストールするとついでにインストールされるのではないかと思う。無い場合は「POSTで得たデータの処理例」で示した方法を使えばよい。
######## フォーム
print"<p>";
print '<form action="mysql.cgi" method="post">';
print 'SQL:<input type="text" name="query" size="60">';
print '<input type="submit" name="exec" value="sub">';
print '</form>';
print"</p>";
####### データ受け取り用オブジェクトの生成
$form = CGI->new;
####### DBに接続
$db=DBI->connect("DBI:mysql:database=sample","ユーザ名","パスワード", {RaiseError => 0, PrintError => 1});
$com_lines = $form->param('query');
if($com_lines ne ""){
$sth = $db->prepare("$com_lines");
$sth->execute;
while(@ary = $sth->fetchrow){
print "<p>";
print "@ary\n";
print "</p>";
}
# ステートメントハンドルクリア
$sth->finish;
}
# DB切断
$db->disconnect;
一応正常に動作するようだが、フォームに入力するSQL文によってはエラーが出ることもあるので何かおかしいところはあるのかもしれない。SQL文は show tables や select * from Hogehoge where foo like '%baa%' などというように末尾に「;」はつけないものを入力する。
スクリプトを説明すると、まず DBI->connect メソッドによってデータベースにアクセスしている(オブジェクトを生成している?)。上の例ではデータベース名が sample で、「ユーザ名」「パスワード」にはそのデータベースに対して権限のあるアカウントを指定する。
$form にはCGIクラスのオブジェクトリファレンスが入っているので次の $form->param メソッドではフォームに入力した内容を取得して $com_lines に収めている。これを引数としてDBIクラスのprepare メソッドに渡してコマンド実行の準備をしておき、execute メソッドでコマンドを実行するという流れになっている。
SQL文を実行した結果は fetchrow メソッドによって「行データを項目の配列として」取り出される。MySQLモニタでなら1行として表示される結果を(項目別に?)分割して配列の要素として @ary に収め、この作業が続く間は配列の中身を print するという内容になっている。
以降のパートは後始末である。
インストール後は余計なことはしない方が良いのだが、何もしないと日本語が使えなくなってしまうという不具合がある。例によって全然ユニコードじゃないのにユニコードだと思われているUTF8絡みの(というか、欧米人の偏狭な文字・言語観の押しつけと無理解によって生じる)問題が起きている。この解決については以下のサイトが参考になった。
>> れぶろぐ
ローカル環境のMySQLについては「解決策3(あまりオススメしない)」を使って解決した。これは my.cnf の [mysqld] の下に init-connect="SET NAMES ujis" などと書き込む方法である。
データベース (の samle_table というテーブル)にMac上のファイル(sample.txt)を読み込ませるには root で MySQLモニタにログインして以下のように SQL文を書く。
load data local infile 'Users/アカウント/Documents/sample.txt' into table sample_table fields terminated by '\t' lines terminated by '\n';
MySQLは出来上がったデータベースから色々とデータを呼び出したり操作したりするには便利だが、データを入力したり訂正したりするときにはさほど便利ではない(←本当は便利なのかもしれないがまだよくわかっていない)ように思える。
Copyright(c)2005-2012 ccoe@mac.com Allrights reserved.