« 前のページ | Home |     [Database ]

2006.12.10

mysql-5.0.27のインストール(obsolete)

(obsolete) MySQL バージョン5.5.6 を御覧ください
11月の中旬にmysqlとphpを用いた頼まれもののアプリを書いているときに、うっかりmysqlを壊してしまった。
最初は簡単に復帰でいるだろうと思っていたが、日本語処理でトラブルがでて、大変な目に会ってしまった。
解ってしまえば簡単なことであったのだが、時間に追われる中で混乱を来たし、私のところのサーバでブログを開設している5人ほどの人にも大変な迷惑をかけてしまった。
前置きはこれぐらいで、本筋に戻るが、どうせ壊れたのだからmysql-4.1をmysql-5.0.27に上げようと、/ports/databases/mysql50-serverとmysql50-clientを入れようとした。
調べるとEUCを使うにはコンパイルオプションで以下のように、デフォルトの文字コードのujis(EUC)とその他の文字を以下のように指定すれば良いことが分かった。

# make WITH_CHARSET=ujis WITH_XCHARSET=all install clean

次に/etcにmy.cnfを作って、修正

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
# cd /etc
# chmod +w my.cnf
# vi my.cnf
[mysqld]
datadir = /usr/db/mysql
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

mysqlをuserとgroupに追加

#vipwして次の1行を追加

mysql:*:88:88::0:0:MySQL Daemon:/nonexistent:/sbin/nologin

次に/etc/groupにmysqlを追加

# vi /etc/group して次の1行を追加

mysql:*:88:

そして、DBをインストールして起動

# mkdir /usr/db
# mysql_install_db
# chown -R mysql /usr/db/mysql
# cd /usr/local/etc/rc.d
# cp /usr/local/share/mysql/mysql.server ./mysql-server.sh
# ./mysql-server.sh start

無事起動したら、mysql-clientからパスワードを設定

# mysql -u root
mysql > use mysql;
mysql > set password for root@localhost=password('xxxxx');
mysql> flush privileges;
mysql > exit;

パスワードの設定は以前は set password for root=password(‘xxxxx’); で良かったが、今回は
root@localhost=password(‘xxxxx’); と
@localhostが必要であった。
最初の起動でrootのパスワードの設定を行わずに抜けると、後からloginできず酷い目に会う。
筆者も、うっかりやってしまって、大変な思いをした。
一応loginが出来なくなった場合の対処方法を下記に書いておく。

# mysqld_safe --skip-grant-tables &
# mysql -u root mysql
mysql > UPDATE user SET Password=PASSWORD('mynewpassword')
      -> WHERE User='root';
mysql > flush privileges;

この後、mysql;を停止(kill)して、正規に立ち上げる。
さて、無事にインストールして念のために文字コードを調べたら、

# mysql -u root -p
Password xxxxxxx
mysql > SHOW VARIABLES LIKE 'character_set_%';
+----------------------------------+-------+
| Variable_name                 | Value  |
+----------------------------------+--------+
| character_set_client          | latin1 |
| character_set_connection    | latin1 |
| character_set_filesystem             | binary |
| character_set_database       | latin1 |
| character_set_results           | latin1 |
| character_set_server         | latin1 |
| character_set_system         | utf8   |
+----------------------------------+--------+
6 rows in set (0.00 sec)

ujis(EUC)になっていないので、/etc/my.cnfで指定するのだろうと思って、[mysqld]の中で、[mysqld]のセクションに、

default-character-set=ujis

を入れて、起動しようとすると、ujisなんて無いよと怒られる。
だって、WITH_CHARSET=ujisを入れたじゃないかと叫んでも、どうにもならない。
結局、http://www.mysql.com からソースをダウンロードして自前でコンパイルして入れることにした。
サイトのダウンロードページには、WindowsやLinuxのPrecompiled Binaryのファイルがずらっと並んでいるが、一番下に、Tarball (in 5.1 both Unix & Windows, tar.gz)があったので、これをダウンロードする。
そして、以下のようにしてインストール、

# tar xvzf mysql-5.0.27.tar.gz
# cd mysql-5.0.27
# ./configure --prefix=/usr/local --with-charset=ujis 
--with-extra-charset=all --with-mysqld-user=mysql

無事configureが終わり、いよいよインストール

# make install

clientは問題なさそうなので、早速起動して文字コードを調べてみる。

