Ubuntu 20.04 LTS で MySQL サーバーをローカルホストにのみバインドするにはどうすればよいですか?

Ubuntu 20.04 LTS で MySQL サーバーをローカルホストにのみバインドするにはどうすればよいですか?

デフォルトの MySQL インストールを備えた Ubuntu 20.04.3 LTS で、apt パッケージ管理バージョンの MySQL サーバーを使用します。

netstatMySQL サーバーがパブリック IPv6 インターフェイスにバインドされていることを示します。

tcp6       0      0 :::33060                :::*                    LISTEN      2485/mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      2485/mysqld

ただし、次/etc/mysql/mysql.conf.d/mysqld.cnfのように表示されます (簡潔にするためコメント行は削除されています)。

[mysqld]
user            = mysql

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1
mysqlx-bind-address     = 127.0.0.1

MySQL などの承認されていないポートへの外部アクセスを拒否する iptables とアップストリーム ファイアウォール ルールを設定していますが、構成ファイルに従って MySQL 自体がシステム上の正しいインターフェイスにバインドされることを希望します。

今年 20.04.3 にアップグレードされた別のシステムでは、構成ファイルは実質的に同一であり、次のnetstatように表示されます。

tcp        0      0 127.0.0.1:33060         0.0.0.0:*               LISTEN      1349/mysqld
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1349/mysqld

答え1

権限を/etc/mysql.cnf0644 に変更することで解決しました。MySQL サーバーは、そのファイルがワールド書き込み可能/実行可能としてマークされていることを好まないようです。0777 としてマークされていましたが、私は絶対にそうしませんでした。apt パッケージからその方法でシステムにインストールされましたmysql-server

これはおそらく、現在(2021 年 12 月現在)Ubuntu Server 20.04.3 LTS システムが多数存在し、apt 経由で MySQL をインストールし、誤ってポート 3306 を世界に公開していることを意味します。デフォルトではルート パスワードがないため、MySQL がリモート システムからすぐに侵害される可能性があることも意味します。

関連情報