最近の変更サイトマップ

InnoDB File-Per-Tableモードではinnodb_data_home_dirは無視される

MySQL/MariaDBにinnodb_data_home_dirというシステム変数がある。InnoDBのデータファイル置き場を明示する変数だが、InnoDB File-Per-Tableモードでは指定値が無視される。File-Per-Tableモードとは、InnoDBのテーブル毎にファイルを作成するモードの事でinnodb_file_per_table変数で制御可能である。MySQL 5.6.6以降でデフォルト有効になったため、innodb_data_home_dirは事実上意味がなくなってしまった。

よって、File-Per-TableモードではZFSのrecordsizeprimarycacheをストレージエンジン毎に最適化する、という手法が取りにくくなった。(DBごとにフォルダが作成され、その中にInnoDBやMyISAMのファイルが混在することになるため。)自分のメモも兼ねて最適とされるパラメータを下表にまとめる。

ストレージエンジン recordsize primarycache
MyISAM 8kBall
InnoDB(データ) 16kBmetadata
InnoDB(ログ) 128kBmetadata

参考サイト

FreeBSD/MySQLのWITH_CHARSET, WITH_XCHARSETはもう止めよう

FreeBSDでPortsからMySQL/MariaDBを入れる際、盲目的に指定するオプションにWITH_CHARSET, WITH_XCHARSETがある。Ports独自のオプションで、しかも日本以外での使用例が殆なく、これぞという解説も見当たらない。仕方ないのでportsの更新履歴や8-RELEASE以前の古いportsツリーを調査してみたところ、なんとmysql55で廃止されてるっぽい。

mysql51-serverのportsのMakefile(MySQLそのもののMakefileじゃないよ)には以下の記述があるが、mysql55-serverからは消えているのだ…!MariaDBはMySQL 5.5からのフォークなので言わずもがなである。

.if defined(WITH_CHARSET) && ${WITH_CHARSET} != ""
CONFIGURE_ARGS+=--with-charset=${WITH_CHARSET}
.endif
.if defined(WITH_XCHARSET) && ${WITH_XCHARSET} != ""
CONFIGURE_ARGS+=--with-extra-charsets=${WITH_XCHARSET}
.endif

見ればわかるが、portsのWITH_CHARSET, WITH_XCHARSETオプションは、それぞれMySQLの–with-charset, –with-extra-charsetsオプションに対応している(正確には“していた”)。そして、MySQL 5.5からは–with-charset自体が消えてるっぽい。–extra-charsetsってのはあるみたいだけど。–with-extra-charsetsの方もデフォルト値がallとなり、ports側から敢えて指定する必要性もなくなったのだと思われる。

WITH_CHARSET, WITH_XCHARSETオプションは、2001年1月25日にmysql323-serverに対する追加が初出のようだ。その時の更新メッセージは「Add options for alternate charsets (WITH_CHARSET and WITH_XCHARSET).」といったもの。

というわけで、MySQL/MariaDBインストールでWITH_CHARSET, WITH_XCHARSETを付けるのはもう止めよう

参考サイト

MySQL 5.6.8でmy.cnfのサンプルがなくなった

FreeBSD 10.1-RELEASEにMySQL 5.6.22をインストールしたら、おなじみのmy-medium.cnfが無くなっていた。my-default.cnfというものはあるが、中身を見るとどう見ても空っぽ。

公式サイトによれば、5.6.8から従来のcnfファイルの提供は中止され、mysql_install_dbコマンドで生成するようになったらしい。てなわけで実行してみる。