mysql> SHOW VARIABLES LIKE 'character_set_%';
+----------------------------------+--------+
| Variable_name                 | Value  |
+----------------------------------+--------+
| character_set_client                   | ujis       |
| character_set_connection          | ujis       |
| character_set_database        | ujis       |
| character_set_filesystem            | binary  |
| character_set_results                 | ujis       |
| character_set_server                 | ujis       |
| character_set_system         | utf8      |
+----------------------------------+--------+

systemはデフォルトでutf8、filesystemはbinaryで問題ないとのことなので、無事ujsi(EUC)が使えるようになっている。
早速ブログ用のmtdbを作って(mysqlの導入参照)、念のために再立ち上げして文字コードを調べる。

mysql > use mtdb;
mysql> SHOW VARIABLES LIKE 'character_set_%';
+------------------------------------+---------+
| Variable_name                  | Value   |
+-------------------------------------+--------+
| character_set_client            | ujis       |
| character_set_connection       | ujis       |
| character_set_database          | latin1   |
| character_set_filesystem                | binary  |
| character_set_results            | ujis       |
| character_set_server             | ujis      |
| character_set_system              | utf8     |
+-------------------------------------+-------+

databaseがlatin1(うろ覚えなのでbinaryだったかも知れない)になっている。
どうも、以前の古いデータを参照しているようなので、一度 mtdbを破棄して、改めて作成する。
そして、文字コードを調べる。

mysql> SHOW VARIABLES LIKE 'character_set_%';
+------------------------------+--------+
| Variable_name                     | Value   |
+------------------------------+--------+
| character_set_client             | ujis       |
| character_set_connection    | ujis       |
| character_set_database       | ujis       |
| character_set_filesystem      | binary   |
| character_set_results           | ujis        |
| character_set_server            | ujis       |
| character_set_system           | utf8      |
+------------------------------+--------+

めでたし、めでたしsystemとfilesystemを除き、全てujsiになっている。
しかし、ブログのデータを飛ばしたのは申し訳ないことをした・・・

2006.01.03

MySQLの導入(Package編)

MovabletypeのDBをBerkley DBからMySQLに移行するために、MySQLをportsから入れる方法を書いた。
知識不足でportsからoptionを付けて入れないとdatabaseの位置などが指定できないと思ったからです。
しかし、Packageからでも自由に構築できるこたが解ったので、以下にその方法を書く。
これは楽だ。
まず、/usr/sbin/sysinstall(FreeBSD 6.0の場合)してpackageのdatabasesを選ぶ。
そして下記をインストール。
(1) mysql-client-4.1.13
(2) mysql-server-4.1.13
(3) p5-DBD-mysql41-3.0002
(4) p5-DBI-1.48
あとは勝ってに依存性を考慮してdependencyとして入れてくれる。
次に、以下の作業をする
(1) /usr/local/share/mysql内にあるmy-medium.cnfをmy.cnfの名前で /etcにコピー。

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf

(2) /etc/my.cnf に datadir = /usr/db/mysql の1行を追加

[mysqld]
datadir = /usr/db/mysql ・・・この行を追加
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer = 16M

(3) /usr/local/binにあるmysql_install_dbを使ってdbを設定し、mysqlのオーナーをmysqlに変えておく。

# mysql_install_db
# chown -R mysql /usr/db/mysql

(4) /usr/local/etc/rc.d内にあるmysql-server.sh は複雑でうまく動かなかったので、/usr/local/shre/mysql内にある mysql.server を/usr/local/etc/rc.dにコピーしmysql-server.shに名前を変えます。

# cd /usr/local/etc/rc.d
# mv mysql-server.sh mysql-server.org
# cp /usr/local/share/mysql.server ./mysql-server.sh

そして起動

./mysql-server.sh start

いよいよ、管理者のパスワードを設定です。 portsインストールと少し違う。

# mysqladmin -u root password パスワード

これで、mysql -u -p で入れます。
そして、匿名ユーザの削除以降は以前書いた手順と同じですが、説明は省略しますが繰り返し書いておきます。
Berkeley DBからMySQLへ移行(アップデートしました) と合わせ見てください。

# mysql -u root -p
Enter password: 設定したパスワード
mysql> use mysql;
mysql> delete from user where password=' ';
mysql> flush privileges;
mysql> exit
Bye
# mysql -u root -p
Enter password: パスワード
mysql> create database mtdb;
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> use mysql;
mysql> grant all privileges on mtdb.*
to mtuser@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.13 sec)
mysql> flush privileges;
mysql> exit
Bye

これで、Berkley DBからMySQLに移行の準備完了です。

« Previous