主にバグの再現確認に使う用途。yumでもいいからクリーンな状態のCentOS 6.6にMySQL 5.7を入れたいときの。
TL;DR
コマンドはこれ。
1. MySQL :: Download MySQL Yum Repository からCentOS 6.x用(いや、本当はRHEL/Oracle Linux用のだけど)のrpmパッケージをインストールする(と、2015/06/01現在では↓の5つのリポジトリーが登録される)
| repository | enabled |
|----------------------------|---------|
| mysql-connectors-community | yes |
| mysql-tools-community | yes |
| mysql55-community | no |
| mysql56-community | yes |
| mysql57-community-dmr | no |
2. enabled= noになっているmysql57-community-dmrを--enablerepoで指定してmysql-community-serverをインストールする。
3. mysqldサービスを起動(今までOracleビルドのMySQLのrpmパッケージ .. ファイル名が MySQL-server-*.rpm になっているようなやつ .. はサービス名が "mysql" だったのが、yumリポジトリーの場合は"mysqld"になっている。たぶん、過去のRHELのBaseリポジトリーと命名規則を合わせたんではないだろうか)
/var/lib/mysqlはこの時点でmysqld --initializeで初期化される。MySQL-server-*.rpmはインストール時に初期化(= 5.6までしかMySQL-server-*.rpmは存在しないので、5.6当時でmysql_install_db)が走るが、mysql-community-server-*.rpmはservice mysqld startの中でdatadirの中身をチェックし、空っぽならば初期化が走るようになっている。
4. mysqld --initialize ということは、だ。初期パスワードは /root/.mysql_secret には *ない* 。エラーログに吐いている。デフォルトでは/var/log/mysqld.logだ。罠い。
日々の覚書: MySQL 5.7.6でデータベースの初期化が変わる mysql_install_dbからmysqld --initialize
デフォルトパスワードの在り処なんてビタ1文字何も教えてくれない。罠い。
そしてなんか謎のUNKWOWN_MYSQL_USERとかいうのがログイン試行してる。謎い。
/etc/init.d/mysqldの中身を覗いてみると、ちゃんと起動したかどうかを敢えてエラーになりそうなユーザーでmysqladmin pingして"Access denied"が返されることで起動したことを確認しているぽい。
でもこれ、UNKNWON_MYSQL_USER@localhostがいたら成功しちゃって"Access denied"が返らないんじゃね? と思ったら
長さ制限に引っかかってそんなユーザーは作れなかった。なるほど。
何の話だかよくわからなくなってきたのでこれまで。
PlanetMySQL Voting: Vote UP / Vote DOWN
TL;DR
コマンドはこれ。
$ sudo yum install -y https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
$ sudo yum install -y --enablerepo=mysql57-community-dmr mysql-community-server
$ sudo service mysqld start
$ sudo grep password /var/log/mysqld.log
$ mysql -uroot -p
1. MySQL :: Download MySQL Yum Repository からCentOS 6.x用(いや、本当はRHEL/Oracle Linux用のだけど)のrpmパッケージをインストールする(と、2015/06/01現在では↓の5つのリポジトリーが登録される)
| repository | enabled |
|----------------------------|---------|
| mysql-connectors-community | yes |
| mysql-tools-community | yes |
| mysql55-community | no |
| mysql56-community | yes |
| mysql57-community-dmr | no |
2. enabled= noになっているmysql57-community-dmrを--enablerepoで指定してmysql-community-serverをインストールする。
3. mysqldサービスを起動(今までOracleビルドのMySQLのrpmパッケージ .. ファイル名が MySQL-server-*.rpm になっているようなやつ .. はサービス名が "mysql" だったのが、yumリポジトリーの場合は"mysqld"になっている。たぶん、過去のRHELのBaseリポジトリーと命名規則を合わせたんではないだろうか)
/var/lib/mysqlはこの時点でmysqld --initializeで初期化される。MySQL-server-*.rpmはインストール時に初期化(= 5.6までしかMySQL-server-*.rpmは存在しないので、5.6当時でmysql_install_db)が走るが、mysql-community-server-*.rpmはservice mysqld startの中でdatadirの中身をチェックし、空っぽならば初期化が走るようになっている。
4. mysqld --initialize ということは、だ。初期パスワードは /root/.mysql_secret には *ない* 。エラーログに吐いている。デフォルトでは/var/log/mysqld.logだ。罠い。
日々の覚書: MySQL 5.7.6でデータベースの初期化が変わる mysql_install_dbからmysqld --initialize
$ sudo service mysqld start
Initializing MySQL database: 2015-06-01T09:35:30.031754Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
[ OK ]
Starting mysqld:
デフォルトパスワードの在り処なんてビタ1文字何も教えてくれない。罠い。
$ grep password /var/log/mysqld.log
2015-06-01T09:35:31.070842Z 1 [Warning] A temporary password is generated for root@localhost: l#KCEX1;iypk
2015-06-01T09:35:37.208351Z 2 [Note] Access denied for user 'UNKNOWN_MYSQL_USER'@'localhost' (using password: NO)
そしてなんか謎のUNKWOWN_MYSQL_USERとかいうのがログイン試行してる。謎い。
110 # Spin for a maximum of N seconds waiting for the server to come up;
111 # exit the loop immediately if mysqld_safe process disappears.
112 # Rather than assuming we know a valid username, accept an "access
113 # denied" response as meaning the server is functioning.
114 ret=0
115 TIMEOUT="$STARTTIMEOUT"
116 while [ $TIMEOUT -gt 0 ]; do
117 RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1) && break
118 echo "$RESPONSE" | grep -q "Access denied for user" && break
119 if ! /bin/kill -0 $safe_pid 2>/dev/null; then
120 echo "MySQL Daemon failed to start."
121 ret=1
122 break
123 fi
124 sleep 1
125 let TIMEOUT=${TIMEOUT}-1
126 done
/etc/init.d/mysqldの中身を覗いてみると、ちゃんと起動したかどうかを敢えてエラーになりそうなユーザーでmysqladmin pingして"Access denied"が返されることで起動したことを確認しているぽい。
でもこれ、UNKNWON_MYSQL_USER@localhostがいたら成功しちゃって"Access denied"が返らないんじゃね? と思ったら
mysql> create user UNKNOWN_MYSQL_USER;
ERROR 1470 (HY000): String 'UNKNOWN_MYSQL_USER' is too long for user name (should be no longer than 16)
長さ制限に引っかかってそんなユーザーは作れなかった。なるほど。
何の話だかよくわからなくなってきたのでこれまで。
PlanetMySQL Voting: Vote UP / Vote DOWN