MariaDB portをカスタム番号に切り替える方法|ss・netstatで確認まで

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Linuxtips > データーベース管理 > MariaDB portをカスタム番号に切り替える方法|ss・netstatで確認まで
「MariaDBのポート番号を3306から変えたいけど、設定ファイルのどこを直せばいいのかわからない」
「ポートを変更したあと、本当に変わったかどうかをどうやって確認すればいい?」

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= で指定する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

なぜポート番号を変える必要があるのか

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

Ubuntu 24.04 LTS の場合:

# /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

実行例(ss の出力):

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

Ubuntu / Debian 環境で ufw を使っている場合は次のとおりです。

ufw allow 3307/tcp ufw status

注意: MariaDB をローカル接続のみ(localhost / 127.0.0.1)に制限している場合は、firewalld の変更は不要です。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日間のハンズオンで習得できます。

>> セミナー詳細・お申し込みはこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。