2015年6月1日月曜日

何も考えずに真っ新なCentOS 6.6にMySQL 5.7をyumで叩き込むメモ

主にバグの再現確認に使う用途。yumでもいいからクリーンな状態のCentOS 6.6にMySQL 5.7を入れたいときの。

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


【2015/11/05 10:05】
MySQL 5.7のGAリリースに伴い、mysql-community-releaseが新しくなっています。
2015/11/05現在だと、mysql-community-releaseは mysql57-community-release-el6-7.noarch.rpm になっており、こちらはデフォルトでmysql57-communityリポジトリーが有効になっています(ので、--enablerepoいらない)



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)

長さ制限に引っかかってそんなユーザーは作れなかった。なるほど。


何の話だかよくわからなくなってきたのでこれまで。

0 件のコメント :

コメントを投稿