日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2025年2月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28

2009-10-08
Firebird Version 1.5系列の最終版 v.1.5.6がリリースされました

今後、メインテナンスが必要な場合は、2.0と2.1系列へ移行しよう
2009.10.08

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  サービス名

自動起動の場合は、管理ツールで確認しましょう。


あまり使わない場合は、サービス開始を手動にして
バッチファイルで起動・停止するようにすると
メモリの消費を最小限に抑えることができます。

2006.12.04

仮想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: 筆者には、わかりません。

静的でよければ、hostsに書き込みます。

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かなにかで試してみてください。
   
2006.11.28

SQLite Tips(sjis)

作成:2006.0915
編集:2006.09.15


【SQL】
文字化け
【現象】
shift-jisやeucで
データに標準関数を使用すると
予期せぬ
文字化けを誘発します。
【対応】
マルチバイトに対応したユーザー関数を組み込む
utf8でデータ扱う
SELECT '新',lower('新');
表示結果 2.x, 3.x sjis euc utf8
'新'
lower('新')
SELECT '新品', substr('新品', 1, 1),substr('表', 1, 1);
表示結果 2.x sjis euc utf8
'新品' 新品 新品 新品
substr('新品', 1, 1) - ? ?
substr('表', 1, 1) - ? ?
表示結果  3.x sjis euc utf8
'新品' 新品 新品 新品
substr('新品', 1, 1) - ?
substr('表', 1, 1) \
注) - ?  は表示不能
SELECT like('_\','表'), '表' like '_\' 
表示結果 2.x sjis euc utf8
like('_\','表') 1 0 0
'表' like '_\' 1 0 0
表示結果 3.x sjis euc utf8
like('_\','表') 1 0 0
'表' like '_\' 1 0 0
まとめ
2.x 上の例からもわかるように
文字列関係の標準関数を利用すると
意図しない結果が返ります。

文字列関係の標準関数を使わず、
ユーザー定義関数を使いましょう

ユーザー関数で 標準関数を上書きすることができます。
注意キーワード例:
  like, substr, lower, ........
3.x 文字操作系の標準関数を使う場合は
utf8でデータを扱いましょう
  ユーザー関数で 標準関数を上書きすることができます。

・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_関数で 置換していくと
そのまま使えるようになるかもしれないです。
注:利用する文字コードの指定を間違わないように適時変更してください。
   
2006.09.19

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】
2.0.x系は、付属ツールも起動と同時にエラーで落ちました。
Win95では、1.5.x系で我慢するしかなさそうです

Firebird_v2.1.2.InstallationGuide.pdfには、
2.xでは、いずれWin9.x系をサポートしなくなるだろうと書かれている。


【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.
2006.09.19



PR

[PR]