MySQL 8.0 systemd 服務(wù)配置指南
服務(wù)創(chuàng)建概述
systemd 是現(xiàn)代 Linux 系統(tǒng)的初始化系統(tǒng)和服務(wù)管理器,用于控制服務(wù)的啟動(dòng)、停止和管理。為 MySQL 創(chuàng)建 systemd 服務(wù)可以實(shí)現(xiàn):
? 自動(dòng)啟動(dòng)和停止
? 服務(wù)狀態(tài)監(jiān)控
? 開機(jī)自啟
? 日志統(tǒng)一管理
? 資源限制控制
服務(wù)配置文件詳解
創(chuàng)建 /etc/systemd/system/mysql.service:
[Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=https://dev.mysql.com/doc/refman/8.0/en/using-systemd.html After=network.target After=syslog.target RequiresMountsFor=/data1/mysql/data [Install] WantedBy=multi-user.target [Service] # 服務(wù)基本信息 Type=notify User=mysql Group=mysql # 環(huán)境變量 Environment="MYSQLD_OPTS=--defaults-file=/data1/mysql/my.cnf" EnvironmentFile=-/etc/sysconfig/mysql # 可執(zhí)行文件路徑 ExecStart=/data1/mysql/bin/mysqld $MYSQLD_OPTS ExecStartPre=/data1/mysql/bin/mysqld_pre_systemd ExecStop=/data1/mysql/bin/mysqladmin shutdown # PID 管理 PIDFile=/data1/mysql/data/mysql.pid # 資源限制 LimitNOFILE=65535 LimitNPROC=65535 LimitCORE=infinity TimeoutSec=300 # 重啟策略 Restart=on-failure RestartPreventExitStatus=1 RestartSec=5 StartLimitBurst=3 StartLimitIntervalSec=60 # 安全設(shè)置 NoNewPrivileges=true PrivateTmp=true ProtectHome=true ProtectSystem=strict ReadWritePaths=/data1/mysql/data /var/log/mysql ReadOnlyPaths=/etc InaccessiblePaths=/boot /root # 日志配置 StandardOutput=journal StandardError=journal SyslogIdentifier=mysql
安裝與配置步驟
3.1 創(chuàng)建必要的輔助腳本
ExecStartPre 腳本? /data1/mysql/bin/mysqld_pre_systemd:
#!/bin/bash
# MySQL systemd 服務(wù)預(yù)啟動(dòng)腳本
set -e
# 檢查目錄權(quán)限
if [ ! -d "/data1/mysql/data" ]; then
echo "創(chuàng)建數(shù)據(jù)目錄..."
mkdir -p /data1/mysql/data
chown -R mysql:mysql /data1/mysql
fi
# 檢查配置文件
if [ ! -f "/data1/mysql/my.cnf" ]; then
echo "錯(cuò)誤: MySQL 配置文件不存在: /data1/mysql/my.cnf"
exit 1
fi
# 檢查 socket 文件權(quán)限
if [ -S "/tmp/mysql.sock" ]; then
echo "清理舊的 socket 文件..."
rm -f /tmp/mysql.sock
fi
# 檢查是否已初始化
if [ ! -f "/data1/mysql/data/mysql/user.frm" ] && \
[ ! -f "/data1/mysql/data/mysql.ibd" ]; then
echo "警告: MySQL 數(shù)據(jù)目錄為空,如需初始化請(qǐng)執(zhí)行:"
echo "sudo -u mysql /data1/mysql/bin/mysqld --defaults-file=/data1/mysql/my.cnf --initialize-insecure"
fi
exit 0
設(shè)置執(zhí)行權(quán)限:
chmod +x /data1/mysql/bin/mysqld_pre_systemd chown mysql:mysql /data1/mysql/bin/mysqld_pre_systemd
3.2 創(chuàng)建環(huán)境配置文件
可選配置? /etc/sysconfig/mysql:
# MySQL 系統(tǒng)環(huán)境配置 # 可以通過此文件設(shè)置額外的 mysqld 參數(shù) # 字符集設(shè)置 export LANG=en_US.UTF-8 # 性能優(yōu)化參數(shù) # MYSQLD_OPTS="$MYSQLD_OPTS --innodb_buffer_pool_size=2G" # 調(diào)試參數(shù) # MYSQLD_OPTS="$MYSQLD_OPTS --log-error-verbosity=3"
3.3 目錄結(jié)構(gòu)與權(quán)限設(shè)置
# 創(chuàng)建必要的目錄 sudo mkdir -p /var/log/mysql sudo mkdir -p /var/run/mysql # 設(shè)置正確的權(quán)限 sudo chown -R mysql:mysql /data1/mysql sudo chown -R mysql:mysql /var/log/mysql sudo chown -R mysql:mysql /var/run/mysql # 設(shè)置目錄權(quán)限 sudo chmod 750 /data1/mysql/data sudo chmod 755 /data1/mysql/bin
服務(wù)管理命令
4.1 基本服務(wù)操作
# 重新加載 systemd 配置 sudo systemctl daemon-reload # 啟用開機(jī)自啟 sudo systemctl enable mysql # 啟動(dòng) MySQL 服務(wù) sudo systemctl start mysql # 查看服務(wù)狀態(tài) sudo systemctl status mysql # 停止服務(wù) sudo systemctl stop mysql # 重啟服務(wù) sudo systemctl restart mysql # 重新加載配置(不重啟) sudo systemctl reload mysql # 查看服務(wù)日志 sudo journalctl -u mysql sudo journalctl -u mysql -f # 實(shí)時(shí)跟蹤日志
4.2 高級(jí)狀態(tài)檢查
# 檢查服務(wù)是否活躍 sudo systemctl is-active mysql # 檢查是否啟用開機(jī)自啟 sudo systemctl is-enabled mysql # 檢查服務(wù)啟動(dòng)失敗詳情 sudo systemctl status mysql -l # 查看完整的服務(wù)信息 sudo systemctl show mysql
4.3 日志管理命令
# 查看最近 100 行日志 sudo journalctl -u mysql -n 100 # 查看特定時(shí)間段的日志 sudo journalctl -u mysql --since "2026-02-10 10:00:00" --until "2026-02-10 12:00:00" # 查看錯(cuò)誤級(jí)別的日志 sudo journalctl -u mysql -p err # 導(dǎo)出日志到文件 sudo journalctl -u mysql --since today > /tmp/mysql-today.log
高級(jí)配置選項(xiàng)
5.1 資源限制配置
在服務(wù)文件的 [Service]部分添加資源限制:
# CPU 和內(nèi)存限制 CPUQuota=200% MemoryLimit=4G MemorySwapMax=2G # I/O 限制 IOWeight=default CPUShares=1024 # 進(jìn)程限制 TasksMax=infinity
5.2 多實(shí)例配置
如果有多個(gè) MySQL 實(shí)例,可以創(chuàng)建模板服務(wù):
創(chuàng)建模板文件? /etc/systemd/system/mysql@.service:
[Unit] Description=MySQL Server Instance %i After=network.target [Service] Type=notify User=mysql Group=mysql ExecStart=/data1/mysql/bin/mysqld --defaults-file=/data1/mysql/my-%i.cnf PIDFile=/data1/mysql/data-%i/mysql.pid Restart=on-failure [Install] WantedBy=multi-user.target
啟動(dòng)不同實(shí)例:
sudo systemctl start mysql@3306 sudo systemctl start mysql@3307
5.3 自定義啟動(dòng)腳本
創(chuàng)建啟動(dòng)腳本? /usr/local/bin/mysql-wrapper:
#!/bin/bash
# MySQL 啟動(dòng)包裝腳本
set -e
CONFIG_FILE="/data1/mysql/my.cnf"
MYSQLD="/data1/mysql/bin/mysqld"
MYSQLADMIN="/data1/mysql/bin/mysqladmin"
# 加載自定義配置
if [ -f "/etc/sysconfig/mysql-extra" ]; then
. /etc/sysconfig/mysql-extra
fi
# 檢查配置文件
if [ ! -f "$CONFIG_FILE" ]; then
echo "錯(cuò)誤: 配置文件不存在: $CONFIG_FILE" >&2
exit 1
fi
# 執(zhí)行 MySQL
exec "$MYSQLD" --defaults-file="$CONFIG_FILE" "$@"
故障排除
6.1 常見問題解決
問題1:服務(wù)啟動(dòng)失敗
# 查看詳細(xì)錯(cuò)誤信息 sudo systemctl status mysql sudo journalctl -xe # 手動(dòng)測(cè)試啟動(dòng) sudo -u mysql /data1/mysql/bin/mysqld --defaults-file=/data1/mysql/my.cnf --console
問題2:權(quán)限錯(cuò)誤
# 檢查文件所有權(quán) sudo ls -la /data1/mysql/ # 修復(fù)權(quán)限 sudo chown -R mysql:mysql /data1/mysql sudo chmod 750 /data1/mysql/data
問題3:端口沖突
# 檢查端口占用 sudo netstat -tlnp | grep 3306 sudo ss -tlnp | grep 3306 # 殺死占用進(jìn)程 sudo fuser -k 3306/tcp
6.2 診斷命令
# 檢查 systemd 配置 sudo systemd-analyze verify /etc/systemd/system/mysql.service # 檢查依賴關(guān)系 sudo systemctl list-dependencies mysql # 檢查啟動(dòng)時(shí)間 sudo systemd-analyze critical-chain mysql # 檢查服務(wù)啟動(dòng)日志 sudo journalctl -u mysql -o cat | head -50
6.3 恢復(fù)默認(rèn)配置
# 停止服務(wù) sudo systemctl stop mysql # 禁用服務(wù) sudo systemctl disable mysql # 刪除服務(wù)文件 sudo rm /etc/systemd/system/mysql.service # 重新加載 systemd sudo systemctl daemon-reload sudo systemctl reset-failed
安全最佳實(shí)踐
7.1 最小權(quán)限原則
# 創(chuàng)建專用用戶和組 sudo groupadd -r mysql sudo useradd -r -g mysql -s /bin/false -d /data1/mysql mysql # 設(shè)置目錄權(quán)限 sudo chmod 750 /data1/mysql sudo chmod 700 /data1/mysql/data sudo chmod 600 /data1/mysql/my.cnf
7.2 SELinux/AppArmor 配置
SELinux 策略:
# 檢查 SELinux 狀態(tài) sudo sestatus # 設(shè)置 MySQL 目錄上下文 sudo semanage fcontext -a -t mysqld_db_t "/data1/mysql(/.*)?" sudo restorecon -Rv /data1/mysql # 創(chuàng)建自定義 SELinux 模塊(如果需要) AppArmor 配置(Ubuntu/Debian): bash 復(fù)制 # 創(chuàng)建 AppArmor 配置文件 sudo vim /etc/apparmor.d/usr.sbin.mysqld # 重新加載配置 sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
7.3 防火墻配置
# 開放 MySQL 端口 sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload # 或使用 firewalld 服務(wù) sudo firewall-cmd --permanent --add-service=mysql sudo firewall-cmd --reload
7.4 監(jiān)控和告警
創(chuàng)建監(jiān)控腳本? /usr/local/bin/mysql-monitor.sh:
#!/bin/bash
# MySQL 服務(wù)監(jiān)控腳本
SERVICE="mysql"
MAX_RESTARTS=3
RESTART_COUNT_FILE="/var/run/mysql-restart-count"
# 檢查服務(wù)狀態(tài)
if ! systemctl is-active --quiet $SERVICE; then
echo "$(date): MySQL 服務(wù)停止,嘗試重啟..." >> /var/log/mysql-monitor.log
# 記錄重啟次數(shù)
if [ -f "$RESTART_COUNT_FILE" ]; then
COUNT=$(cat $RESTART_COUNT_FILE)
else
COUNT=0
fi
if [ $COUNT -lt $MAX_RESTARTS ]; then
systemctl restart $SERVICE
echo $((COUNT + 1)) > $RESTART_COUNT_FILE
else
echo "$(date): 警告: MySQL 重啟次數(shù)超過 $MAX_RESTARTS 次" >> /var/log/mysql-monitor.log
# 發(fā)送告警
# mail -s "MySQL 服務(wù)異常" admin@example.com
fi
else
# 重置重啟計(jì)數(shù)
echo 0 > $RESTART_COUNT_FILE
fi
添加到 cron:
# 每分鐘檢查一次 echo "* * * * * root /usr/local/bin/mysql-monitor.sh" | sudo tee /etc/cron.d/mysql-monitor
?? 配置文件完整示例
最終服務(wù)文件? /etc/systemd/system/mysql.service:
[Unit] Description=MySQL 8.0 Database Server Documentation=https://dev.mysql.com/doc/refman/8.0/en/ After=network.target After=syslog.target Wants=network.target [Service] Type=notify User=mysql Group=mysql ExecStart=/data1/mysql/bin/mysqld --defaults-file=/data1/mysql/my.cnf ExecStartPre=/data1/mysql/bin/mysqld_pre_systemd ExecStop=/data1/mysql/bin/mysqladmin -u root -p shutdown LimitNOFILE=65535 Restart=on-failure RestartPreventExitStatus=1 RestartSec=5 TimeoutSec=300 PrivateTmp=true [Install] WantedBy=multi-user.target
?? 快速部署腳本
創(chuàng)建一鍵部署腳本 /tmp/deploy-mysql-service.sh:
#!/bin/bash
# MySQL systemd 服務(wù)一鍵部署腳本
set -e
echo "=== MySQL systemd 服務(wù)部署開始 ==="
# 1. 檢查權(quán)限
if [ "$EUID" -ne 0 ]; then
echo "請(qǐng)使用 root 用戶運(yùn)行此腳本"
exit 1
fi
# 2. 創(chuàng)建 systemd 服務(wù)文件
cat > /etc/systemd/system/mysql.service << 'EOF'
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=notify
User=mysql
Group=mysql
ExecStart=/data1/mysql/bin/mysqld --defaults-file=/data1/mysql/my.cnf
PIDFile=/data1/mysql/data/mysql.pid
TimeoutSec=300
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
echo "? 服務(wù)文件創(chuàng)建完成"
# 3. 重載 systemd
systemctl daemon-reload
echo "? systemd 配置重載完成"
# 4. 啟用服務(wù)
systemctl enable mysql
echo "? MySQL 服務(wù)已啟用開機(jī)自啟"
# 5. 啟動(dòng)服務(wù)
if systemctl start mysql; then
echo "? MySQL 服務(wù)啟動(dòng)成功"
echo "服務(wù)狀態(tài):"
systemctl status mysql --no-pager -l
else
echo "? MySQL 服務(wù)啟動(dòng)失敗"
journalctl -u mysql -n 20 --no-pager
exit 1
fi
echo ""
echo "=== 部署完成 ==="
echo "常用命令:"
echo " sudo systemctl status mysql # 查看狀態(tài)"
echo " sudo systemctl stop mysql # 停止服務(wù)"
echo " sudo systemctl restart mysql # 重啟服務(wù)"
echo " sudo journalctl -u mysql -f # 查看日志"
賦予執(zhí)行權(quán)限并運(yùn)行:
chmod +x /tmp/deploy-mysql-service.sh sudo /tmp/deploy-mysql-service.sh
通過以上配置,您可以獲得一個(gè)穩(wěn)定、安全且易于管理的 MySQL 服務(wù)。systemd 提供了豐富的監(jiān)控和管理功能,配合適當(dāng)?shù)臋?quán)限和安全配置,可以確保 MySQL 數(shù)據(jù)庫(kù)在 Linux 系統(tǒng)上穩(wěn)定運(yùn)行。
到此這篇關(guān)于MySQL 8.0 systemd 服務(wù)配置指南的文章就介紹到這了,更多相關(guān)MySQL systemd 服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mysql服務(wù)性能優(yōu)化—my.cnf_my.ini配置說明詳解(16G內(nèi)存)
- mysql 主從服務(wù)器的簡(jiǎn)單配置
- MySQL數(shù)據(jù)庫(kù)服務(wù)器端核心參數(shù)詳解和推薦配置
- 簡(jiǎn)單實(shí)現(xiàn)MySQL服務(wù)器的優(yōu)化配置方法
- win2003服務(wù)器下配置 MySQL 群集(Cluster)的方法
- MySQL數(shù)據(jù)庫(kù)優(yōu)化經(jīng)驗(yàn)詳談(服務(wù)器普通配置)
- 使用mysqld_multi實(shí)現(xiàn)單系統(tǒng)中配置多個(gè)MySQL服務(wù)器實(shí)例
- MySQL配置主從服務(wù)器(一主多從)
- mysql主從服務(wù)器配置特殊問題
- Mysql服務(wù)器的安裝配置與啟動(dòng)關(guān)閉方法詳解
相關(guān)文章
Ubuntu中遠(yuǎn)程連接Mysql數(shù)據(jù)庫(kù)的詳細(xì)圖文教程
Ubuntu是一個(gè)以桌面應(yīng)用為主的Linux發(fā)行版操作系統(tǒng),這篇文章主要為大家詳細(xì)介紹了Ubuntu中遠(yuǎn)程連接Mysql數(shù)據(jù)庫(kù)的詳細(xì)圖文教程,有需要的小伙伴可以參考下2025-04-04
MySql?InnoDB存儲(chǔ)引擎之Buffer?Pool運(yùn)行原理講解
緩沖池是用于存儲(chǔ)InnoDB表,索引和其他輔助緩沖區(qū)的緩存數(shù)據(jù)的內(nèi)存區(qū)域。緩沖池的大小對(duì)于系統(tǒng)性能很重要。更大的緩沖池可以減少磁盤I/O來多次訪問同一表數(shù)據(jù)。在專用數(shù)據(jù)庫(kù)服務(wù)器上,可以將緩沖池大小設(shè)置為計(jì)算機(jī)物理內(nèi)存大小的百分之802023-01-01
詳解MySQL實(shí)現(xiàn)主從復(fù)制過程
這篇文章主要為大家詳細(xì)介紹了MySQL主從復(fù)制的實(shí)現(xiàn)過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Win10安裝mysql8.0.15 winx64及連接服務(wù)器過程中遇到的問題
這篇文章主要介紹了Win10安裝mysql8.0.15 winx64及連接服務(wù)器過程中遇到的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟
binlog日志是用于記錄所有修改數(shù)據(jù)庫(kù)內(nèi)容的操作,本文主要介紹了MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03

