ども、お久しぶりです。
オンプレのインフラ構築を担当することが多い四斗邊です。
今回は社内の要望でmysql8.0サーバーを社内ネットワーク上に構築する!というのが目標です。
結構ありふれたネタだと思いますが、社内に向けた手順書のような形で残しておきたかったので今回記事しました。
PC構成
-
CPU intel i5-12400 6コア12スレッド 2.5GHz
-
メモリー CT2K32G4SFD832A メモリー32GB 1枚(レイテンシーは特に考えていない)
-
ベアボーンキット DeskMini B660
-
SSD WDS100T3X0E 1TB
これで10万円を切った構成になっています。
安くてそれなりに社内サーバーとしてはそこそこパワーがある構成にしてみました。
一番の特徴はなによりもベアボーンキットなのでコンパクトなのがいい。
個人的にはCPUはAMD派ですが、2022年8月上旬ではintelが安くてちょうどいいかんじでした。
家庭用なので消耗とか気になりますが、4年ぐらいは耐えてくれてると信じたい。
OSソフトウェア構成
OS ubuntu 22.04
DB mysql8.0.30
ubuntu以外も候補はありますが、構築経験があるのでこちらかなと。
mysqlインストール手順
*注意事項
手順の前にsshとかOS周りの設定は一通りしております。今回の手順はmysqlインストールに特化したものとご了承ください。
mysql-serverのインストール
$sudo apt install mysql-server
mysqlにログインする。
$sudo mysql
#ユーザー確認mysql >select user,host from mysql.user;
インストールしているときに、すでにrootユーザーは作られているので、以下のコマンドでパスワードを改変する。hogeの部分は任意なパスワードに変える。
一応権限の確認は以下で確認できるmysql > USE mysql;
mysql >ALTER USER 'root'@'localhost' identified BY 'hoge';
mysql > show grants for 'root'@'localhost';
後々構築した後に気づいた点で、localhostになっているので、リモート時にはrootユーザーに入れないことがあった。
やっぱりここはrootユーザーのhost=%を作るに限る。(セキュアな面ではもうちょっとhost部分は制限したほうがいいかも)
mysql > CREATE USER 'root'@'%' IDENTIFIED BY 'hoge';
mysql > GRANT ALL ON *.* TO 'root'@'%';
これでリモート上でもrootで入れる。
文字のエンコードはutf-8に設定したかったので、my.cnfを以下のようにいじる。参考にしたURL↓
https://qiita.com/is0me/items/12629e3602ebb27c26a4
まずはmy.cnfの場所の特定。どうやら/etc/my.cnfが先で、次に/etc/mysql/my.cnfの順番で読み込まれるようだ。
mysql --help | grep my.cnf
#以下結果
order of preference,my.cnf, $MYSQL_TCP_PORT,/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
/etc/mysql/my.cnfの中身を見ると以下のような記載がありました。
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
/etc/mysql/conf.d/のディレクトリに入れると反映されるのでは?ということで、ここにmy.cnfを設置してみる。
保存するその前に、一旦、サーバー上でmysqlが止まっているか確認する。
mysqlが止まっているか以下でわかる。(すでに稼働している場合は周りに影響しないか注意してください。)
$sudo service mysql stop
#以下の内容を入れて/etc/mysql/conf.d/my.cnfに保存する。[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
#更新したら以下でリスタートする。
service mysql restart
あとは、リモート上でも接続できるようにサーバー上でリッスンを設定する。今回は、mysqlのポート3306をリッスンさせる。
mysqlインストール時にすでにポートはリッスンしているので、bind-addressとmysqlx-bind-addressのアドレスを変更するようです。
/etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
更新したら以下でリスタートする。
service mysql restart
そうすると、自動的に全てのアドレスから全てのアドレス:3306でリッスンできる。
sudo ss -talpnただ、この設定は少し強引すぎる。
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 151 *:3306 *:* users:(("mysqld",pid=3822,fd=23))
社内サーバー用とかで事前に外部からのアクセスを制限できているなど限定した場面で活用するのが望ましい。というか一応ufwも確認する。
sudo ufw allow 22 #ssh
sudo ufw allow 3306 #mysql
sudo ufw enable
sudo ufw status numbered
To Action From -- ------ ----
[ 1] 22 ALLOW IN Anywhere
[ 2] 3306 ALLOW IN Anywhere
[ 3] 22 (v6) ALLOW IN Anywhere (v6)
[ 4] 3306 (v6) ALLOW IN Anywhere (v6)
これでmysqlとsshのみ通るようにポートは開けることが確認できた。
ここまでで一通りのmysqlサーバの完成となる。実際に自身のPC上で確認してみてください。
以下のコマンドで入れたら成功です。
(もちろんローカル上にもmysqlは入れてるよね?)
mysql -h XXXX.example.co.jp -u root -p
パスワードを入力:hoge
できましたかね?これであなたもmysqlサーバー構築者だ、おめでとう!
できない人は個別のトラブルシューティングに従って解決してください。
結構最低構成でできたはずなので、時間はかからないのかなと思っています。
みなさん試してみてください。