「ポートを変更したあと、本当に変わったかどうかをどうやって確認すればいい?」
MariaDBはデフォルトで3306番ポートを使います。複数のDBインスタンスを1台のサーバーで動かすとき、セキュリティポリシーでウェルノウンポートを避けるとき、あるいは既存アプリケーションとの競合を回避するときに、ポート番号を変更する必要が出てきます。
この記事では、my.cnf の設定変更からMariaDBの再起動、ss・netstat コマンドによる変更後の確認、firewalld でのポート開放、クライアント接続テストまでを一連の手順で解説します。
RHEL 9.4 / Rocky Linux 9.4 / Ubuntu 24.04 LTS で動作確認済みです。
この記事のポイント
・[port = 番号] を my.cnf の [mysqld] セクションに1行追加するだけで変更できる
・変更後は ss -tlnp または netstat -tlnp で新ポートのLISTENを確認する
・firewalld 環境では新ポートをサービスに追加しないと接続できない
・クライアント接続は mysql -P 番号 または .my.cnf の port= で指定する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜポート番号を変える必要があるのか
MariaDBのデフォルトポート 3306 は広く知られているため、外部に公開するサーバーでは自動化されたスキャンの対象になりやすいという事情があります。また、同一ホストで MariaDB 10 系と MariaDB 11 系を並列稼働させる場合、片方を別ポート(例: 3307)に変更しないと起動できません。ただしポート変更はセキュリティ対策の一つにはなりますが、それだけで攻撃を防ぐわけではありません。root 直接ログイン禁止・bind-address による接続元制限・強固なパスワード設定と組み合わせて使うのが現場の鉄則です。
設定ファイルの場所と [mysqld] セクション
MariaDB のポート設定はmy.cnf(または my.cnf.d/ 配下のファイル)で管理します。ディストリビューション別の主要パスは次のとおりです。| ディストリビューション | 主な設定ファイルパス |
|---|---|
| RHEL 9 / Rocky Linux 9 | /etc/my.cnf.d/mariadb-server.cnf |
| Ubuntu 24.04 LTS | /etc/mysql/mariadb.conf.d/50-server.cnf |
| 共通(追記推奨) | /etc/my.cnf または /etc/my.cnf.d/custom.cnf |
/etc/my.cnf は複数のファイルを include する形になっているため、RHEL/Rocky では /etc/my.cnf.d/ 配下に独自ファイルを置いて管理する方法がオペミスを防ぎやすくおすすめです。ポート番号を変更する手順
1. 現在のポート番号を確認する
変更前に現在の状態を把握しておきましょう。MariaDB が起動中であれば次のコマンドで確認できます。# MariaDB クライアントで現在のポートを確認 mysql -u root -p -e "SHOW VARIABLES LIKE 'port';"
+---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 3306 | +---------------+-------+
2. my.cnf を編集して port を変更する
[mysqld] セクション内に port = 番号 を追記します。ここでは 3307 に変更する例を示します。RHEL 9 / Rocky Linux 9 の場合:
# /etc/my.cnf.d/mariadb-server.cnf を編集 vi /etc/my.cnf.d/mariadb-server.cnf
[mysqld] # 追記: デフォルトの 3306 を 3307 に変更 port = 3307 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock
# /etc/mysql/mariadb.conf.d/50-server.cnf を編集 vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld] port = 3307
port = は必ず [mysqld] セクション内に書いてください。[client] セクションのみに書いてもサーバーのリッスンポートは変わりません。3. MariaDB を再起動する
# systemd 環境での再起動 systemctl restart mariadb # 起動状態の確認 systemctl status mariadb
* mariadb.service - MariaDB 10.11 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled) Active: active (running) since Tue 2026-10-14 09:15:32 JST; 3s ago
4. ss・netstat コマンドで新しいポートを確認する
MariaDB が新しいポートで LISTEN しているかを確認します。現在の現場ではss コマンドが主流です(netstat は net-tools パッケージが必要で、新しいディストリビューションでは未インストールの場合があります)。# ss コマンドで確認(推奨) ss -tlnp | grep 3307 # netstat コマンドで確認(net-tools インストール済みの場合) netstat -tlnp | grep 3307
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 80 0.0.0.0:3307 0.0.0.0:* users:(("mariadbd",pid=12847,fd=21))
0.0.0.0:3307 で LISTEN になっていれば成功です。ss・netstat を使ったポート確認の全コマンドオプションは Linux ポート確認の全コマンドにまとめています。firewalld でカスタムポートを開放する
RHEL 9 / Rocky Linux 9 では firewalld がデフォルトで有効です。新しいポートを許可しないとクライアントから接続できません。# 3307/tcp を永続的に許可 firewall-cmd --permanent --add-port=3307/tcp # 設定を反映 firewall-cmd --reload # 確認 firewall-cmd --list-ports
3307/tcp
ufw allow 3307/tcp ufw status
bind-address = 127.0.0.1(または skip-networking)が設定されていれば外部からポートには到達しません。MySQLクライアントから新しいポートに接続する
ポートを変更した MariaDB への接続には-P オプション(大文字 P)でポート番号を指定します。# ローカル接続でポート指定 mysql -u root -p -P 3307 -h 127.0.0.1 # リモートサーバーへの接続 mysql -u dbuser -p -P 3307 -h 192.0.2.10
-h 127.0.0.1 を必ず一緒に指定してください。-h を省略すると mysql クライアントは TCP ではなくソケットファイル(/var/lib/mysql/mysql.sock)経由で接続しようとするため、-P オプションが無視される動作になります。毎回
-P 3307 を打つのが面倒な場合は、クライアント用の設定ファイル(~/.my.cnf)に記述しておくと便利です。# ~/.my.cnf に追記 [client] port = 3307 host = 127.0.0.1
mysql -u root -p -P 3307 -h 127.0.0.1 -e "SHOW VARIABLES LIKE 'port';"
+---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 3307 | +---------------+-------+
SELinux 環境での追加対応
RHEL 9 / Rocky Linux 9 では SELinux がデフォルトで Enforcing です。3306 以外のポートで MariaDB を起動しようとすると SELinux が接続を拒否し、MariaDB が起動に失敗することがあります。# 現在の mysqld_port_t ラベルの一覧を確認 semanage port -l | grep mysqld # 3307 を mysqld_port_t に追加 semanage port -a -t mysqld_port_t -p tcp 3307 # 追加後に確認 semanage port -l | grep mysqld
mysqld_port_t tcp 3307, 3306, 63132-63164
semanage コマンドは policycoreutils-python-utils パッケージに含まれています。インストールされていない場合は先に dnf install policycoreutils-python-utils を実行してください。トラブルシュート
MariaDB が起動しない(ポート変更後)
systemctl status mariadb を確認し、エラーメッセージを特定します。| エラー・症状 | 原因 | 対処 |
|---|---|---|
| Permission denied(SELinux) | 新ポートが mysqld_port_t に登録されていない | semanage port -a -t mysqld_port_t -p tcp 番号 |
| Address already in use | 同じポートを別プロセスが使用中 | ss -tlnp | grep 番号 でプロセスを特定して解放 |
| Unknown option 'port' | [mysqld] セクション外に port= を書いた | 設定ファイルの [mysqld] セクション内に移動する |
「Can't connect to MySQL server」でクライアントが繋がらない
| チェック項目 | 確認コマンド |
|---|---|
| MariaDB が新ポートで LISTEN しているか | ss -tlnp | grep 番号 |
| firewalld でポートが開いているか | firewall-cmd --list-ports |
| 接続時に -h を省略していないか | mysql ... -P 番号 -h 127.0.0.1 の形で試す |
| bind-address が 127.0.0.1 に制限されていないか | grep bind-address /etc/my.cnf.d/*.cnf |
まとめ
MariaDB のポート変更は手順自体は単純ですが、「設定ファイル変更 → 再起動 → ポート確認 → firewalld 開放 → SELinux 対応」の順番を飛ばすと原因がわかりにくいトラブルに発展します。変更後は必ず ss コマンドで LISTEN ポートを確認してから、クライアント接続テストに進む習慣をつけましょう。| やりたいこと | コマンド・設定 |
|---|---|
| ポート番号を変更する | my.cnf の [mysqld] に port = 番号 を追記 |
| 変更を反映する | systemctl restart mariadb |
| 新ポートの LISTEN を確認する | ss -tlnp | grep 番号 |
| firewalld でポートを開放する | firewall-cmd --permanent --add-port=番号/tcp && firewall-cmd --reload |
| SELinux にポートを登録する | semanage port -a -t mysqld_port_t -p tcp 番号 |
| 新ポートでクライアント接続する | mysql -u root -p -P 番号 -h 127.0.0.1 |
| 現在のポートを MariaDB 側で確認する | SHOW VARIABLES LIKE 'port'; |
Linuxサーバー上でのデータベース運用をもっと体系的に身につけたいなら、Linux Master Pro Seminar でハンズオン形式で学ぶ方法もあります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
Linux Master Pro Seminar では、MariaDB・MySQL をはじめとするサーバー運用の実務スキルを2日間のハンズオンで習得できます。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:MariaDBテーブル一覧から不要テーブルを特定し安全に削除する手順|DROP前の依存確認
- この記事の属するカテゴリ:データーベース管理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます