web-dev-qa-db-ja.com

読み取り専用のデータディレクトリでmysqldを起動する方法は?

ホストからのデータディレクトリを読み取り専用でマウントして、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

読み取り専用のデータディレクトリでデータベースサーバーを起動するにはどうすればよいですか?

3
Thomas Johnson

InnoDBアーキテクチャに注意してください(Percona CTO Vadim Tkachenkoによる図解)

InnoDB Architecture

システムテーブルスペースファイルibdata1には書き込みが必要な可動部分があります

  • データ辞書
  • 二重書き込みバッファ
    • データの破損を防ぐセーフティネット
    • キャッシングのためのOSのバイパスを支援
  • バッファーの挿入(セカンダリインデックスへの変更を合理化)
  • ロールバックセグメント
  • ログを元に戻す

-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は非常に迅速に起動します。

4
RolandoMySQLDBA