2013年1月18日金曜日

MySQLのDUAL表

DBMS には Dual表というダミーテーブルを持っているものがあり、 MySQL にも Dual表が存在します。

このDual表というのはテーブルの参照を必要としないSQLを記述するのに よく用いられます。

例えば、ただ単に現在の日付を取得したい、という場合に

select
    current_timestamp
from
    dual

のように記述できます。
ですが、MySQL では FROM 句はなくてもエラーにならないため、 上記のSQLと同じ結果を得たい場合は、

select
    current_timestamp

の用に FROM 句のない SQL を実行すれば、それで日付を取得できます。

では、DUAL 表って MySQL では使わないの?と思いますが、 「FROM 句なしに WHERE 句を指定したい」、という場合などでは 構文エラーとなってしまうため、DUAL を使用しなければなりません。

次のSQLはエラーになります。

select
    current_timestamp
where
    now() like '2013-01-1%'

次の様にSQLを記述すればエラーにはなりません。

select
    current_timestamp
from
    dual
where
    now() like '2013-01-1%'

なので、DUAL 表って使わないかというとそうでもなかったりします。

それと、今 気が付いたのですが、
select
    *
from
    dual

だと MySQL ではエラーになるんですね。

某DBMSでは 1 x 1 のデータを持つテーブルになっているので

1

が取得できます。

2013年1月3日木曜日

MySQL Workbenchの導入

ER図を描くためのツールを探していたのですが、

MySQL Workbench

というMySQL公式が出しているツールで作成できるようなので 利用してみようと思います。

http://www-jp.mysql.com/products/workbench/

現時点でバージョン 5.2.45 のようです。


[導入手順]
1. 上記のURLから今すぐダウンロードを選択

2. 自身の環境に合わせたパッケージを選択
 私は、OS: Windows7(64bit) なので
 「 Windows (x86, 32-bit), MSI Installer (mysql-workbench-gpl-5.2.45-win32.msi)」 を選択しました。
 64bit用というのはないみたいですね。

3. Oracle Single Sign-On (SSO) account にログインしろといわれるので、ログインします。
 アカウントを持っていない場合は「Sign Up」から登録できます。
 私はアカウントを持っていないため、Sign Up します。
 このページは英語ですが、アカウント作成のページは日本語で登録できます。

4. Sign Up (取得済みの場合は飛ばしてください)
 画面の指示に従って情報を入力します。
 メールアドレスがアカウント名になるため、こだわりのある方は注意。
 電話番号は 国番号81 を先頭に付け、市外局番の頭の 0 は取り除いた形で入力します。
 03-1111-xxxx の場合、 813111xxxx と入力します。
 その他特に気をつけることはないと思います。各種情報は、登録後に変更可のようです。
 登録が完了すると本人確認のメールが届きます。
 このステップを行わなくてもダウンロードできるようなので忘れないように注意してください。
 有効期限は 5日間です。

5. ダウンロード
 「 Download Now 」をクリックするとダウンロードが開始します。
 MD5も表示されるので、必要な方は利用してください。
 ファイルサイズもありますが、xx.xM という表記ではなくてどうせなら byte単位で
 あると良いですよね

6. インストーラをダブルクリックでインストールが開始します。
 Setup Type はCustom と Complete がありますが、スタートメニューのショートカットの作成が
 あるかないかの差だけのようなので、 Complete を選択でよいと思います。

7. インストールが完了すると勝手に起動します。
 使用者が少ないせいか、カスペルスキーの警告が出て「弱い制限付き」になってしまいました。
 一部ネットワークが制限されるようですが、とりあえずこのままで使用してみて
 問題がでそうなら設定を変えてみようと思います。

2011年5月31日火曜日

Blenderをつかってみる

