現在MySQL4が動いているSolarisにMySQL5をインストールして同時に稼働させる。
| | MySQL4 | MySQL5 | メモ |
| バイナリ | /usr/local/mysql | /usr/local/mysql5 | --prefixで指定 |
| port | 3306 | 3307 | --with-tcp-portで指定 |
| socket | /tmp/mysql.sock | /tmp/mysql5.sock | --with-unix-socket-pathで指定 |
| 設定ファイル | /etc/my.cnf | /etc/my5.cnf | インストール後に手動で配置する |
- UNIXソケット(/tmp/mysql.sock)を使って接続すると高速。
- TCP/IP(ポート番号3306)を使って接続すると、他のコンピュータからも接続可能。
- TCP/IP(ポート番号)を使って接続するには、MySQLユーザを登録するときに指定しておく必要がある。
■MySQL5のソースをダウンロードする
RPMではなく、バイナリでもなく、ソースを落としてくる。(Compressed GNU TAR archive)
http://dev.mysql.com/downloads/mysql/5.0.html#source
■MySQL5をインストールする前に行うこと
- /usr/sfw/binにパスを通しておく。(下の「makeエラー対策-1」)
- crle -v でライブラリパスに/usr/lib:/usr/openwin/lib:/usr/dt/lib:/usr/local/libが指定してあることを確認しておく。
- libstdc++.laが正常なファイルか確認しておく。(下の「makeエラー対策-2」)
- rootで作業する。configure, make を一般ユーザで行ったが、うまくいかず。(たまたまかもしれないが)
- MySQL4は、cp -prf /usr/local/mysql /usr/local/mysql.back でバックアップしておく。
- MySQL4の設定は、cp /etc/my.cnf /etc/my4.cnf としてバックアップしておく。
■MySQL5をインストールする
何度か試したが、最初からrootで実行する方が良い気がする。
# tar zxvf mysql-5.0.45.tar.gz
# cd mysql-5.0.45
# ./configure --with-charset=utf8 --with-extra-charset=all --with-mysqld-user=mysql \
--prefix=/usr/local/mysql5 --with-unix-socket-path=/tmp/mysql5.sock \
--with-tcp-port=3307
# make
# make install
configureに4分、makeに22分かかった。(Sun Fire V240)
■MySQL5の初期データベースを作る
今動いているMySQL4を止める。(大事!)
# /etc/init.d/mysql stop
MySQL4の設定ファイルをバックアップしておく。(後で元に戻す)
# mv /etc/my.cnf /etc/my.cnf.backup
MySQL5の初期設定ファイルを用意する。(後でファイル名を my5.cnf に変更する)
# cp /usr/local/mysql5/share/mysql/my-medium.cnf /etc/my.cnf
MySQL5の初期データベースを作成する。
(varディレクトリと初期データベースが作成される)
# chown -R mysql:mysql /usr/local/mysql5 (間違えてmysqlを指定しないように)
# cd /usr/local/mysql5
# bin/mysql_install_db --user=mysql
所有者を適切に設定する。
# chown -R root .
# chown -R mysql:mysql var
MySQL4、MySQL5の初期設定ファイルを正しい状態にする。
# cd /etc
# mv my.cnf my5.cnf
# mv my.cnf.back my.cnf
MySQL4を起動する。
# /etc/init.d/mysql start
■MySQL5サーバを起動する
MySQL5の初期設定ファイルを指定して起動する。
# /usr/local/mysql5/bin/mysqld_safe --defaults-file=/etc/my5.cnf --user=mysql &
- --default ではなく、--defaults なので、つづりに注意。
- --user=mysqlは、一番最後に追加しないとなぜか起動しなかった。
- --user=mysqlは、指定しなくてもmysqlユーザで起動した。
- キャラクタセットは、--default-character-set=utf8 のように指定する。
- キャラクタセットは、/etc/my5.cnf内の[mysqld]の次の行に記入しておくと楽。
- ポート番号、ソケット番号の変更は、/etc/my5.cnf内の[client]と[mysqld]を書き換える。
■MySQL5サーバを停止する
ソケットを指定してMySQL5を停止する。
# /usr/local/mysql5/bin/mysqladmin --socket=/tmp/mysql5.sock -u root shutdown
ポート番号を指定してMySQL5を停止する。(TCP/IPでrootが接続できる場合)
# /usr/local/mysql5/bin/mysqladmin --port=3307 -u root -p shutdown
■MySQL5クライアントから接続する
- MySQL5のクライアントを起動する。
- MySQL5のソケットを指定する。
- MySQL5のポート番号を指定する。
以上がコツ。
<ソケットを指定して接続する方法>
$ /usr/local/mysql5/bin/mysql --socket=/tmp/mysql5.sock -u root -p
初期パスワードは「空」なのでリターンキーでOK。
<ポート番号を指定して接続する方法>
$ /usr/local/mysql5/bin/mysql --port=3307 -u root -p
ポート指定する場合は、「接続ユーザがTCP/IP経由で接続できるように登録してある」ことが前提なので注意する。下のユーザ登録を参照。
で、何も指定せず普通に接続しようとすると次のエラーがおきるので注意。
$ /usr/local/mysql5/bin/mysql -u root -p
Enter password: (リターンキーを入力)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
■いろいろなエラー対策
MySQL5が起動したのはいいが、今まで動いていたMySQL4に接続できなくなったりした。
- 慌てず、MySQL4もMySQL5も全て一度終了する。
- MySQL4を起動して、クライアントやPHP等からの接続を確認する。
- MySQL5を起動して、クライアントからの接続を確認する。
- あせっていると、sockと書くところをsocketというように間違えたりする。(おれ)
■rootパスワードを設定しておく
ソケットを指定して接続してパスワードを設定する。
$ /usr/local/mysql5/bin/mysqladmin --socket=/tmp/mysql5.sock -u root password 'XXXX'
■ユーザを追加登録する(TCP/IP接続可能なユーザ)
rootでログイン後、登録されているユーザを確認する
mysql> use mysql;
Database changed
mysql> select user, password, host from user;
+------+-------------------------------------------+------------------------+
| user | password | host |
+------+-------------------------------------------+------------------------+
| root | *81F5E21E35407D884A6CD4A731AEBFB6AF209EB1 | localhost |
| root | | www.mydomain.com |
| root | | 127.0.0.1 |
+------+-------------------------------------------+------------------------+
3 rows in set (0.00 sec)
登録されているデータベースを確認する
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
新規ユーザ登録を次の設定で行う。
- 新規ユーザ名: foo
- パスワード: xxxx
- 新規データベース名: emp
- 接続許可するクライアントIPアドレス: 192.168.0.%
- 接続許可するクライアントIPアドレス: localhost
mysql> create database emp;
mysql> grant all privileges on emp.* to foo@"192.168.0.%"
-> identified by 'xxxx' with grant option ;
mysql> grant all privileges on emp.* to foo@localhost
-> identified by 'xxxx' with grant option ;
foo@"%" 全てのホストからアクセス可能
foo@localhost サーバにログインしてからアクセス可能
foo@"192.168.1.12" IPアドレスが192.168.1.12のホストからアクセス可能
foo@"mydomain.co.jp" ドメインがmydomain.co.jpからのアクセスが可能
登録ユーザを確認する。
mysql> select user, password, host from user;
+---------+-------------------------------------------+------------------------+
| user | password | host |
+---------+-------------------------------------------+------------------------+
| root | *81F5E21E35407D884A6CD4A731AEBFB6AF209EB1 | localhost |
| root | | www.mydomain.com |
| root | | 127.0.0.1 |
| foo | *5AA834B332E644D47587C1E7446FE07C26E50C58 | 192.168.0.% |
| foo | *5AA834B332E644D47587C1E7446FE07C26E50C58 | localhost |
+---------+-------------------------------------------+------------------------+
5 rows in set (0.00 sec)
登録ユーザの権限を確認する。@"ホスト名" を指定すること。
mysql> show grants for foo@"192.168.0.%" ;
■どこからでもMySQLサーバに接続できる完全なスーパーユーザー
例えば、rootを完全なスーパユーザーにしたいときは、localhost と "%" の両方でのユーザ登録が必要になる。
mysql> grant all privileges on *.* to root@"%"
-> identified by 'xxxx' with grant option;
*.* 全てのデータベース.全てのテーブル
"%" 全てのIPアドレスから
'xxxx' パスワードの指定
with grant option データベースレベルの権限付き
■登録ユーザの接続を確認する
MySQL5が動いているSolarisにログインしている状態で接続する。
127.0.0.1 と ポート番号 を指定するのがキモ。
$ /usr/local/mysql5/bin/mysql -h 127.0.0.1 --port=3307 -u foo -p
■makeエラー対策-1
makeしたときに
../depcomp: line 512: exec: g++: not found
とエラーが表示されたので、g++をインストールしようと思ったが、Solaris10には/usr/sfw/binにg++が存在するのであった。
ということで、
$ PATH=$PATH:/usr/sfw/bin
$ export PATH
■makeエラー対策-2
makeしたときに libstdc++.la が有効ではないと言われる。
libtool: link: `/usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/
../../..//libstdc++.la' is not a valid libtool archive
make[3]: *** [liboptions.la] Error 1
make[3]: Leaving directory `/usr/local/src/mysql-5.0.45/server-tools/instance-manager'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/local/src/mysql-5.0.45/server-tools'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/mysql-5.0.45'
make: *** [all] Error 2
/usr/sfw/lib/libstdc++.la は中身が空っぽのため、viで開いて以下をコピーペーストして保存する。(Solaris Expressでは修正されているそうです)
/usr/sfw/lib/libstdc++.la
# libstdc++.la - a libtool library file
# Generated by ltmain.sh - GNU libtool 1.4a-GCC3.0 (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
# The name that we can dlopen(3).
dlname='libstdc++.so.6'
# Names of this library.
library_names='libstdc++.so.6.0.3 libstdc++.so.6 libstdc++.so'
# The name of the static archive.
old_library='libstdc++.a'
# Libraries that this one depends upon.
dependency_libs='-lc -lm -L/usr/sfw/lib -lgcc_s'
# Version information for libstdc++.
current=6
age=0
revision=3
# Is this an already installed library?
installed=yes
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
# Directory that this library needs to be installed in:
libdir='/usr/sfw/lib'
/usr/sfw/lib/64/libstdc++.la も以下をコピーペーストする。
# libstdc++.la - a libtool library file
# Generated by ltmain.sh - GNU libtool 1.4a-GCC3.0 (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
# The name that we can dlopen(3).
dlname='libstdc++.so.6'
# Names of this library.
library_names='libstdc++.so.6.0.3 libstdc++.so.6 libstdc++.so'
# The name of the static archive.
old_library='libstdc++.a'
# Libraries that this one depends upon.
dependency_libs='-L/lib/64 -lc -lm -L/usr/sfw/lib/64 -lgcc_s'
# Version information for libstdc++.
current=6
age=0
revision=3
# Is this an already installed library?
installed=yes
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
# Directory that this library needs to be installed in:
libdir='/usr/sfw/lib/64'
■参考URL
http://www.gadgety.net/shin/tips/unix/solaris10.html
http://www.sunquebec.com/index.php?section=17&lang=fr
Solaris
Apacheにアクセスできない403 Forbidden SSHもできない