MySQLからMariaDB
MySQLがオラクルに買収されて、更なる進化が期待されています.
しかし、一般ユーザーが扱うのであればMySQLは遥か遠くに進んでいるように感じます.
簡単、気軽に扱えるデータベースと考えると、MySQLから分離したMariaDBの方が良いのかもしれません.
今回は、FreeBSD12サーバーのWordPressで使用するデータベースをMariaDBをインストールして使うことにしました.
基本的な使い方は、MySQLと変化なし.
FreeBSD12のpkgからMariaDB10.5をインストール
# pkg search mariadb 最新のmariadbをpkgで検索してみる
mariadb-connector-c-3.1.10 MariaDB database connector for C
mariadb-connector-odbc-3.1.11 MariaDB database connector for odbc
mariadb103-client-10.3.31_1 Multithreaded SQL database (client)
mariadb103-server-10.3.31_1 Multithreaded SQL database (server)
mariadb104-client-10.4.21_1 Multithreaded SQL database (client)
mariadb104-server-10.4.21_1 Multithreaded SQL database (server)
mariadb105-client-10.5.12_1 Multithreaded SQL database (client)
mariadb105-server-10.5.12_1 Multithreaded SQL database (server)
最新版はmariadb105でした.
pkg で mariadb105-server をインストールします.
# pkg install mariadb105-server
New packages to be INSTALLED: binutils: 2.37_1,1 gcc10: 10.3.0 gettext-runtime: 0.21 gmp: 6.2.1 indexinfo: 0.3.1 libedit: 3.1.20210216,1 libiconv: 1.16 mariadb105-client: 10.5.12_1 mariadb105-server: 10.5.12_1 mpc: 1.2.1 mpfr: 4.1.0_1 readline: 8.1.1 unixODBC: 2.3.9 Number of packages to be installed: 13 The process will require 552 MiB more space. 97 MiB to be downloaded.
結構大きなサイズです.
気が利いていてmariadb-clientも同時にインストールされたので、手間が省けました.
構成ファイルは/ usr / local / etc / mysql、
および/usr/local/etc/mysql/conf.d。
/var/db/mysql/my.cnfを使用しなくなりました
ログとPIDファイルは/ var / db / mysqlにありません。
インストールのメッセージには、上記のようなことが書かれていました.
これまでの mySQL とファイルの場所が移動になったみたいです.
MariaDBを動作させる
下記の2つのコマンドで/etc/rc.confにmysql-server_enable=”YES”と記入してmysql-serverをスタートさせる.
一番最初のmysqlサーバーのスタートは、データーベースディレクトリにファイルと書き込むために少々時間を要します.
#service mysql-server enable
#service mysql-server start
動作確認をしてみると、
# ps ax | grep mariadb
3466 - Is 0:00.02 /bin/sh /usr/local/bin/mariadbd-safe --defaults-extra-f
3587 - I 0:00.26 /usr/local/libexec/mariadbd --defaults-extra-file=/usr/
ここでは、mariadbというプロセス名でした.(mysqlじゃないのですね)
MariaDBのルートパスワードを設定する
mysqlから派生したMariaDBも、mysqlのrootパスワードの設定は、下のコマンドを使用するようです.
少し質問内容が異なるのは、バージョンによるものかどうかわからないが、mysqlで設定する内容とMariaDBの内容は、異なっていることに注意したい.
# mysql_secure_installation
Enter current password for root (enter for none): エンター・リターンキー Switch to unix_socket authentication [Y/n] Y (unix_sockが安全なようです) Change the root password? [Y/n] Y(nと答えるとFreeBSDのrootのパスワードだが、新しいパスワードにするために Y にしよう) Newpassword: ********** (新しいパスワードを入力) Re-enter new password: ********** (もう一度同じパスワードを入力) Password updated successfully! Reloading privilege tables.. ... Success! Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
注意)FreeBSDのphpMyAdominをpkgでインストールして使用する場合は、
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
この2つ質問のに注意したほうが良いだろう、というのは、phpMyAdminのデフォルトの設定ファイルは、TCP socketのようだし、mysqlのrootのパスワードの設定をしないと受け付けない仕様のようです.
ログインしてみる
mysqlにログインしてみる. ( password : 上で登録したパスワード)
#mysql -u root -p
Enter password: **********
root@localhost [(none)]>
せっかくログインしたので文字コードを確認して見みると、
root@localhost [(none)]> show variables like 'character_set%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
root@localhost [(none)]> exit
ラテン語な文字が標準なんですね.
WordPressで標準の日本語文字コードは、UTF8が推奨されているみたいなので、
日本語文字コードへ変更
2つの設定ファイル( server.conf , client.conf )に文字コードを追記するだけで、文字コードの変更ができるようです.
書き込む場所と、書き込む内容が少し違っているので注意したい.
# vi /user/local/etc/mysql/conf.d/server.cnf
[mysqld]
character-set-server=utf8mb4 文字コードを追加
# vi /user/local/etc/mysql/conf.d/client.cnf
[client]
default-character-set = utf8mb4 文字コード追加
書き加えたら、MariaDBの再起動
# service mysql-server restart
先ほどと同じように、mysql -u root -p
#mysql -u root -p
Enter password: **********
でログインして文字コードを見ると
root@localhost [(none)]> show variables like 'character_set%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.002 sec)
日本語に使われるutf8mb4に文字コードが変更できました.
WordPress で日本語を扱う時は、SQLの設定する文字コードに注意が必要だそうです.
my.cnf ( 変更なし )
my.cnf の内容を覗いてみると、client-server の接続設定が書かれているようです.
両刀使いか??
/usr/local/etc/mysql # less my.cnf
/usr/local/etc/mysql # less my.cnf
#
# This group is read both by the client and the server
# use it for options that affect everything, see
# https://mariadb.com/kb/en/configuring-mariadb-with-option-files/#option-groups
#
[client-server]
port = 3306
socket = /var/run/mysql/mysql.sock
#
# include *.cnf from the config directory
#
!includedir /usr/local/etc/mysql/conf.d/
これまでのMySQLと比べると、my.cnf は簡素な設定ファイルになりました.
最後の行に includedir とあるので、conf.d/にあるファイルを読みに行っているようです.
ファイルを分割したのですね.
conf.d/server.cnf ( 変更なし )
my.cofの最後に書かれていた includedir を見てみましょう.
#less usr/local/etc/mysql/conf.d/server.cnf
#
# Options for specific server tools
#
[mysqld]
user = mysql
# port = 3306 # inherited from /usr/local/etc/mysql/my.
cnf
# socket = /var/run/mysql/mysql.sock # inherited from /usr/local/etc/mysql/my.cnf
bind-address = 127.0.0.1
basedir = /usr/local
datadir = /var/db/mysql
net_retry_count = 16384
log_error = /var/log/mysql/mysqld.err
# [mysqld] configuration for ZFS
続くーーーー
このファイルで、php-fpmと連携する方法
- port = 3306
- socket = mysql.sock
を#コメントアウトして選択するようですが.
しかし、このバージョンで pkg インストールした時は、ここは変更しなくても、phpとの連携は問題ありませんでした.
FreeBSDのデフォルトは、mysql.sock を使ってアプリ間の、やりとりを観察しているようです.
unix socket は オプション -u を使って
# sockstat -u mysql
mariadbd 4139 20 stream /var/run/mysql/mysql.sock
tcp4 socketは、オプション -4 を使って
# sockstat -4 mysql
mariadbd 4139 19 tcp4 127.0.0.1:3306 *:*
FreeBSDのMariaDBのデフォルト設定は、TCP4 UNIXソケットどちらも動いている?みたいです.
このファイルは、確認だけで変更なしで動作しました.
port = 3306 は、他のサーバーから使用しないのならば、停止することも考慮したほうが良いかもしれません.
一台のサーバーで全てのサーバーソフトを連携させるのであれば、socket = mysql.sock だけを使ったほうが安全かもね.
unix socketを使う設定
/usr/local/etc/mysql # less my.cnf
# port = 3306 をコメントアウト
/usr/local/etc/mysql # less my.cnf
#
# This group is read both by the client and the server
# use it for options that affect everything, see
# https://mariadb.com/kb/en/configuring-mariadb-with-option-files/#option-groups
#
[client-server]
# port = 3306
socket = /var/run/mysql/mysql.sock
#
# include *.cnf from the config directory
#
!includedir /usr/local/etc/mysql/conf.d/
#less usr/local/etc/mysql/conf.d/server.cnf
socket = /var/run/mysql/mysql.sock の # コメントアウトを外す
#
# Options for specific server tools
#
[mysqld]
user = mysql
# port = 3306 # inherited from /usr/local/etc/mysql/my.
cnf
socket = /var/run/mysql/mysql.sock # inherited from /usr/local/etc/mysql/my.cnf
bind-address = 127.0.0.1
basedir = /usr/local
datadir = /var/db/mysql
net_retry_count = 16384
log_error = /var/log/mysql/mysqld.err
# [mysqld] configuration for ZFS
続くーーーー
同一サーバー内で動作させるのであれば、unix socket で接続させた方がパフォーマンスが高いと言われているので、上記の設定に変更して、
# service mysql restart
すれば、設定が反映される.
これで、MariaDBのインストールと設定の準備はOKです.
FreeBSDのpkgでインストールと設定も注意して行えば難しくないと思います.
phpMyAdminを使うときの注意
MariaDB(mysql)を簡単に扱うためにphpMyAdminをインストールしたほうが簡単にデータベースを扱えると思います.
web画面から操作できるということは、他人がインターネットでアクセスできる可能性があるので、セキュリティ上問題になるので、選択はユーザーに任せたいのですが.
ただ、MariaDBをphpMyAdminを扱うのであれば、
# mysql_secure_installation
Change the root password? [Y/n] Y
の設定で、必ず、mysqlのrootパスワードの設定 ( Change the root password? [Y/n] Y ) をすることが必要のようです.
データベースファイルの在処
FreeBSD で MariaDB のデータベースの所在は、mysql と同様 /var/db/mysql にありました.
ログとPIDファイルは/ var / db / mysqlには、なくなりました.
# ls -l /var/db/mysql
-rw-rw---- 1 mysql mysql 106496 Dec 29 08:23 aria_log.00000001
-rw-rw---- 1 mysql mysql 52 Dec 29 08:23 aria_log_control
drwx------ 2 mysql mysql 37 Nov 26 23:37 bad
drwx------ 2 mysql mysql 3 Oct 23 17:45 fbsd
-rw-r----- 1 mysql mysql 14786 Nov 16 21:04 ib_buffer_pool
-rw-rw---- 1 mysql mysql 100663296 Dec 29 08:56 ib_logfile0
-rw-rw---- 1 mysql mysql 79691776 Dec 29 08:24 ibdata1
-rw-rw---- 1 mysql mysql 12582912 Nov 28 22:21 ibtmp1
-rw-rw---- 1 mysql mysql 0 Oct 18 12:23 multi-master.info
drwx------ 2 mysql mysql 90 Oct 18 12:23 mysql
drwx------ 2 mysql mysql 3 Oct 18 12:23 performance_schema
drwx------ 2 mysql mysql 41 Oct 28 10:40 phpmyadmin
エラーログ mysqld.err は /var/log/mysql に変更になりました.
# ls -l /var/log/mysql/mysqld.err
-rw-rw---- 1 mysql mysql 21332 Dec 17 14:06 /var/log/mysql/mysqld.err
動作不良の時には、mysql.err の内容を確認しましょう.
tail -f コマンドを使うと最後から継続してみることができます.
他のPC からサーバーに SSH で複数ウインド接続して、エラーログを見ながら動作確認が可能になります.
# tail -f /var/log/mysql/mysqld.err
2021-12-16 17:41:19 227763 [Warning] Aborted connection 227763 to db: 'mndks' user: 'wpadmin' host: 'localhost' (Got an error writing communication packets)
2021-12-16 18:09:50 228061 [Warning] Aborted connection 228061 to db: 'mndks' user: 'wpadmin' host: 'localhost' (Got an error reading communication packets)
MariaDB 起動に失敗した場合
MariaDB の起動
# service mysql-server start
MariaDB の起動の確認
# ps ax | grep mariadb
3466 – Is 0:00.02 /bin/sh /usr/local/bin/mariadbd-safe –defaults-extra-f
3587 – I 0:00.26 /usr/local/libexec/mariadbd –defaults-extra-file=/usr/
前記しましたが、
# ps ax | grep mariadb
でデーモンが動作していない場合は、なんらかの原因があります.
その場合の原因を探る方法は、エラーメッセージが
/var/log/mysql/mysqld.err
に出力されるので、tail コマンドでエラーの原因を探してみましょう.
tail コマンドは、最後の行を簡単にみることが出来るので、ログを読む時に便利なのでぜひ覚えておきましょう.
# tail -n 20 /var/log/mysql/mysqld.err
tail コマンド ( 最後の行からテキストを表示するコマンド ) の説明
-n : 行数
この場合、mysqld.err に書かれている最後の 20 行を表示します.
# tail -f /var/log/mysql/mysqld.err
tail コマンド ( 最後の行からテキストを表示するコマンド ) の説明
-f : リアルタイムに追記を表示します.
この場合、mysqld.err に追記される状態を監視することができます.
tail -f の動作を終了するときは、 キーボードから CTL + C を押します.