MySQL 提供 4 種啟動方式,適用場景截然不同。搞清原理與優劣,才能根據架構需求做正確選型。
# 前台運行(調試用) ./mysqld --defaults-file=/etc/my.cnf --user=root # 後台運行(需自行 nohup 或 systemd 托管) ./mysqld --defaults-file=/etc/my.cnf --user=root &
./mysqld_safe --defaults-file=/etc/my.cnf --user=root &
--basedir、--datadir 等路徑# 安裝為系統服務
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig --add mysql # 或 systemctl enable mysql
# 服務管理命令
service mysql {start|stop|restart|reload|force-reload|status}
# 或
systemctl {start|stop|restart|status} mysql
mysqld_safe 的 SysV Init 腳本,支援標準服務管理[mysqld_multi] mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin user = mysqladmin password = mysqladmin [mysqld3306] port = 3306 socket = /tmp/mysql3306.sock pid-file = /tmp/mysql3306.pid datadir = /usr/local/mysql/data basedir = /usr/local/mysql # ... 其他參數 [mysqld3307] port = 3307 socket = /tmp/mysql3307.sock pid-file = /tmp/mysql3307.pid datadir = /usr/local/mysql/data2 basedir = /usr/local/mysql # ... 其他參數
GRANT SHUTDOWN ON *.* TO 'mysqladmin'@'localhost' IDENTIFIED BY 'mysqladmin' WITH GRANT OPTION;
# 啟動指定實例或範圍 ./mysqld_multi --defaults-file=/etc/my.cnf start 3306 ./mysqld_multi --defaults-file=/etc/my.cnf start 3306-3307 # 停止 ./mysqld_multi --defaults-file=/etc/my.cnf stop 3306 # 查看狀態 ./mysqld_multi --defaults-file=/etc/my.cnf report
| 場景 | 推薦方式 | 核心理由 |
|---|---|---|
| 生產單實例 | mysql.server (Systemd) | 納入服務管理、開機自啟、標準運維 |
| 容器化部署 | mysqld / mysqld_safe | 前台運行、信號傳遞正確、Docker ENTRYPOINT 友好 |
| 單機多實例 | mysqld_multi | 配置集中、實例隔離、批量管理 |
| 臨時調試/測試 | mysqld | 無封裝、直接看控制台輸出 |
**生產單實例用 mysql.server(Systemd),多實例用 mysqld_multi,容器用 mysqld_safe 前台運行**。選對方式,運維效率提升一個檔次。