読者です 読者をやめる 読者になる 読者になる

昨日に引き続きApache設定 + Mysqlインストール

Centosに最初から入っているApacheが起動しているので、自分が入れたほうが起動するように変更する

mysqlがすでに入っているので、削除して再インストールする

# rpm -qa mysql*
mysql-5.0.22-2.1.0.1
mysql-server-5.0.22-2.1.0.1
mysql-connector-odbc-3.51.12-2.2

依存関係を無視してアンインストールする

# rpm -e --nodeps mysql*
error: package mysql* is not installed
# rpm -e --nodeps mysql-5.0.22-2.1.0.1
# rpm -e --nodeps mysql-server-5.0.22-2.1.0.1
# rpm -e --nodeps mysql-connector-odbc-3.51.12-2.2

昨日、見ることができたページを見ることができなくなっていた

httpd.confファイルの編集を昨日行ったが、そのファイルはあらかじめインストールされていたApacheのもので、自分がソースから入れたものではないことがわかった
昨日:/etc/httpd/conf/httpd.conf
今日:/usr/local/apache2/conf/httpd.conf
参考
http://httpd.apache.org/docs/2.0/ja/invoking.html

編集内容は昨日と同様

# AddHandler cgi-script .cgi
↓
AddHandler cgi-script .cgi .pl

ScriptAlias /cgi-bin/ /home/*/public_html/cgi-bin/

<Directory />
	Options FollowSymLinks
	AllowOverride None
	Order allow,deny
	Allow from all
</Directory>
<Directory /home/*/public_html/cgi-bin>
	AllowOverride None
	Options ExecCGI
	Order allow,deny
	Allow from all
</Directory>

上の設定は行き当たりばったりな感じがするので何とかしたい
とりあえず動作は確認できたのでよしとする

# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.51a-linux-i686.tar.gz/from/http://mirror.mysql-partners-jp.biz/
# tar -xzf mysql-5.0.51a-linux-i686.tar.gz
# mv mysql-5.0.51a-linux-i686 /usr/local/mysql
# groupadd mysql
# adduser -g mysql -d /usr/local/mysql/data mysql
adduser: warning: the home directory already exists.
Not copying any file from skel directory into it.
# cd /usr/local/mysql
# ./scripts/mysql_install_db --user=mysql
# /usr/local/mysql/bin/mysqld_safe &

mysqlに接続できた

# adduser -g mysql -d /usr/local/mysql mysql
adduser: user mysql exists
# chown -R mysql:mysql /usr/local/mysql/

rootにパスワードを設定しようとしたらできない

mysql> set password for root=password('root');
ERROR 1133 (42000): Can't find any matching row in the user table

Hostによって異なるようなので

mysql> select Host,User,Password from user;
+-----------+------+----------+
| Host | User | Password |
+-----------+------+----------+
| localhost | root | |
| webtest2 | root | |
| 127.0.0.1 | root | |
| localhost | | |
| webtest2 | | |
+-----------+------+----------+
mysql> set password for root@webtest2=password('root');
Query OK, 0 rows affected (0.00 sec)

mysql> create database kakeibo;
mysql> grant all on kakeibo.* to guest@localhost identified by 'guest';
mysql> flush privileges;

mysql> alter database kakeibo character set utf8;
テーブルの作成

samba設定

# pdbedit -a otsuki
tdbsam_open: Converting version 0 database to version 3.
new password:
retype new password:

# smbpasswd -a otsuki
New SMB password:
Retype new SMB password:

sambaよくわからないので中止

mysqlRPMを依存関係無視でアンインストールしたのが元で?

[Wed Jun 04 16:26:52 2008] [error] [client 172.16.1.64]
install_driver(mysql) failed:
Can't load
'/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/DBD/mysql/mysql.so'

for module DBD::mysql: libmysqlclient.so.15: cannot open shared object
file:
No such file or directory at
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.

というエラーがでる。直るのか?
これを参考にがんばる
http://d.hatena.ne.jp/uchiuchiyama/20060502

/etc/ld.so.conf.d/mysql-db.conf
ファイルを作成して
/usr/local/mysql/lib
を書き込む

# ldconfig
を実行。-vで詳細が出力

接続できた。文字化けしてるけど…。

submit_test.cgiのブラウザ上での結果

1??No
2????No
3?????No
4?????No
5??No
6????No
7?????No
8???No
9??No
10????No
11??No
12?????No
13?????No
14????Yes
15?????Yes
16?????Yes

firefoxの文字エンコードeucsjis、utf8でやっても変わらず
DBを直で見てみる

mysql> select * from category;
+----+-------+-------------+
| id | name | income_flag |
+----+-------+-------------+
| 1 | ?? | No |
| 2 | ???? | No |
| 3 | ????? | No |
| 4 | ????? | No |
| 5 | ?? | No |
| 6 | ???? | No |
| 7 | ????? | No |
| 8 | ??? | No |
| 9 | ?? | No |
| 10 | ???? | No |
| 11 | ?? | No |
| 12 | ????? | No |
| 13 | ????? | No |
| 14 | ???? | Yes |
| 15 | ????? | Yes |
| 16 | ????? | Yes |
+----+-------+-------------+
16 rows in set (0.00 sec)

もとが駄目。ほかのテーブルも確認する。

テーブルを作り直して、やり直す

mysql> select * from category;
+----+-----------------+-------------+
| id | name | income_flag |
+----+-----------------+-------------+
| 1 | 食費 | No |
| 2 | 衣服・靴 | No |
| 3 | 水道・光熱 | No |
| 4 | 家具・生活 | No |
| 5 | 住居 | No |
| 6 | 医療衛生 | No |
| 7 | 交通・通信 | No |
| 8 | 車関係 | No |
| 9 | 教育 | No |
| 10 | 教養娯楽 | No |
| 11 | 交際 | No |
| 12 | 保険・税金 | No |
| 13 | その他支出 | No |
| 14 | 給与所得 | Yes |
| 15 | 利息・配当 | Yes |
| 16 | その他収入 | Yes |
+----+-----------------+-------------+
16 rows in set (0.00 sec)

ブラウザ表示は変わらず

以下の内容test.cgiファイルを作成して確認する
print "Content-type: text/html\n\n";
print "文字エンコードテスト!";

正しく表示された。DBを使うと問題がある模様。
問題があるsubmit_test.cgi
print "テスト文字エンコードテスト\n";
と書いてテスト

テスト文字エンコードテスト 1??No
2????No
3?????No
4?????No

やはり、DBから取り出されたものだけ表示がおかしい。

> status;
略
Server characterset: latin1
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8

latin1を何とかしたい、というより何で初期設定がlatin1

↓を参考に文字コードを変更する
http://wota.jp/ac/?date=20061011

  • 停止: /usr/local/mysql/bin/mysqladmin -u root -proot shutdown
  • 起動:/usr/local/mysql/bin/mysqld_safe &

直った!