Help us understand the problem. What is going on with this article?

QNAP TS-453BeのMariaDB/MySQLと設定ファイルの場所

はじめに

QNAP TS-453BeはNASだけど「SQLサーバ」が使える。実態はMariaDBである。この機能は「コントロールパネル→アプリケーション→SQLサーバ」で有効にできる。このMariaDBの設定を変更するためmy.cnfに相当するファイルを探そうとして色々調べた。
image.png

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ファイルで名前の分かるホストについても無効になるので注意。

/usr/local/mysql/var/ホスト名.err
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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした