2015年7月1日水曜日

新ConoHaのMariaDBを試してみた

TL;DR

* Amazon RDS for MySQL的なものを探しているなら、これじゃないです。
* 単にユーザーとして観測できる範囲で調べて推測しているだけなので、違ったらごめんなさい。


ConoHaでマネージドデータベースサービスを始めたらしいので試してみた。MariaDB 10.0系ですってよ奥様。

チュートリアル的なものは本家のものを。

データベースサーバーを使う - このべん(ConoHa)


で、これはどうやら共用サーバーのようです。
WEBコンソール中の「データベースを作成する」は

mysql> CREATE DATABASE database_name CHARSET utf8;

に、

「データベースユーザーを追加する」は

mysql> CREATE USER user_name@hostname IDENTIFIED BY 'password_string';

に、

「ユーザーがアクセスできるデータベースを設定する」は

mysql> GRANT ALL ON database_name.* TO user_name@hostname

にマッピングされているようです。


mysql> SHOW GRANTS;
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for username@xxx.xxx.xxx.xxx                                                                                   |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'xxx.xxx.xxx.xxx' IDENTIFIED BY PASSWORD '*E021B6BBA043401E045906A6646199BFADD9A0B1' |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

こんなかんじで。

あ、共用サーバーっぽいの関係上、全世界に3306番ポート解放ってことになると思うので、ユーザー名(特に接続元ホスト指定)とパスワードはかなり重要です。たぶん。


取り敢えずデータベース権限だけでグローバル権限は一切無いので、

* レプリケーション関連の機能は一切使えない
* SET GLOBALで設定する必要がある変数は一切いじれない
* INSTALL PLUGINもちろんできない

WordPressユーザー想定してる感じなんですかね。
なので俺はたぶんお呼びでないし、それならWordPressテンプレート(というのがConoHaにはある)でいいんじゃね? って感じがするけれど。。

有料オプションでバックアップがあるんだけど、これってどうやって取ってるんだろう。XtraDBがある以上オンラインで取るならMyDumperかxbかmysqldumpか、整合性を保つためには一度スキーマの中全部をロックしてやらないといけないんだけど、その辺どうなってるのかも気になる。PITRもできるの? MariaDBが落ちたらちゃんとDNS切り替わるの? とか、クォータもなかなか共用サーバーでやろうとすると奥が深い(information_schemaからデータを引くと誤差とか誤差じゃない何かがあったり、REVOKEやFLUSH PRIVILEDGESでは即時反映されなかったり)ので、どうやってんのかなぁとか。


権限は限られていますが、取り敢えずSHOW GLOBAL VARIABLESの中でめぼしいパラメーターを拾い読み。


*************************** 15. row ***************************
Variable_name: aria_recover
        Value: NORMAL
*************************** 16. row ***************************
Variable_name: aria_repair_threads
        Value: 1
*************************** 323. row ***************************
Variable_name: myisam_recover_options
        Value: DEFAULT
*************************** 324. row ***************************
Variable_name: myisam_repair_threads
        Value: 1

MyISAMとAriaのリペアオプションが有効になってる。

