Mysqlにリモートから外部アクセスした件

環境

・Cent OS 7 ・Mysql Ver 14.14 Distrib 5.7.20

外部アクセス

Mysqlにリモートからアクセスする必要があって、設定してくとたくさんエラーでてきたわーいww

エラー

まずリモートからアクセスするために/etc/my.cnfにbind-address=remote-IPしてやればいいんだろ?とmy.cnfにIPを追加

my.cnfをさわる


# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

bind-address = IP

再起動!


$ sudo systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: deactivating (final-sigterm) (Result: exit-code) since 木 2017-11-09 12:41:13 JST; 1min 57s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 19349 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=1/FAILURE)
Process: 19332 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 16770 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/mysqld.service
└─19353 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

久しぶり!またあったね!FaOk!!

原因がわかんない

/var/log/mysql見てもエラーは出てるんだけどおそらくそう言うエラーじゃないだろうと判断 my.cnfからbindの行をコメントしたらsystemctlで普通に起動するんだよ んで、調べて行くとmysqlの設定じゃねえのか?となる ということでさっきのbindの行は削除

mysql側の設定

とりあえずrootでログイン そして外部からアクセスする用のユーザを作成して権限を与える


mysql> grant all privileges on DBNAME.* to avalon@"10.0.0.0" identified by '*******' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

権限の与え方とかはgrant文で

そして確認してみる


mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| avalon | 10.0.0.0 |
| avalon | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+

おるやん そして一度mysqldを再起動してアクセスを試みる


ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.2.0' (113)

バーローがぁぁぁ!!

最終的な解決

なんでだチキショー!! って思っていたら ん?待てよ...俺firewall設定したか?初歩の初歩だぞ...


$ firewall-cmd --list-all

なかった...サービスのとこにmysqlが...バカだ俺は...


$ firewall-cmd --add-service=mysql --zone=public --premanent
$ firewall-cmd --reload

アクセスを試みる

いけた!! firewallの設定で詰まるとか...ナンセンスかよ

Mysqlへ外部アクセスする際の手順

  1. mysql側で外部アクセス用のユーザを作成して権限を付与する
  2. firewallの設定をする
  3. 3306のポートが開いていて、プロセスがいるか確かめる

たった3ステップ!!!!それに詰まった俺...

yodan

更新がものすごく遅くなってたんだけど、それにはちゃんと理由がある!
最近、Markdown式のメモサーバを自宅に立てて備忘録は基本そっちでやってた!   だって、htmlで書くよりMarkdownの方が早いじゃんね( =A= )
だけど、はてなMarkdownできるんかい!!ってことでこれからどんどん移植すると思う!