2.

MySQLの起動、停止、再起動(CentOS, Ubuntu)

編集
この記事の要点
  • Linux で MySQL を起動・停止・再起動する方法
  • systemd: sudo systemctl start/stop/restart mysql
  • service コマンド: sudo service mysql start
  • 直接バイナリ: mysqld_safe --user=mysql &
  • 状態確認: systemctl status mysql / mysqladmin -uroot -p ping

 

systemd を使う方法(CentOS 7+ / Ubuntu 16.04+ / 標準)

# 起動
$ sudo systemctl start mysql
# または
$ sudo systemctl start mysqld     # CentOS / RHEL の MySQL 公式パッケージ
$ sudo systemctl start mariadb    # MariaDB

# 停止
$ sudo systemctl stop mysql

# 再起動
$ sudo systemctl restart mysql

# リロード(設定だけ再読み込み、可能なら)
$ sudo systemctl reload mysql

# 自動起動の有効化(OS 起動時に自動で起動)
$ sudo systemctl enable mysql

# 自動起動の無効化
$ sudo systemctl disable mysql

# 状態確認
$ sudo systemctl status mysql
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled)
   Active: active (running) since ...
 Main PID: 1234 (mysqld)
    Tasks: 38
   Memory: 350.2M
   CGroup: /system.slice/mysql.service
           └─1234 /usr/sbin/mysqld --daemonize ...

service コマンド(古い CentOS 6 / 互換層)

# CentOS 6 / 互換層
$ sudo service mysqld start
$ sudo service mysqld stop
$ sudo service mysqld restart
$ sudo service mysqld status

# Ubuntu の場合
$ sudo service mysql start

古い init スクリプト(さらに古い環境)

$ sudo /etc/init.d/mysql start
$ sudo /etc/init.d/mysql stop
$ sudo /etc/init.d/mysql restart

mysqld_safe で直接起動

# 直接起動 (root として)
$ sudo mysqld_safe --user=mysql &

# 設定ファイル指定
$ sudo mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &

# シングルユーザモード(パスワードリセット用)
$ sudo mysqld_safe --skip-grant-tables --skip-networking &

停止の代替方法(mysqladmin)

# クライアントから停止コマンド
$ mysqladmin -u root -p shutdown
Enter password: ****

# 動作確認 (ping)
$ mysqladmin -u root -p ping
mysqld is alive

強制停止(kill)

サービス停止が効かない場合の最終手段:

# プロセス ID 確認
$ pgrep -f mysqld
1234
2345  # mysqld_safe の子プロセスもある

# 安全に停止 (SIGTERM)
$ sudo kill 1234

# 効かない場合 (SIGKILL = 強制)
$ sudo kill -9 1234

# 注意: SIGKILL は DB 破損リスクあり、最後の手段

状態・接続確認

① systemd status

$ sudo systemctl status mysql

# ログを直近 50 行
$ sudo journalctl -u mysql -n 50

# リアルタイム監視
$ sudo journalctl -u mysql -f

② プロセスとポート

# プロセス確認
$ ps aux | grep mysql

# ポート確認 (デフォルト 3306)
$ ss -tnlp | grep 3306
LISTEN 0  151  127.0.0.1:3306  0.0.0.0:*  users:(("mysqld",pid=1234,fd=21))

# ファイルディスクリプタ
$ sudo lsof -i :3306

③ クライアントから接続テスト

# 接続できれば起動中
$ mysql -u root -p -e "SELECT VERSION();"
+-------------------------+
| VERSION()               |
+-------------------------+
| 8.0.32-0ubuntu0.22.04.2 |
+-------------------------+

# ping (接続確認のみ)
$ mysqladmin -u root -p ping
mysqld is alive

# 接続数・スレッド
$ mysqladmin -u root -p status

起動しない場合のトラブルシュート

  1. ログを確認: /var/log/mysql/error.log / journalctl -u mysql
  2. 権限: /var/lib/mysql 配下が mysql:mysql 所有か
  3. ポート競合: 3306 が他プロセス使用中
  4. ディスク容量: df -h でフル?
  5. my.cnf: 構文エラー(mysqld --validate-config
  6. SELinux: sudo setenforce 0 で一時的に試す
  7. tmpfs: /tmp が足りない

my.cnf の場所

# 標準の検索順
$ mysql --help | grep -A 2 "Default options"
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

# 実際に使われている設定ファイル
$ mysqld --verbose --help | grep -A 1 "Default options"

Docker で起動する場合

# 起動
$ docker run -d --name mysql8 \
    -e MYSQL_ROOT_PASSWORD=secret \
    -e MYSQL_DATABASE=mydb \
    -p 3306:3306 \
    -v mysql-data:/var/lib/mysql \
    mysql:8.0

# 状態確認
$ docker ps
$ docker logs mysql8

# 停止・再起動
$ docker stop mysql8
$ docker start mysql8
$ docker restart mysql8

# 接続
$ docker exec -it mysql8 mysql -uroot -p

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. MySQLの起動(Windows)
  2. MySQLの起動、停止、再起動(Linux)
  3. MYSQL への接続
  4. データベース一覧の表示
  5. データベースへの接続
  6. テーブル一覧を表示
  7. テーブル定義を確認
  8. ユーザーおよびパスワード一覧の確認