( ´-`).oO(あれ、これクラッシュ後にリペアしてる真っ最中のロックってどうなるんだっけ。。


*************************** 25. row ***************************
Variable_name: back_log
        Value: 150

共有サーバーなので大き目なのかな。


*************************** 26. row ***************************
Variable_name: basedir
        Value: /usr
*************************** 45. row ***************************
Variable_name: character_sets_dir
        Value: /usr/share/mysql/charsets/
*************************** 52. row ***************************
Variable_name: datadir
        Value: /var/lib/mysql/



rpmでインストールしたかな?


*************************** 34. row ***************************
Variable_name: binlog_format
        Value: MIXED
*************************** 277. row ***************************
Variable_name: log_bin
        Value: ON

ふむ。一応ONだけど、もちろんREPLICATION SLAVE権限もREPLICATION CLIENT権限も使えない。内部でバックアップ取ってるのかな。


*************************** 131. row ***************************
Variable_name: innodb_buffer_pool_size
        Value: 10737418240
*************************** 142. row ***************************
Variable_name: innodb_concurrency_tickets
        Value: 5000
*************************** 144. row ***************************
Variable_name: innodb_data_file_path
        Value: ibdata1:12M:autoextend
*************************** 154. row ***************************
Variable_name: innodb_file_per_table
        Value: ON
*************************** 157. row ***************************
Variable_name: innodb_flush_method
        Value:
*************************** 175. row ***************************
Variable_name: innodb_io_capacity
        Value: 200
*************************** 176. row ***************************
Variable_name: innodb_io_capacity_max
        Value: 2000
*************************** 189. row ***************************
Variable_name: innodb_log_file_size
        Value: 268435456
*************************** 190. row ***************************
Variable_name: innodb_log_files_in_group
        Value: 2

innodb_concurrency_ticketsはデフォルトより大きくしてある。
InnoDBのコンテキストスイッチ的なものを制御する変数で、OLTPっぽい細かいI/O向けのシステムには小さく, OLAPみたいな大きくI/Oを食うシステムには大き目にするっていうのがあるんだけど、これはOLAPっぽく使うだろうと中の人が想定したんだろうか。

HDDの玉で仮想環境(かどうかは知らないけど)とかだとinnodb_flush_methodを未指定(Linux上ではfsync相当)でinnodb_io_capacityは無理にいじらないのは当たりだと思う。


*************************** 143. row ***************************
Variable_name: innodb_corrupt_table_action
        Value: assert

これはXtraDBのオプション なんだけど、吊るしのまま。


*************************** 151. row ***************************
Variable_name: innodb_file_format
        Value: Antelope

Super権限がないのでこの値は変えられないし、ということはROW_FORMAT= DynamicやCompressedはここでは使えないってことだ。。


*************************** 296. row ***************************
Variable_name: max_connect_errors
        Value: 999999999
*************************** 297. row ***************************
Variable_name: max_connections
        Value: 10000

(・∀・)ゞ

TCPポートを叩くだけ叩いてヘルスチェックにしちゃうやつだと、max_connect_errorsを大きくしておかないとそのうちホストごと接続拒否られるというアレか。
この形式だと、mysqldごと落ちてくれるやつはちゃんと切り替わるんだけど、mysqldがストールした場合って切り離してくれないことが多いのよね。

そして、max_connections= 10000が本当に押し寄せたらストールしちゃうんじゃないか感はある。


*************************** 311. row ***************************
Variable_name: max_tmp_tables
        Value: 32

何人で共有するかわからないけれど、max_connections 10000に対してちょっと少なすぎるんじゃ。。
とか思ったら、これセッション変数だった。失礼。


*************************** 312. row ***************************
Variable_name: max_user_connections
        Value: 30

max_user_connectionsが30になっているので、1ユーザーあたりの接続可能コネクションは30まで。

MySQL :: MySQL 5.6 Reference Manual :: 5.1.4 Server System Variables


$ perl -MDBI -e 'my @tmp; while (push(@tmp, DBI->connect("dbi:mysql:db_name:host_name", "user_name", "password"))) { print ++$n, "\n"; }'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
DBI connect('db_name:host_name','user_name',...) failed: User user_name already has more than 'max_user_connections' active connections at -e line 1



*************************** 280. row ***************************
Variable_name: log_output
        Value: FILE
*************************** 286. row ***************************
Variable_name: log_warnings
        Value: 1
*************************** 287. row ***************************
Variable_name: long_query_time
        Value: 10.000000

*************************** 435. row ***************************
Variable_name: slow_query_log
        Value: ON

出力されてはいるぽいけど、ユーザーからアクセスする方法はなさげ。


*************************** 385. row ***************************
Variable_name: query_cache_size
        Value: 0
*************************** 387. row ***************************
Variable_name: query_cache_type
        Value: ON

クエリーキャッシュは無効化されてる。
グローバルロックに巻き込まれる心配はなかった :)


*************************** 451. row ***************************
Variable_name: ssl_ca
        Value: /etc/my.cnf.d/ssl/ast.tyo1.database-hosting.conoha.io-ca.crt
*************************** 452. row ***************************
Variable_name: ssl_capath
        Value:
*************************** 453. row ***************************
Variable_name: ssl_cert
        Value: /etc/my.cnf.d/ssl/ast.tyo1.database-hosting.conoha.io-server.crt
*************************** 454. row ***************************
Variable_name: ssl_cipher
        Value:
*************************** 455. row ***************************
Variable_name: ssl_crl
        Value:
*************************** 456. row ***************************
Variable_name: ssl_crlpath
        Value:
*************************** 457. row ***************************
Variable_name: ssl_key
        Value: /etc/my.cnf.d/ssl/ast.tyo1.database-hosting.conoha.io-server.key


一応SSL接続は有効化されてるけど、公開鍵もらえないとSSLで接続できない。。


*************************** 465. row ***************************
Variable_name: system_time_zone
        Value: UTC

( ゚д゚) えっ(ホントにNOW()がUTCで返ってきた)


*************************** 467. row ***************************
Variable_name: table_open_cache
        Value: 400

( ´-`).oO(innodb_stats_on_metadsataがOFFでも、テーブルキャッシュからあふれるとそのたび統計情報の更新がトリガーされちゃうから、このサイズキツくないかなぁ。。


*************************** 470. row ***************************
Variable_name: thread_handling
        Value: one-thread-per-connection

スレッドプール無効。
(もったいない。。)


*************************** 474. row ***************************
Variable_name: thread_pool_size
        Value: 4

thread_pool_sizeの暗黙のデフォルトはプロセッサー数なので、4vCPUってことかな。。


mysql> SELECT plugin_name, plugin_type, plugin_status FROM all_plugins WHERE plugin_status <> 'ACTIVE';
+-------------------------------+--------------------+---------------+
| plugin_name                   | plugin_type        | plugin_status |
+-------------------------------+--------------------+---------------+
| FEEDBACK                      | INFORMATION SCHEMA | DISABLED      |
| QUERY_CACHE_INFO              | INFORMATION SCHEMA | NOT INSTALLED |
| rpl_semi_sync_slave           | REPLICATION        | NOT INSTALLED |
| QUERY_RESPONSE_TIME           | INFORMATION SCHEMA | NOT INSTALLED |
| QUERY_RESPONSE_TIME_AUDIT     | AUDIT              | NOT INSTALLED |
| rpl_semi_sync_master          | REPLICATION        | NOT INSTALLED |
| Mroonga                       | STORAGE ENGINE     | NOT INSTALLED |
| Mroonga_stats                 | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB                        | STORAGE ENGINE     | NOT INSTALLED |
| TokuDB_trx                    | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_lock_waits             | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_locks                  | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_file_map               | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_fractal_tree_info      | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_fractal_tree_block_map | INFORMATION SCHEMA | NOT INSTALLED |
| pam                           | AUTHENTICATION     | NOT INSTALLED |
| METADATA_LOCK_INFO            | INFORMATION SCHEMA | NOT INSTALLED |
| InnoDB                        | STORAGE ENGINE     | NOT INSTALLED |
| INNODB_TRX                    | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_LOCKS                  | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_LOCK_WAITS             | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMP                    | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMP_RESET              | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMPMEM                 | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMPMEM_RESET           | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMP_PER_INDEX          | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMP_PER_INDEX_RESET    | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_BUFFER_PAGE            | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_BUFFER_PAGE_LRU        | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_BUFFER_POOL_STATS      | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_METRICS                | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_DEFAULT_STOPWORD    | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_DELETED             | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_BEING_DELETED       | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_CONFIG              | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_INDEX_CACHE         | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_INDEX_TABLE         | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_TABLES             | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_TABLESTATS         | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_INDEXES            | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_COLUMNS            | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_FIELDS             | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_FOREIGN            | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_FOREIGN_COLS       | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_TABLESPACES        | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_DATAFILES          | INFORMATION SCHEMA | NOT INSTALLED |
| LOCALES                       | INFORMATION SCHEMA | NOT INSTALLED |
| unix_socket                   | AUTHENTICATION     | NOT INSTALLED |
| handlersocket                 | DAEMON             | NOT INSTALLED |
| SERVER_AUDIT                  | AUDIT              | NOT INSTALLED |
| SPIDER                        | STORAGE ENGINE     | NOT INSTALLED |
| SPIDER_ALLOC_MEM              | INFORMATION SCHEMA | NOT INSTALLED |
| SEQUENCE                      | STORAGE ENGINE     | NOT INSTALLED |
| SQL_ERROR_LOG                 | AUDIT              | NOT INSTALLED |
| SPHINX                        | STORAGE ENGINE     | NOT INSTALLED |
+-------------------------------+--------------------+---------------+
55 rows in set (0.02 sec)

MariaDBにバンドルされているプラグインはほぼ全滅。 MariaDBである意味がほとんどない。。
InnoDB関連ぽいのが軒並みNOT INSTALLEDになってるのは、InnoDBの代わりにXtraDBが使われているから(WHERE plugin_status= 'ACTIVE'で引くとXtraDB側のInnoDBやInnoDB関連のinformation_schemaがACTIVEになっている)

Mroongaさん有効にしてほしいなぁ。。起動したらそのままSQLで全文検索できるよとか素敵じゃない? クォータかけづらい気もするけど。


という訳で何をどう考えても、ConoHa VPSに自分でMariaDBをyumで突っ込んだ方が良さげな雰囲気がしました。まる。

と書いてから気づいたんだけど、旧ConoHaでいうところのWordPressテンプレート的なものってなんかMySQL 5.1.73になってて(旧ConoHaのはPercona Serverだったはず)なんか劣化してるんじゃ。。:(;゙゚'ω゚'):

0 件のコメント :

コメントを投稿