$ sudo mysql_install_db --user=mysql --basedir=/usr/local --datadir=/usr/home/mysql/data
Installing MySQL system tables...2014-12-31 23:47:49 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2014-12-31 23:47:49 67043 [Note] InnoDB: Using atomics to ref count buffer pool pages
2014-12-31 23:47:49 67043 [Note] InnoDB: The InnoDB memory heap is disabled
2014-12-31 23:47:49 67043 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2014-12-31 23:47:49 67043 [Note] InnoDB: Memory barrier is not used
2014-12-31 23:47:49 67043 [Note] InnoDB: Compressed tables use zlib 1.2.3
2014-12-31 23:47:49 67043 [Note] InnoDB: Using CPU crc32 instructions
2014-12-31 23:47:49 67043 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2014-12-31 23:47:49 67043 [Note] InnoDB: Completed initialization of buffer pool
2014-12-31 23:47:49 67043 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2014-12-31 23:47:49 67043 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2014-12-31 23:47:49 67043 [Note] InnoDB: Database physically writes the file full: wait...
2014-12-31 23:47:49 67043 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2014-12-31 23:47:50 67043 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2014-12-31 23:47:50 67043 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2014-12-31 23:47:50 67043 [Warning] InnoDB: New log files created, LSN=45781
2014-12-31 23:47:50 67043 [Note] InnoDB: Doublewrite buffer not found: creating new
2014-12-31 23:47:50 67043 [Note] InnoDB: Doublewrite buffer created
2014-12-31 23:47:50 67043 [Note] InnoDB: 128 rollback segment(s) are active.
2014-12-31 23:47:50 67043 [Warning] InnoDB: Creating foreign key constraint system tables.
2014-12-31 23:47:50 67043 [Note] InnoDB: Foreign key constraint system tables created
2014-12-31 23:47:50 67043 [Note] InnoDB: Creating tablespace and datafile system tables.
2014-12-31 23:47:50 67043 [Note] InnoDB: Tablespace and datafile system tables created.
2014-12-31 23:47:50 67043 [Note] InnoDB: Waiting for purge to start
2014-12-31 23:47:50 67043 [Note] InnoDB: 5.6.22 started; log sequence number 0
2014-12-31 23:47:52 67043 [Note] Binlog end
2014-12-31 23:47:52 67043 [Note] InnoDB: FTS optimize thread exiting.
2014-12-31 23:47:52 67043 [Note] InnoDB: Starting shutdown...
2014-12-31 23:47:53 67043 [Note] InnoDB: Shutdown completed; log sequence number 1625977
OK
 
Filling help tables...2014-12-31 23:47:53 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2014-12-31 23:47:53 67044 [Note] InnoDB: Using atomics to ref count buffer pool pages
2014-12-31 23:47:53 67044 [Note] InnoDB: The InnoDB memory heap is disabled
2014-12-31 23:47:53 67044 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2014-12-31 23:47:53 67044 [Note] InnoDB: Memory barrier is not used
2014-12-31 23:47:53 67044 [Note] InnoDB: Compressed tables use zlib 1.2.3
2014-12-31 23:47:53 67044 [Note] InnoDB: Using CPU crc32 instructions
2014-12-31 23:47:53 67044 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2014-12-31 23:47:53 67044 [Note] InnoDB: Completed initialization of buffer pool
2014-12-31 23:47:53 67044 [Note] InnoDB: Highest supported file format is Barracuda.
2014-12-31 23:47:53 67044 [Note] InnoDB: 128 rollback segment(s) are active.
2014-12-31 23:47:53 67044 [Note] InnoDB: Waiting for purge to start
2014-12-31 23:47:53 67044 [Note] InnoDB: 5.6.22 started; log sequence number 1625977
2014-12-31 23:47:53 67044 [Note] Binlog end
2014-12-31 23:47:53 67044 [Note] InnoDB: FTS optimize thread exiting.
2014-12-31 23:47:53 67044 [Note] InnoDB: Starting shutdown...
2014-12-31 23:47:55 67044 [Note] InnoDB: Shutdown completed; log sequence number 1625987
OK
 
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
 
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
 
  /usr/local/bin/mysqladmin -u root password 'new-password'
  /usr/local/bin/mysqladmin -u root -h MY.HOSTNAME password 'new-password'
 
Alternatively you can run:
 
  /usr/local/bin/mysql_secure_installation
 
which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.
 
See the manual for more instructions.
 
You can start the MySQL daemon with:
 
  cd . ; /usr/local/bin/mysqld_safe &
 
You can test the MySQL daemon with mysql-test-run.pl
 
  cd mysql-test ; perl mysql-test-run.pl
 
Please report any problems at http://bugs.mysql.com/
 
The latest information about MySQL is available on the web at
 
  http://www.mysql.com
 
Support MySQL by buying support/licenses at http://shop.mysql.com
 
New default config file was created as /usr/local/my.cnf and
will be used by default by the server when you start it.
You may edit this file to change server settings

/usr/local/my.cnfが出来たようだ。中身はというと…

/usr/local/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

これはひどい。どう見ても/usr/local/share/mysql/my-default.cnfをコピーしただけです。本当にありがとうございました。

スクリプトにbasedirとdatadirを渡してるんだから、せめて反映したcnfくらい作ってくれてもいいんじゃないかなぁ…。自分みたいなMySQLの子細は分からないけど、とりあえず使ってみたいユーザーにとっては非常に厳しい。

さて、どうしたものか。

start.txt · 最終更新: 2016-05-07 17:46 by decomo
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0