はじめに
QNAP TS-453BeはNASだけど「SQLサーバ」が使える。実態はMariaDBである。この機能は「コントロールパネル→アプリケーション→SQLサーバ」で有効にできる。このMariaDBの設定を変更するためmy.cnfに相当するファイルを探そうとして色々調べた。
3つのインスタンス
QNAPのNAS上ではMariaDB/MySQLのインスタンスが複数動いている。必要に応じて他にもプロセスがforkされるのかもしれないが、少なくともコントロールパネルで「SQLサーバ」を有効にしただけだと3つのインスタンスが動いている。以下の表はpsコマンドで確認できるコマンドラインオプションの一部である。
binary | --port | --defaults-file | --datadir |
---|---|---|---|
/usr/local/mysql/bin/mysqld_safe | /etc/config/my.cnf | /usr/local/mysql/var | |
/usr/local/mysql/bin/mysqld | 3306 | /etc/config/my.cnf | /usr/local/mysql/var |
/usr/local/mariadb/bin/mysqld_safe | /etc/qbox-mariadb.cnf | /share/CACHEDEV1_DATA/.qbox/mysql/data | |
/usr/local/mariadb/bin/mysqld | 23310 | /etc/qbox-mariadb.cnf | /share/CACHEDEV1_DATA/.qbox/mysql/data |
/usr/local/mariadb/bin/mysqld_safe | /usr/local/mariadb/my-mariadb.cnf | /share/CACHEDEV1_DATA/.system/data | |
/usr/local/mariadb/bin/mysqld | 3310 | /usr/local/mariadb/my-mariadb.cnf | /share/CACHEDEV1_DATA/.system/data |
ポート3306を使っているプロセスがコントロールパネルから設定できるSQLサーバだろう。3つのインスタンスではあるがそれぞれ*_safeというラッパースクリプトから起動されているので6つのプロセスが見える。ラッパースクリプトは多重起動など危険な状態での起動を避けるためにあるらしい1。
ユーザーがNAS外から使えるMariaDB
ポートを見る限りはこれがアプリケーション用のMariaDBらしい。
binary | /usr/local/mysql/bin/mysqld |
---|---|
--port | 3306 |
--defaults-file | /etc/config/my.cnf |
--datadir | /usr/local/mysql/var |
--log-error | /usr/local/mysql/var/ホスト名 .err |
--basedir | /usr/local/mysql |
--user | admin |
--pid-file | /var/lock/qmysql.pid |
--tmpdir | /usr/local/mysql/tmp |
--socket | /tmp/mysql.sock |
データの置き場所
--datadir
が/usr/local/mysql/var
なので、ここってシステム用の小さなパーティションなのにな、がっつりデータが保存されるはずなのにこれで良いのかと疑問に思ったが、シンボリックリンクが張られていた。
-
/usr/local/mysql
→/mnt/ext/opt/mariadb/
-
/mnt/ext/opt/mariadb/var
→/share/CACHEDEV1_DATA/.@qmariadb/data/
設定ファイル my.cnf
の場所
設定ファイルは/etc/config/my.cnf
とのこと。これは/etc/my.cnf
からのシンボリックリンク先でもある。ほかに/usr/local/mariadb/my.cnf
や/usr/local/mariadb/my-mariadb.conf
というファイルもあって混乱する。
既定の my.cnf
自分でいじりすぎてわけがわからなくなった時のために、エディタで変更を加える前のmy.cnf
を保全しておく。scpでコピーしたままのものをgistにも置いておく。https://gist.github.com/TakashiSasaki/4fb4039c242ce9ad0f3634dbe6e8463c
[client] | |
---|---|
port | 3306 |
socket | /tmp/mysql.sock |
[mysqld] | |
---|---|
port | 3306 |
socket | /tmp/mysql.sock |
skip-external-locking | |
key_buffer_size | 16M |
max_allowed_packet | 1M |
table_open_cache | 64 |
sort_buffer_size | 512K |
net_buffer_length | 8K |
read_buffer_size | 256K |
read_rnd_buffer_size | 512K |
myisam_sort_buffer_size | 8M |
default-storage-engine | MyISAM |
log-bin | mysql-bin |
binlog_format | mixed |
server-id | 1 |
[mysqldump] | |
---|---|
quick | |
max_allowed_packet | 16M |
[mysql] | |
---|---|
no-auto-rehash |
[myisamchk] | |
---|---|
key_buffer_size | 20M |
sort_buffer_size | 20M |
read_buffer | 2M |
write_buffer | 2M |
[mysqlhotcopy] | |
---|---|
interactive-timeout |
コントロールパネルの設定との関係
コントロールパネルの「TCP/IPネットワークを有効にする」チェックボックスに従って[mysqld]
セクションにskip-networking
が追加されたり削除されたりするとともに、ファイル末尾にもう一つ[mysqld]
セクションが作られport = 3306
が加除される。
DNSによる逆引きの抑止
MySQL/MariaDBのユーザーアカウントはホスト部に名前を書くことができる。ということは何らかの方法でIPアドレスから名前への名前解決が起きているはずである。hosts
ファイルに書かれているようなアドレスであればすぐに名前解決できるが、DNSへの逆引きが発生する場合にはこれが性能低下を引き起こすことがある。そこでセキュリティ上はあまり好ましくないのかもしれないが、[mysqld]
にskip-name-resolve
を書くことでDNSへの逆引きを抑制することができる。逆引きを抑制するとホスト名として名前が指定されているMySQL/MariaDBのアカウントは無効となる。hosts
ファイルで名前の分かるホストについても無効になるので注意。
200825 13:26:16 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
200825 13:26:16 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.5.57-MariaDB) starting as process 15761 ...
200825 13:26:16 InnoDB: The InnoDB memory heap is disabled
200825 13:26:16 InnoDB: Mutexes and rw_locks use GCC atomic builtins
200825 13:26:16 InnoDB: Compressed tables use zlib 1.2.3
200825 13:26:16 InnoDB: Initializing buffer pool, size = 128.0M
200825 13:26:16 InnoDB: Completed initialization of buffer pool
200825 13:26:16 InnoDB: highest supported file format is Barracuda.
200825 13:26:16 InnoDB: Waiting for the background threads to start
200825 13:26:17 Percona XtraDB (http://www.percona.com) 5.5.55-MariaDB-38.8 started; log sequence number 214412668
200825 13:26:17 [Note] Plugin 'FEEDBACK' is disabled.
200825 13:26:18 [Warning] 'user' entry 'root@myhost' ignored in --skip name-resolve mode.
200825 13:26:18 [Warning] 'user' entry '@myhost' ignored in --skip-name-resolve mode.
200825 13:26:18 [Warning] 'proxies_priv' entry '@ root@myhost' ignored in --skip-name-resolve mode.
200825 13:26:18 [Note] Event Scheduler: Loaded 0 events
200825 13:26:18 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.5.57-MariaDB' socket: '/tmp/mysql.sock' port: 0 MariaDB Server
-
mysqld_multi 概要 https://changineer.info/server/mysql/mysqld_multi.html ↩