Blender は3DCGアニメーションを作成するための統合環境アプリケーションです。
( http://blender.jp/ より )

というわけで、Blender の使い方を勉強しつつまとめてみます。

■その1.インストール

blender の公式サイトよりバイナリをダウンロードできます。

http://www.blender.org/download/get-blender/

自分のOSにあったものを選択してダウンロードしてください。
ちなみに、私の環境は Win 7 なので、以下の内容は環境によっては
違うかも知れません。

インストールはインストーラが提供されているのでそれほど難しくは
ないはずですが、英語がよくわからない!という方は
↓のサイトに詳しく書かれているので、そちらを見るとよいでしょう。

http://blender.jp/modules/xfsection/article.php?articleid=277

私は
Blender 2.57b Installer (23.5 MB)
をダウンロードしました。

インストーラを起動して適当にクリックしていくと、
インストールが完了します。
win vista 以降の場合は、データの保存先などに注意したほうが
よいみたいですが、個人でデータの保存場所に特にこだわりなく使う
場合は、デフォルトの設定でよいと思います。


インストール完了後に起動してみるとわかりますが、
全部 英語です。

日本語化できるようですが、めんどくさいのでしません。
(たぶん英語がカタカナになっても意味わからないと思うので)

あ、それと解説サイトによっては Python をインストールするように促される
と書いてあるのですが、私の場合は ( ver 2.57b ) 要求されませんでした。
(インストールはされてない)
なくても、スクリプトを使用した場面以外では必要ないとのことなので、
必要になるまで入れずにいきます。

とりあえず、これで Blender を使う準備が整いました。

2011年1月1日土曜日

iPhoneアプリ開発

0. Apple ID を取得する。

http://www.apple.com/jp/

1. アップルデベロッパへ登録

http://developer.apple.com/jp/programs/register/

a. [開発を始める]

b. アップルIDがある?
 Create an Apple ID ない、もしくは日本語でID取得済の場合はこっちで新規に取得
 →cへ
 Use an existing Apple ID 英語で登録済みの場合はこっち
 →dへ
を選択して [Continue]

c. Apple ID を登録
 全部英語なので、がんばって登録
 電話番号は国番81 + 市外局番から0を抜いたもの + その後の番号全部 (最後の欄は内線なので通常は入力の必要なし)

d. ここまで登録するとSDKでの開発はできますが、iPhoneへのインストール、
配布はできません。
配布可能にするためには有料プログラムへの登録を行ってください。
ここでは、とりあえず開発環境の構築を行うのみとするので、有料登録は行いません。

1. 開発ツールの導入

iOS Dev Center からSDKをダウンロード
http://developer.apple.com/devcenter/ios/index.action

Download の
Xcode and iOS SDK X.x(version)
からダウンロード。

ダウンロード完了後、保存されたdmg形式のファイルをダブルクリックし、
Xcode and iOS SDK をダブルクリックするとインストールが開始します。


iOS Developer Program
http://developer.apple.com/jp/programs/ios/


これでiPhoneアプリを開発する環境ができました。

2010年10月17日日曜日

phpMyAdmin の文字化け対策

MySQL を phpMyAdmin から使用しているときに、
SQLの実行結果が文字化けしてしまうことがあります。

原因としてはサーバの文字設定とPHPの文字設定が違うからです。

MySQL の文字設定を問い合わせてみると…


SHOW VARIABLES LIKE 'char%';

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server ujis
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/



character_set_server ujis

これが問題っぽいです。

character_set_filesystem binary

これはこのままで問題ないです。(変更できない)

で、この設定を(character_set_server) を変えればよいのですが、
私の使用しているレンタルサーバでは設定ファイルを触れないので
この設定を変更できません。

では、どうすれば・・・???

根本的な解決策は見つからないのですが、とりあえずの対応方法が
あるので紹介します。

SQLを実行する際に次のコマンドを一緒に入力します。


SET character_set_server = utf8;


例:

SET character_set_server = utf8;
SELECT * FROM hogetbl;


これで、文字化けはしなくなると思います。

ちなみにこのコマンドを実行したあとのサーバの設定は次のようになります。


SET character_set_server = utf8;
SHOW VARIABLES LIKE 'char%';

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/


ちゃんと character_set_server が変わっていますね。

でも、一つ問題が・・・
この設定変更は毎回入力してやらないと有効になりません。

ちょっとめんどくさいですが、これでとりあえずは解決できました。
こういうところがレンタルサーバの使いづらいところですね。

2010年7月11日日曜日

Apache PHP から sudo する方法

※以下の説明は PHP が Apache ユーザで実行されている場合です。

PHP から shell を実行して sudo したい場合は Apache から sudo が
実行できるように設定しておく必要があります。

sudo の設定は visudo というコマンドで行います。
使用方法としては、 vi と変わりません。


[root]# visudo

# ↓この一行を追加すると、apache から shutdown -h now が実行可能になります
apache localhost=NOPASSWD: /sbin/shutdown -h now


でまぁ、これを PHP から実行してみます。
例えば次のようなコードで


$out = "";
$out = shell_exec("/sbin/shutdown -h now 2>&1");

echo "$out\n";


実行結果

sudo: sorry, you must have a tty to run sudo


なにやらエラーが出ました。
これは、端末がないユーザからの sudo の実行が禁止されているというメッセージです。

なので、visudo で apache ユーザに対して 端末なしでも実行できるように
設定を変更してやります。


# ↓この行でデフォルトオプション指定により、sudu 実行には
# 端末が要求されるようになっています。
Defaults requiretty


でこれをコメントしてやればいいのですが、
(多くのサイトではこれをコメントすればよいとかいてあるが…)
なんかセキュリティが弱くなりそうなので、apache ユーザのみこの
設定を外すことにします。(まぁ sudo の勉強も兼ねて)

次のように設定します。


# ↓ apache を エイリアスとして設定
User_Alias NOTTYUSERS = apache

Defaults requiretty
# ↓ NOTTYUSERS に対し、 requiretty フラグをオフ
Defaults:NOTTYUSERS !requiretty


これで、PHP から sudo が実行できるようになりました。

2010年6月12日土曜日

MySQL を使ってみよう

CentOS で MySQL を使ってみます。

どうやら調べてみると、MySQL はインストール済みのようです。


# rpm -qi mysql

Name : mysql Relocations: (not relocatable)
Version : 5.0.22 Vendor : CentOS
Release : 2.1 Build Date : 2007年01月10日 19時13分08秒
Install Date: 2007年09月15日 04時55分30秒 Build Host : builder4.centos.org
Group : Applications/Databases Source RPM : mysql-5.0.22-2.1.src.rpm
Size : 5748994 License : GPL
Signature : DSA/SHA1, 2007年04月04日 09時25分09秒, Key ID a8a447dce8562897
URL : http://www.mysql.com
Summary : MySQL のクライアントプログラムと共有ライブラリ。
Description :


いま読んでいる書籍によると、最初からインストールされているものは
設定がカスタマイズされていて、使っていく上でつまずくことが多いので
ソースからインストールし直したほうがよい、という様な事が書いてあるのですが、
勉強していく上では、何かしらにつまずいたほうが勉強になるだろう
ということで、このままの設定で行くことにします。

現在のネットワーク環境は外部から隔離されているので、とりあえずセキュリティは
そこまで気を使わずに設定していきます。

んでは現在の設定がどうなっているか調べてみよう。

mysql がどこに入っているのか検索。

# rpm -ql mysql
/etc/ld.so.conf.d/mysql-i386.conf
/etc/my.cnf
/usr/bin/msql2mysql
/usr/bin/mysql
/usr/bin/mysql_config
/usr/bin/mysql_find_rows
/usr/bin/mysql_tableinfo
/usr/bin/mysql_waitpid
/usr/bin/mysqlaccess
/usr/bin/mysqladmin
/usr/bin/mysqlbinlog
/usr/bin/mysqlcheck
/usr/bin/mysqldump
/usr/bin/mysqldumpslow
/usr/bin/mysqlimport
/usr/bin/mysqlshow
/usr/lib/mysql
/usr/lib/mysql/libmysqlclient.so.15
/usr/lib/mysql/libmysqlclient.so.15.0.0
/usr/lib/mysql/libmysqlclient_r.so.15
/usr/lib/mysql/libmysqlclient_r.so.15.0.0
/usr/lib/mysql/mysql_config
/usr/lib/mysql/mysqlbug
/usr/share/doc/mysql-5.0.22
/usr/share/doc/mysql-5.0.22/COPYING
/usr/share/doc/mysql-5.0.22/EXCEPTIONS-CLIENT
/usr/share/doc/mysql-5.0.22/README
/usr/share/info/mysql.info.gz
/usr/share/man/man1/mysql.1.gz
/usr/share/man/man1/mysqlaccess.1.gz
/usr/share/man/man1/mysqladmin.1.gz
/usr/share/man/man1/mysqldump.1.gz
/usr/share/man/man1/mysqlshow.1.gz
/usr/share/mysql
/usr/share/mysql/charsets
/usr/share/mysql/charsets/Index.xml
/usr/share/mysql/charsets/README
/usr/share/mysql/charsets/armscii8.xml
/usr/share/mysql/charsets/ascii.xml
/usr/share/mysql/charsets/cp1250.xml
/usr/share/mysql/charsets/cp1251.xml
/usr/share/mysql/charsets/cp1256.xml
/usr/share/mysql/charsets/cp1257.xml
/usr/share/mysql/charsets/cp850.xml
/usr/share/mysql/charsets/cp852.xml
/usr/share/mysql/charsets/cp866.xml
/usr/share/mysql/charsets/dec8.xml
/usr/share/mysql/charsets/geostd8.xml
/usr/share/mysql/charsets/greek.xml
/usr/share/mysql/charsets/hebrew.xml
/usr/share/mysql/charsets/hp8.xml
/usr/share/mysql/charsets/keybcs2.xml
/usr/share/mysql/charsets/koi8r.xml
/usr/share/mysql/charsets/koi8u.xml
/usr/share/mysql/charsets/latin1.xml
/usr/share/mysql/charsets/latin2.xml
/usr/share/mysql/charsets/latin5.xml
/usr/share/mysql/charsets/latin7.xml
/usr/share/mysql/charsets/macce.xml
/usr/share/mysql/charsets/macroman.xml
/usr/share/mysql/charsets/swe7.xml
/usr/share/mysql/czech
/usr/share/mysql/czech/errmsg.sys
/usr/share/mysql/danish
/usr/share/mysql/danish/errmsg.sys
/usr/share/mysql/dutch
/usr/share/mysql/dutch/errmsg.sys
/usr/share/mysql/english
/usr/share/mysql/english/errmsg.sys
/usr/share/mysql/estonian
/usr/share/mysql/estonian/errmsg.sys
/usr/share/mysql/french
/usr/share/mysql/french/errmsg.sys
/usr/share/mysql/german
/usr/share/mysql/german/errmsg.sys
/usr/share/mysql/greek
/usr/share/mysql/greek/errmsg.sys
/usr/share/mysql/hungarian
/usr/share/mysql/hungarian/errmsg.sys
/usr/share/mysql/italian
/usr/share/mysql/italian/errmsg.sys
/usr/share/mysql/japanese
/usr/share/mysql/japanese/errmsg.sys
/usr/share/mysql/korean
/usr/share/mysql/korean/errmsg.sys
/usr/share/mysql/norwegian
/usr/share/mysql/norwegian-ny
/usr/share/mysql/norwegian-ny/errmsg.sys
/usr/share/mysql/norwegian/errmsg.sys
/usr/share/mysql/polish
/usr/share/mysql/polish/errmsg.sys
/usr/share/mysql/portuguese
/usr/share/mysql/portuguese/errmsg.sys
/usr/share/mysql/romanian
/usr/share/mysql/romanian/errmsg.sys
/usr/share/mysql/russian
/usr/share/mysql/russian/errmsg.sys
/usr/share/mysql/serbian
/usr/share/mysql/serbian/errmsg.sys
/usr/share/mysql/slovak
/usr/share/mysql/slovak/errmsg.sys
/usr/share/mysql/spanish
/usr/share/mysql/spanish/errmsg.sys
/usr/share/mysql/swedish
/usr/share/mysql/swedish/errmsg.sys
/usr/share/mysql/ukrainian
/usr/share/mysql/ukrainian/errmsg.sys



設定ファイルはどこにある?

# find / -name "my.cnf"
/etc/my.cnf


起動の設定

# chkconfig --list | grep mysql
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off


起動時の設定ファイルの指定

# cat /etc/init.d/mysqld | grep my.cnf
# config: /etc/my.cnf
# extract value of a MySQL option from /etc/my.cnf
get_mysql_option /etc/my.cnf datadir "/var/lib/mysql"
get_mysql_option /etc/my.cnf socket "$datadir/mysql.sock"
get_mysql_option /etc/my.cnf log-error "/var/log/mysqld.log"
get_mysql_option /etc/my.cnf pid-file "/var/run/mysqld/mysqld.pid"
# be no such entry in my.cnf, and the default behavior will be to not
# was not an entry in my.cnf.
/usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pid-file="$mypidfile" --log-error="$errlogfile" >/dev/null 2>&1 &


設定ファイルの中身

# cat /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid



まとめ

my.cnf /etc/my.cnf
basedir /var/lib
datadir /var/lib/mysql
socket /var/lib/mysql/mysql.sock
pid-file /var/run/mysqld/mysqld.pid



データベースの初期化

# ls -la /var/lib/mysql
合計 16
drwxr-xr-x 2 mysql mysql 4096 1月 10 2007 .
drwxr-xr-x 28 root root 4096 9月 15 2007 ..
# mysql_install_db --user=mysql
Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h cent.lina password 'new-password'
See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
# ls -la /var/lib/mysql
合計 24
drwxr-xr-x 4 mysql mysql 4096 6月 12 06:32 .
drwxr-xr-x 28 root root 4096 9月 15 2007 ..
drwx------ 2 mysql root 4096 6月 12 06:32 mysql
drwx------ 2 mysql root 4096 6月 12 06:32 test


mysql ディレクトリ以下に mysql ディレクトリができてなんか気持ち悪い。。。