ホストからのデータディレクトリを読み取り専用でマウントして、DockerコンテナーでMariaDBを起動しようとしています。 MySQLdはもちろんホスト上でシャットダウンされます。残念ながら、read_only
my.confにフラグを設定すると、次のエラーが発生します。
root@2380610236d1:/# mysqld --innodb-read-only
140807 19:19:38 [Warning] Can't create test file /var/lib/mysql/2380610236d1.lower-test
140807 19:19:38 [ERROR] mysqld: Can't create/write to file '/var/lib/mysql/aria_log_control' (Errcode: 13 "Permission denied")
140807 19:19:38 [ERROR] mysqld: Got error 'Can't create file' when trying to use aria control file '/var/lib/mysql/aria_log_control'
140807 19:19:38 [ERROR] Plugin 'Aria' init function returned error.
140807 19:19:38 [ERROR] Plugin 'Aria' registration as a STORAGE ENGINE failed.
140807 19:19:38 [Note] InnoDB: Started in read only mode
140807 19:19:38 [Note] InnoDB: Using mutexes to ref count buffer pool pages
140807 19:19:38 [Note] InnoDB: The InnoDB memory heap is disabled
140807 19:19:38 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
140807 19:19:38 [Note] InnoDB: Compressed tables use zlib 1.2.8
140807 19:19:38 [Note] InnoDB: Using Linux native AIO
140807 19:19:38 [Note] InnoDB: Using CPU crc32 instructions
140807 19:19:38 [Note] InnoDB: Disabling background IO write threads.
140807 19:19:38 [Warning] InnoDB: Unable to open "./ib_logfile0" to check native AIO read support.
140807 19:19:38 [Warning] InnoDB: Linux Native AIO disabled.
140807 19:19:38 [Note] InnoDB: Initializing buffer pool, size = 256.0M
140807 19:19:38 [Note] InnoDB: Completed initialization of buffer pool
2014-08-07 19:19:38 7f2bc5a247c0 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
140807 19:19:38 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
140807 19:19:38 [ERROR] InnoDB: The system tablespace must be writable!
140807 19:19:38 [ERROR] Plugin 'InnoDB' init function returned error.
140807 19:19:38 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140807 19:19:38 [Note] Plugin 'FEEDBACK' is disabled.
140807 19:19:38 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
Couldn't start tokudb because some other tokudb process is using the same directory [/var/lib/mysql/] for [environment]
140807 19:19:38 [ERROR] Plugin 'TokuDB' init function returned error.
140807 19:19:38 [ERROR] Plugin 'TokuDB' registration as a STORAGE ENGINE failed.
140807 19:19:38 [ERROR] Unknown/unsupported storage engine: InnoDB
140807 19:19:38 [ERROR] Aborting
140807 19:19:38 [Note] mysqld: Shutdown complete
読み取り専用のデータディレクトリでデータベースサーバーを起動するにはどうすればよいですか?
InnoDBアーキテクチャに注意してください(Percona CTO Vadim Tkachenkoによる図解)
システムテーブルスペースファイルibdata1
には書き込みが必要な可動部分があります
-innodb-read-only がInnoDBハンドルの読み取り専用の状況に設定されていると便利です。
innodb_change_buffering が0であることも確認する必要があります。
また、クラッシュリカバリが発生しないようにする必要もあります。設定方法は次のとおりです。
最初に、書き込み可能なメディア上のデータベースで、MySQLにログインしてこれを実行します。
mysql> set global innodb_fast_shutdown = 0;
次に、OSに移動して実行します
service mysql stop
innodb_fast_shutdown を有効にすると、mysqldはシャットダウン時にすべてとその祖母をInnoDBの配管からパージします。
次に、datadirを読み取り専用メディアに移動します。
次に、これをmy.conf
に追加します
[mysqld]
innodb_change_buffering = 0
innodb_read_only = 1
最後に、mysqlをservice mysql start
で起動します。事前にInnoDB配管からすべてがパージされているため、クラッシュリカバリを実行する必要がないため、InnoDBは非常に迅速に起動します。