« Mac De Oracle Heterogeneous! #1 | トップページ | Mac De Oracle Heterogeneous! #3 »

2005年12月30日 (金) / Author : Hiroshi Sekiguchi.

Mac De Oracle Heterogeneous! #2

さて、Generic Connectivityを試す環境作りです。

まず最初は、MacOSX 10.4.3 Tiger (PowerBook G4 1Ghz 17inchに、MySQL 4.0.25 Standardをインストールしてデータベースを構築、表の作成、最後にデータ登録まで行う。

MacOSXでのMySQL構築を書いているBlogも多数存在するので、Mac De Oracleではその辺りは簡単に(端折ってとも言う)書く事にするので悪しからず。

MacOSX 10.4 Serverならば、MySQL4.1も付属していますが、Server版ではないのでダウンロードしてインストールする。
これをダウンロードして利用した。
インストーラをダブルクリックするだけでインストールできるので簡単です。
後は、インストーラに付属しているコントロールパネルをライブラリ/PreferencePanes/以下にコピーすればシステム環境設定から起動停止できるようになります。


gencon_blog2_img1


gencon_blog2_img2



MySQLは、/usr/local/mysql にインストールされるので以下のような感じで環境変数を設定しておく


pb17:〜 discus$ cat .bash_profile

export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin

pb17:˜ discus$

以下のようにコマンド起動しても構わないが、システム環境設定にインストールしたコントロールパネルから起動したほうが楽ですね。自動起動の設定もこれでできます。


$ sudo mysqld_safe --user=mysql &

または、以下のコントロールパネルで起動。(私はGUIで起動してます。楽なので)


gencon_blog2_img3


gencon_blog2_img4



文字化けが気になるのでGeneric Connectivityで接続する環境はなるべく同一キャラクタセットにしておきたいがうまい具合に統一されていない場合も多々ある。今回はMySQLのデータベースはすべてsjisを想定しているので作成するデータベースのデフォルトキャラクタセットはsjisに設定しておく。 設定は、/etc/my.cnf で行う。

今回作成する mysqldb データベースのデフォルトキャラクタセットを以下のように設定しておく。


pb17:˜ discus$ cat /etc/my.cnf
[mysqld]
default-character-set = sjis
[mysqldump]
default-character-set = sjis
[mysql]
default-character-set = sjis
[mysqldb]
default-character-set = sjis
pb17:˜ discus$

念のため起動しているか確認。


Last login: Tue Nov 15 21:59:49 on console
Welcome to Darwin!
pb17:˜ discus$ sudo mysqladmin -u root -p ping
Enter password:
mysqld is alive

rootユーザで接続し、jobs というユーザを作成。localhostとWindows XP Proからだけ接続できれば十分なのだが、今回は全ホストからの接続を受け付けるようにした。
(セキュリティ上はNGなのだが。。)
ちなみに、ちゃんとやるのであれば、localhostとWindows XP Proからの接続を受け付けるように grant文を2回実行する必要がある。


pb17:˜ discus$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or ¥g.
Your MySQL connection id is 239 to server version: 4.0.25-standard

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.

mysql> use mysql
Database changed
mysql> grant all on mysqldb.* to 'jobs'@'%' identified by 'xxxxxxxxxx';
Query OK, 0 rows affected (0.04 sec)

mysql> exit
Bye

mysqldb というデータベースを作成する。


pb17:˜ discus$ sudo sh
Password:
sh-2.05b# mysqladmin -u root -p create mysqldb
Enter password:
sh-2.05b#
sh-2.05b#
sh-2.05b# exit
exit


作成した jobs ユーザで mysqldbに接続し、キャラクタセットの確認後 MyISAMの表及び、InnoDBの表を作成する。最後にマルチバイトを含む文字列の登録と参照を行う。


pb17:˜ discus$ mysql -u jobs -p mysqldb
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or ¥g.
Your MySQL connection id is 100 to server version: 4.0.25-standard

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.


※デフォルトキャラクタセットを確認しておく。

mysql> show variables like '%char%'¥G
*************************** 1. row ***************************
Variable_name: character_set
Value: sjis
*************************** 2. row ***************************
Variable_name: character_sets
Value: latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5
*************************** 3. row ***************************
Variable_name: convert_character_set
Value:
3 rows in set (0.00 sec)

※ emp表をMyISAMエンジンで作成する。

mysql> show create table emp¥G
*************************** 1. row ***************************
Table: emp
Create Table: CREATE TABLE `emp` (
`empno` int(11) NOT NULL default '0',
`ename` varchar(40) default NULL,
PRIMARY KEY (`empno`)
) TYPE=MyISAM
1 row in set (0.00 sec)

※Terminalから日本語を入力すると以下のようになるが、問い合わせると正常に表示される。
(現時点のTerminalの問題点なのでしかたない。)
  ちなみに、Terminalの文字エンードは 日本語MacOS(SJIS系)にしてある。


mysql> insert into emp values(1,'¥202¥250¥202¥347¥202¥250¥202¥347');
Query OK, 1 row affected (0.00 sec)

mysql> insert into emp values(2,'¥202¥331¥202¥260');
Query OK, 1 row affected (0.00 sec)

mysql> insert into emp values(3,'¥211¥273¥202¥257¥202¥310¥202¥242¥202¥346¥202¥313¥201[¥201`');
Query OK, 1 row affected (0.00 sec)


mysql> select * from emp;
+-------+------------------+
| empno | ename |
+-------+------------------+
| 1 | おらおら |
| 2 | ほげ |
| 3 | 化けないよねー〜 |
+-------+------------------+

3 rows in set (0.00 sec)

mysql>
mysql>


トランザクションをサポートしているinnoDBをエンジンに使った表も用意する。(BDBやMAXDBも存在するようだが、InnoDBを使っているところのほうが多そうなのでInnoDBに絞る。
InnoDBは、Oracleのようなマルチバージョニングを行っているエンジンであり、先日Oracleが買収したことでも有名。

(前述の表は、MyISAMをエンジンに利用しているため、commitや、rollbackが行えない。つまり、INSERT文や、UPDATE文、DELETE文は ”常に”AUTOCOMMIT されてしまう。
ROLLBACKができないので、その手の処理はプログラムに実装する必要があるのだ。常にトランザクションを意識している世界でプログラミングしていた方は要注意!)

当然、OracleにあるようなFlush back queryや、Flush back dropも無いのでバックアップから戻すことになる。rollback入力し、エラーが帰ってきたところで、あ! という声が発せられることになる。。。(自分で実験済み! ^^;;; )

ちなみに、今回はMySQLやPostgreSQL側にOracleからデータを参照することをメインに考えているのであまり影響ないが、どのような動きをするのかも確認しておきたいので、MyISAM及びInnoDB両エンジンを利用した表を準備しておく。

注)
show create table inno_emp; としても内容は確認できるが非常に読みにくく表示されるので show create table inno_emp¥G として表示形式を読みやすくしてある。
詳細は、mysql> help  としてヘルプで確認してもらいたい。
 
mysql> show create table inno_emp¥G
*************************** 1. row ***************************
Table: inno_emp
Create Table: CREATE TABLE `inno_emp` (
`empno` int(11) NOT NULL default '0',
`ename` varchar(40) default NULL,
PRIMARY KEY (`empno`)
) TYPE=InnoDB
1 row in set (0.07 sec)

emp表と同じデータを登録しておく。


mysql> insert into inno_emp select * from emp;
Query OK, 3 rows affected (0.08 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from inno_emp;


+-------+------------------+
| empno | ename |
+-------+------------------+
| 1 | おらおら |
| 2 | ほげ |
| 3 | 化けないよねー〜 |
+-------+------------------+
3 rows in set (0.00 sec)

mysql>

ここまでで、 MacOSX 10.4.3 Tiger (PowerBook G4 1Ghz)のMySQL4.0.25のデータベースの準備は完了した。
次は、同じMacに PostgreSQL7.4.9を構築する。

余談だが、妻は今 Scarab De MySQL と格闘中?!(環境できたかな〜)

| |

トラックバック


この記事へのトラックバック一覧です: Mac De Oracle Heterogeneous! #2:

コメント

妻です。
できましたよー。とりあえず。(笑)
なんか、一カ所リンクをクリックすると例外吐くけどね。
でも、ま、普通に使う分には問題ないレベルなので、とりあえず置いときます。

Scarabというか、BTS(Bug Tracking System)使っていると、Excelでバグ管理しているところなんかには行きたくありません〜!と、心底思ってしまいます。

ScarabはJavaで開発しているから、Macでも動くと思うので、やってみたいな。
Mac de Scarab !?

投稿: atsuko | 2005年12月30日 (金) 12時51分

コメントを書く