![]() |
PC1台にMySQL複数インストール
執筆:2006/11/28
編集:2006/11/29
前回は、仮想OSを使ったインストール方法を紹介しました。
メモリに余裕がないと運用にはむかない方法でした。
mysql付属の英語のヘルプを読んでいましたら
どうも複数インストールに対応していました。
今回は、ポート番号を変更することで
1台のPCに同時に複数のバージョンを起動する方法です。
ここでは、すでにMySQL4.1.xの自動インストールしてある状態で
4.0を追加インストール前提で書いてあります。
では、公式サイトからダウンロードしましょう。
わかりにくいところにありますので根気よく探してください。
執筆時では
一つ前の.26までは、setup.exeもあるようですが
mysql-noinstall-4.0.27-win32.zip
が最新のようだったのでダウンロードしました。
展開後
C:\Program Files\MySQL\MySQL Server 4.0に全部移動。
設定ファイルは、
デフォルトのcnfだとダイヤルアップファイルと誤認識するようなので
ここでは、拡張子は、iniを使います。
C:\Program Files\MySQL\MySQL Server 4.0\my-small
をmy.iniとしてコピーします。
(copy my-small.cnf my.iniにした方が無難)
wordpadでmy.iniを開いて、ポートを3307に変更
(my-small.cnfは拡張子が見えない可能性がありますので
dosプロンプトで確認した方が無難です)
WinXPでは、
ren my.ini.cnf my.iniはなぜか無視されたので注意しましょう。
変更部分 C:\Program Files\MySQL\MySQL Server 4.0\my.ini | |
[mysqld-4.0] basedir="C:/Program Files/MySQL/MySQL Server 4.0/" datadir="C:/Program Files/MySQL/MySQL Server 4.0/data/" port = 3307 enable-named-pipe socket = mypipe1 |
C:\> | "C:\Program Files\MySQL\MySQL Server 4.0\bin\mysqld-nt" --install mysqld-4.0 --defaults-file="C:\Program Files\MySQL\MySQL Server 4.0\my.ini" |
C:\> | NET START mysqld-4.0 |
間違った場合は、以下で削除してやり直しましょう | |
C:\> | "C:\Program Files\MySQL\MySQL Server 4.0\bin\mysqld-nt" --removel mysqld-4.0 |
コントロールパネル→管理ツール→サービスで
MySQLとmysqld-4.0が動いているか確認しましょう。
4.0.27の起動の確認 | |
C:\> | mysql -P 3307 |
mysql> | status |
mysql> | quit |
4.1.xの起動の確認 | |
C:\> | mysql -u root |
mysql> | status |
mysql> | quit |
正常に出力されていたら
インストール作業は終了です。
必要に応じてサービスの起動停止のバッチファイルも作っておくと便利です。
起動
NET START サービス名
停止
NET STOP サービス名
自動起動の場合は、管理ツールで確認しましょう。
あまり使わない場合は、サービス開始を手動にして
バッチファイルで起動・停止するようにすると
メモリの消費を最小限に抑えることができます。
![]() |
仮想OS上のMySQLへの接続
執筆:2006/11/27
編集:2006/11/27
MySQLのバージョンが違う物で、動作を試す必要がありましたので
ローカルPC上でMySQLの複数バージョンを使えるようにしました。
使ってみると体感は
ローカル(ホストOS)のWin上のMysqlよりなんだか高速に使えています
それで、
設定が 非常に難しかったので、メモ(._.) φ
まず必要な物 | |
メモリ | 400MB以上 |
仮想OS | Virtual PC (無料版) |
OS | VineLinux 4(無料版) |
MySQL | Clientとserverツール (パッケージから取得できます。) |
Step1:仮想OSソフトのインストール
VitualPC, VM , QEMU好きな物をどうぞ。
ただし、QEMUは自動保存が利かないので利用しない方がいいでしょう。
筆者は、VitualPCを使いましたのでVitualPC前提で進めていきます。
インストールが済みましたか?
それでは、インストール後に
VitualPCの説明書に従って、Microsoft Loopback Adapterをインストールします。
Microsoft Loopback Adapter | TCP/IP |
次のIPアドレスを使う | |
IPアドレス | 192.168.1.1 |
サブネットマスク | 255.255.255.0 |
デフォルトゲートウェイ |
Step2:仮想OSのインストール(ゲストOS)
筆者は、Vine linux4.0をインストールしました。
設定を楽にするため サーバーとGNOMEをインストールしました。
ネットワークの設定は、インストール後にします。
IPアドレス | 192.168.1.10 | 192.168.x.y のyの部分は 好きなもので結構です xの部分は上のホストOSと同じ物にしてください 詳しくはOS付属のwindowsヘルプを読んでください |
サブネットマスク | 255.255.255.0 | |
デフォルトゲートウェイ | 192.168.1.1 | |
ネームサーバー | 192.168.1.1 | ? |
※筆者のPCでは、Microsoft Loopback Adapterを
一番目のアダプタにしないとうまく動きませんでした。
(インストール後に変更もできます)
OS名は適当にどうぞ、後で変更ができます
セットアップでうまくいかなかった場合は、
再起動後に以下のメニューから設定ができます。
管理者でGNOME起動後に、 メニューバーの
デスクトップ→システム管理→ネットワークの管理
tips:わけがわからなくなったら、
停止した後仮想OSのネットワークアダプタをはずして再起動して設定を削除しますかで削除して
再起動してしまえば、また最初からやり直せます
Step3:仮想OS上のサービスの起動
手動で行うには、
サービスの手動起動 | service サービス名 start |
サービスの自動起動 登録/解除 |
chkconfig --list chkconfig サービス名 off chkconfig サービス名 on |
ファイヤーウォール | ややこしいので省略 (下を参考のこと) |
とても面倒なので、
管理者でGNOME起動後に、 メニューバーの
デスクトップ→システム管理→ネットワークの管理
デスクトップ → システム管理 → ネットワークの管理 |
|
サービスの管理 | 起動時に自動起動する サービスの設定を行います。 mysqlにチェックを付けます。 また不要なものは 停止させるといいでしょう |
セキュリティレベルの設定 とファイアウォール |
必要なポートを開きます。 mysqlは 3306 tcpを使います。 一覧に無い場合は 手動で追加してください |
Step4:接続の確認
Window上から
ping 192.168.1.10と打ってみましょう。
反応があれば接続成功です
では、Linux上から
ping 192.168.1.1と打ってみましょう。
反応があれば接続成功です
Window上から
mysqladmin -u root --password="password" -h 192.168.1.10
きっと あなたダメと断られるでしょう。
Step5:Mysqlの接続許可IPリストへ登録
GRANT USAGE ON *.* TO 'dummy'@'192.168.1.1' IDENTIFIED BY 'pwassword' WITH GRANT OPTION; FLUSH PRIVILEGES; |
|
SET PASSWORD FOR 'dummy'@'localhost' = PASSWORD('pwassword'); FLUSH PRIVILEGES; |
Step6:運用
全部正常に動くことが確認できましたら、
再起動してログイン画面で放置しておくと
無駄なメモリも使わずに、動作が軽快になると思います。
終了するときは、状態を保存するようにしておけば
静的IPにしているので
次回使うときは、瞬時に立ち上げれるので便利です。
Step_Extra1:Error編
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.10' (10061) | |
接続が確立していません。 ネットワークの設定を確認してください。 ping 192.168.1.10でつながりますか? つながる場合は、 ファイヤーウォールを見直してください IP-ドメイン解決は、 C:\WINDOWS\SYSTEM32\DRIVERS\etc\hosts に登録で簡単にできます。 |
|
ERROR 1045 (00000): Access denied for user: 'root@192.168.1.1' (Using password:YES) | |
mysqlへの ユーザー及び接続ホスト権限 設定が必要です 例: 192.168.1.1から接続してくるdumyさんを許可. GRANT USAGE ON *.* TO 'dummy'@'192.168.1.1' IDENTIFIED BY 'pwassword' WITH GRANT OPTION; FLUSH PRIVILEGES; |
|
突然rootでもログインできなくなった・・・ 付属の説明書の mysql-initを参照しましょう。 Problems and Common Errors Administration-Related Issues A.4.1. How to Reset the Root Password |
|
Q:動的に自動でホスト名とIPを関連づけしたいのですが?
A: 筆者には、わかりません。 |
|
Q: 必要なソフトが足りません。 インストールを忘れました。 A: synapticで検索して追加してください。 |
Step_Extra2:番外編
※
最後に
筆者のPCでは、(数分で)
一定操作や一定時間たつと
VirtualPCでのキーボード、又はマウスを受け付けなくなる。
VirtualPC2004の不具合
もしくは、
未対応のXP HOME上で動かしている
のどちらかだと推測しているが さだかではない。
キー操作がきかないときのために
sshdなどを有効にして、
ホストOS上からログインできるようにしておきたい。
linuxのユーザーの追加
adduser -g users ユーザー名
passwd ユーザー名
また、KDEをインストールすると
guarddogという強力なファイヤーウォール設定ソフト
を導入することが可能になります!!
Step_Extra3:MySQLインストール
Windows | 公式サイトからダウンロードします。 |
VineLinux | 外部と接続が確立している場合 synaptioc や apt-get install MySQL-server apt-get install MySQL-client などを使います |
外部と接続が確立していない場合 vineのftpから必要なrpmを 持ってきて、 rpm -i MySQL-server_4.0.25-0vl0_i386.rpm rpm -i MySQL-client_4.0.25-0vl0_i386.rpm みたいにします。 |
|
FreeBSD | pkg_addかなにかで試してみてください。 |
![]() |
SQLite Tips(sjis)
作成:2006.0915
編集:2006.09.15
【SQL】 | |||||||||||||||||||||||||||||||||
文字化け | |||||||||||||||||||||||||||||||||
【現象】 shift-jisやeucで データに標準関数を使用すると 予期せぬ 文字化けを誘発します。
|
|||||||||||||||||||||||||||||||||
例 | SELECT '新',lower('新');
|
||||||||||||||||||||||||||||||||
例 | SELECT '新品', substr('新品', 1, 1),substr('表', 1, 1);
|
||||||||||||||||||||||||||||||||
例 | SELECT like('_\','表'), '表' like '_\'
|
||||||||||||||||||||||||||||||||
まとめ |
・likeの動作が説明書と違う。 式 like 文字列式 like(文字列式, 式,) ※ like(x,y) : 実行すると説明書と位置が逆<like(y,x)>。 誤実装? 誤植? |
||||||||||||||||||||||||||||||||
sqlite/lang_expr.html にも書いてありますが、 A bug: SQLite only understands upper/lower case for 7-bit Latin characters. LIKE operator is case sensitive for 8-bit iso8859 characters or UTF-8 characters. |
|||||||||||||||||||||||||||||||||
そういうことで、utf8でデータを操作した方が無難ですね。 | |||||||||||||||||||||||||||||||||
確認用コード | |||||||||||||||||||||||||||||||||
php5 | <?php $charsetlist = array('sjis'=>'shift_jis', 'utf-8'=>'utf-8', 'euc-jp'=>'euc-jp'); $charset = 'sjis'; switch ($_GET['charset']) { case 'utf-8': $charset = 'utf-8'; break; case 'euc-jp': $charset = 'euc-jp'; break; case 'sjis': $charset = 'sjis'; break; default: $charset = ''; break; } ?> <html> <head> <?php echo sprintf('<meta http-equiv="Content-Type" content="text/html; charset=%s;"' , $charset ? $charsetlist[$charset] : 'shift_jis'); echo sprintf('<title>%s</title>' , $charset ? $charsetlist[$charset] : 'shift_jis'); ?> </head> <?php if (!$charset) { $uri = $_SERVER["SCRIPT_NAME"]; print '<frameset rows="*,30%,30%">'."\n"; print sprintf('<frame name="top" src="%s">', $uri.'?charset=sjis')."\n"; print sprintf('<frame name="bottom" src="%s">', $uri.'?charset=utf-8')."\n"; print sprintf('<frame name="bottom1" src="%s">', $uri.'?charset=euc-jp')."\n"; print '</frameset>'."\n"; } else { print "<body>"; mb_language('ja'); $sql = array(); array_push($sql , "SELECT '新',lower('新');"); array_push($sql , "SELECT '新品', substr('新品', 1, 1),substr('表', 1, 1);"); $dbh = array(); $user = $pass = ''; $dbh['3'] = new PDO('sqlite::memory:', $user, $pass); $dbh['2'] = new PDO('sqlite2::memory:', $user, $pass); print "charset[$charset]<br>\n"; function print_table($items ,$options=array()) { global $charset; print '<table border="1" cellpadding="5" cellspacing="0" bordercolor="#008000">'; print sprintf(' <tr> <td bgcolor="#F8FFE6">%s %s.x</td>' .'<td bgcolor="#F8FFE6">%s</td> </tr>' , mb_convert_encoding('表示結果', $charset, 'auto') , $options['ver'] , $charset ); foreach($items as $key => $value) { if (is_int($key)) { continue; } print "<tr>"; print '<td align="center" bgcolor="#CCFFCC">'.htmlspecialchars($key).'</td>'; print '<td align="center">'.htmlspecialchars($value).'</td>'; print "</tr>"; } print '</table>'; } foreach($dbh as $key => $value) { if (!$dbh[$key]) { $s = sprintf("sqlite[%s]に接続できませんでした。", $key); $s = mb_convert_encoding($s, $charset, 'auto'); print($s."<br>\n"); continue; } print ("<br>\n"); foreach ($sql as $sqlkey => $sqltext) { $sqltext = mb_convert_encoding($sqltext, $charset, 'auto'); print "[sql] ".htmlspecialchars($sqltext)."<br>\n"; foreach ($dbh[$key]->query($sqltext) as $row) { print_table($row ,array('ver'=>$key)); // print_r($row); } } $dbh[$key] = null; } } print "</body>"; ?> </html> |
標準関数上書き編 | |
substr pdoの例 |
mb_language('ja'); $charset = 'euc-jp'; // dbで使う文字コードを指定 function sqlite_ufunc_mb_substr($p1, $p2, $p3) { global $charset; $p2--; if (!$charset) { return mb_substr($p1, $p2, $p3); } return mb_substr($p1, $p2, $p3,$charset); } $db->sqliteCreateFunction('substr', 'sqlite_ufunc_mb_substr', 3); |
lower 2.xの例 |
sqlite_create_function ($db, 'lower', 'sqlite_ufunc_mb_lower'); function sqlite_ufunc_mb_lower($str) { global $charset; if (!$charset) { return mb_strtolower($str); } else { return mb_strtolower($str, $charset); } } |
sql関数との引数の違いを注意しながら mb_関数で 置換していくと そのまま使えるようになるかもしれないです。 注:利用する文字コードの指定を間違わないように適時変更してください。 |
|
![]() |
Firebird の動作検証
作成日:2006.09.06
更新日:2006.09.06
更新日:2009.06.27
マイPCで 動作したもの 動作しなかったもの リスト |
||||||
Version |
コンパイラ |
Windows |
||||
Vista | XP | 9.x系 | ||||
Me | 98 | 95 | ||||
1.5.3 embed win | Delphi2005 (WinXP) |
● | ● | ● | ||
2.0.3 | 上記同様 | ● | ● | × | ||
2.1.2 |
上記同様 | ● | ● | |||
2.5.x |
? |
? |
? |
? |
? |
|
3.x | ? |
? |
? | ? | ?(-) | |
空白は未確認 (※説明書上は、対応) 【win 95】 Firebird_v2.1.2.InstallationGuide.pdfには、 |
【Firebird 1.5x embedの感想】
短所:boolean型がないのが痛い。
長所:処理が速い。
win95でもさくさく動くのがイイ。
開発の止まったBDEより断然お得?
日本語列名が使えてGood
【Firebird 2.x embedの感想】
いろいろ機能アップ。
またしてもboolean型がないのが痛い
2009年現在、2.0.x、2.1.x、2.5.xの3系統がある。
Firebird 2 新しい予約語 (Newly Reserved Words) | |
BIT_LENGTH BOTH CHAR_LENGTH CHARACTER_LENGTH CLOSE CROSS FETCH LEADING LOWER OCTET_LENGTH OPEN ROWS TRAILING TRIM |
|
Changed from Non-reserved to Reserved | |
USING | |
Keywords Added as Non-reserved | |
BACKUP * BLOCK * COLLATION COMMENT * DIFFERENCE * IIF * NEXT SCALAR_ARRAY * SEQUENCE RESTART RETURNING * |
|
Keywords No Longer Reserved | |
ACTION RESTRICT WEEKDAY * CASCADE ROLE YEARDAY * FREE_IT * TYPE |
|
No Longer Reserved as Keywords | |
BASENAME * GROUP_COMMIT_WAIT * NUM_LOG_BUFS * CACHE * LOGFILE * RAW_PARTITIONS * CHECK_POINT_LEN * LOG_BUF_SIZE * |
|
Those marked with an asterisk (*) are not present in the SQL standard. |
![]() |