取り合えず、PerlからCに変わってる。
$ file /usr/mysql/5.6.20/scripts/mysql_install_db
/usr/mysql/5.6.20/scripts/mysql_install_db: a /usr/bin/perl script text executable
$ file /usr/mysql/5.7.5/bin/mysql_install_db
/usr/mysql/5.7.5/bin/mysql_install_db: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
あと、パスが変わってる。今までは./scriptsだったのが./binに(rpmで使ってるぶんには何も変わらないはず) ソースの位置もclient/mysql_install_db.ccになってる。
増えたオプションがいっぱい。
$ /usr/mysql/5.7.5/bin/mysql_install_db --help
..
--admin-auth-plugin=name
Plugin to use for the default admin account.
--admin-host=name Hostname part of the default admin account.
--admin-require-ssl Require SSL/TLS for the default admin account.
--admin-user=name Username part of the default admin account.
..
--defaults Read any option files from default location. If program
startup fails due to reading unknown options from an
option file, --no-defaults can be used to prevent them
from being read.
..
-f, --extra-sql-file=name
Optional SQL file to execute during bootstrap.
--insecure Disables random passwords for the default admin account.
..
--lc-messages=name Specifies the language to use.
-l, --lc-messages-dir=name
Specifies the path to the language files.
--login-file=name Use the MySQL password store at the specified location
to set the default password. This option takes precedence
over admin-user, admin-host options. Use the login-path
option to change the default credential category (default
is 'client').
--login-path=name Set the credential category to use with the MySQL
password store when setting default credentials. This
option takes precedence over admin-user, admin-host
options.
--mysqld-file=name Qualified path to the mysqld binary.
--random-password-file=name
Specifies the qualified path to the .mysql_secret
temporary password file.
..
.mylogin.cnf周りっぽいやつが軒並み追加。あと、
5.6.20で折角追加された--keep-my-cnfがいきなりなくなってるけど、そもそもmy.cnfを勝手に作るロジックがなくなったような気がする(けど、support-files/my-default.cnfはまだ残ってるな)
敢えて/etc/my.cnfとか/usr/local/mysql/etc/my.cnfとかを読むであろう、--defaultsとかいうオプションも追加されてる。誰得。。
extra-sql-fileとかいうのを上手く使うと、mysql_install_dbの段階でユーザーを初期設定できたりするのかしらん? と思ったら
$ cat ./test.sql
GRANT ALL ON tpcc.* TO tpcc@localhost IDENTIFIED BY 'tpcc';
$ ./bin/mysql_install_db --datadir=./data --basedir=./ --extra-sql-file=./test.sql
2014-10-07 18:35:26 [ERROR] The bootstrap log isn't empty:
2014-10-07 18:35:26 [ERROR] 2014-10-07T09:35:25.177361Z 1 [ERROR] 1290 The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
2014-10-07T09:35:25.177637Z 0 [ERROR] Aborting
--bootstrapしてる状態で食わせるから、GRANTステートメントはダメか。
CREATE DATABASEとかはどうだ。
$ cat test2.sql
CREATE DATABASE tpcc;
$ ./bin/mysql_install_db --datadir=./data --basedir=./ --extra-sql-file=./test2.sql
$ ll data
合計 110612
-rw-rw---- 1 yoku0825 yoku0825 50331648 10月 7 18:37 2014 ib_logfile0
-rw-rw---- 1 yoku0825 yoku0825 50331648 10月 7 18:37 2014 ib_logfile1
-rw-rw---- 1 yoku0825 yoku0825 12582912 10月 7 18:37 2014 ibdata1
drwx------ 2 yoku0825 yoku0825 4096 10月 7 18:37 2014 mysql
drwx------ 2 yoku0825 yoku0825 4096 10月 7 18:37 2014 performance_schema
drwx------ 2 yoku0825 yoku0825 4096 10月 7 18:37 2014 tpcc
通ったってことは、GRANTをmysql.user, dbあたりへのINSERTステートメントにすれば食えるだろうけど、微妙だなぁ。。
--insecureはrootのランダムパスワード生成を無効化してくれるので、好んで使う人多いんじゃないでしょうか :)
5.6までは--random-passwordがオプション扱いだった(rpm -iの時にこのオプションが押し込まれる)けれど、5.7では逆に--insecureがないと常にランダムパスワード生成ぽい。
あと、5.6までは--basedirを与えない時は暗黙にカレントディレクトリがbasedirだったのが、5.7では明示的に与えないといけない。
$ ./bin/mysql_install_db --datadir=./data
2014-10-07 18:44:41 [ERROR] Can't locate the language directory.
暗黙のbasedirが与えられてないから、$basedir/shareが見つからずにこんなん言われる。慣れてるからすぐわかるけど、初心者殺しな罠だと思うこれ。
【2014/11/24 17:28】
Feature request出してみた。
MySQL Bugs: #74973: make mysql_install_db in 5.7.5 to use CWD when --basedir is not specified
【2015/04/01 17:55】
なお、次のMySQL 5.7.6でmysql_install_dbはdeprecatedになりました。。
日々の覚書: MySQL 5.7.6でデータベースの初期化が変わる mysql_install_dbからmysqld --initialize