2008年11月11日火曜日

MYSQLでrootログイン&パスワード設定 [SQL]

多分だけど、mysqlをインストールしたばっかりの状態だとパスワードなしでrootでログイン出来る。
なので、まずはrootでログイン後にrootにパスワードを設定してやる必要があるが、たまにエラーが出る。
--------------------------------------------------------------------
mysql> set password for root=password('password');
ERROR 1133 (42000): Can't find any matching row in the user table
--------------------------------------------------------------------

むぅ、と思っていろいろ試した結果、以下のようにやったらうまくいった。
--------------------------------------------------------------------
mysql> set password for root@localhost=password('password');
Query OK, 0 rows affected (0.01 sec)
--------------------------------------------------------------------

おそらくデフォルトではrootユーザはhostが違うものが複数(2つ?)あるためhostまで指定してやらないとだめなのだ。
--------------------------------------------------------------------
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 
mysql> 
mysql> select user,password,host from user;
+-------+------------------+-----------------------+
| user  | password         | host                  |
+-------+------------------+-----------------------+
| root  |                  | localhost             |
| root  |                  | localhost.localdomain |
|       |                  | localhost.localdomain |
|       |                  | localhost             |
+-------+------------------+-----------------------+
5 rows in set (0.02 sec)
--------------------------------------------------------------------

上述のようにrootにパスワードを設定したならば、userが空欄だったりパスワードのないrootもいらないので以下のコマンドでそれらを削除。
--------------------------------------------------------------------
mysql> 
mysql> delete from user where user = '';
Query OK, 2 rows affected (0.00 sec)
mysql> 
mysql> delete from user where host = 'localhost.localdomain';
Query OK, 1 row affected (0.00 sec)
--------------------------------------------------------------------

それから使用するユーザを作ってやればいい。
## ユーザ作成(ユーザ名:username、パスワード:password)
--------------------------------------------------------------------
mysql> grant select,insert,delete,update,create,drop,file,alter,index on *.* to username identified by 'password';
--------------------------------------------------------------------

検索してみたら以下の[参考]にほとんど書いてありました。
ありがとうございます。

[参考]
いろいろメモ

2008年11月9日日曜日

apache再起動失敗 [APACHE]

telnetは出来るし、psでhttpdプロセスがあるのだが、webアクセスが出来ない。
※ブラウザから見れない、繋がらない。

とりあえず、apache再起動だな、と思って、コマンドをうつと、
# apachectl restart
(125)Address already in use: make_sock: could not bind to address [::]:80
no listening sockets available, shutting down
Unable to open logs

すでにポートは使われてます、みたいなエラーっぽい。
ネットで調べてみるけどなんかちょっと違う、というか解決出来そうなのが見付からない。
stopもstartもきかない。

結局プロセスをkillしてから起動したらうまくいった。
kill -9 PID

なんでこういう状態になったんだろう。
中途半端起動状態みたいな。

2008年11月7日金曜日

データをinsertすると文字化けが起こる [SQL] [PHP]

PHPからmysqlにデータ投入すると、投入されたデータが文字化けしている。
プログラムファイルはUTF8、テーブルもUTF8で生成。
なんでだろうと思って色々調べたところ、以下の方法で解決。

## 文字コード変更
$sql = "SET NAMES utf8";
$res =& $mdb2->query($sql);
if (PEAR::isError($res)) {
die($res->getMessage());
}

ただ、SQLインジェクションに脆弱ということでアプリケーションでは使用しない方がいいと書いてある記事を見付けた。。
しかし、レンタルサーバでmysqlの再インストールも出来ずconfも変更することが出来ないから、とりあえずこれで今回は終わり。
phpMyAdminがインストールされていて、これを使えってことなんだと思うけど、どこまで出来るのかな。。
なんだか設定ファイルが編集出来ないとここから先には進めない気がして来た。。

[参考]

PEAR::DBからPEAR::MDB2 [SQL] [PHP]

CSVデータを読み込んで配列にし、エラーチェック後テーブルに挿入する、という管理ツールを作ることになって、これまでPEAR::DBを使っていたがPEAR::MDB2に乗り換えようと思い、今回試しに使ってみました。

データベースはmysql、言語はphp。

まずは接続。
$dsn = dbType://user:password@host/database
$mdb2 =& MDB2::factory($dsn);
$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);

これでいいはずなのに全然接続できない。
調べてみたらmysql用のドライバーが必要ということでそれをダウンロードして再接続。
無事接続できたみたいだ。
http://pear.php.net/package/MDB2_Driver_mysql/

次にinsert。
これはPEAR::DBとほとんど同じだった。
## PHP5
$mdb2->loadModule('Extended');
$in_result = $mdb2->autoExecute($table, $data, MDB2_AUTOQUERY_INSERT);
## PHP4はこっち
$mdb2->extended->autoExecute($table, $data, MDB2_AUTOQUERY_INSERT);

最後に切断。
$mdb2->disconnect();

これからいろいろ使ってみよう。

(この作業中にDBに投入したデータが文字化けしてた。)
(その解消については次の記事に書く。)

[参考]