在 Linux 系统中启动 MySQL(或 MariaDB)服务时,权限管理至关重要。以下是详细的权限说明和最佳实践:
mysql
用户(或 mariadb
用户)运行,这是安装时自动创建的系统用户,权限受限。
mysql
。/var/lib/mysql
)的所有者为 mysql:mysql
。sudo systemctl start mysqld # MySQL
sudo systemctl start mariadb # MariaDB
systemctl
需要 root 权限(通过 sudo
提权)。systemd
服务文件(如 /usr/lib/systemd/system/mysqld.service
)中定义了 User=mysql
和 Group=mysql
,实际进程会降权到 mysql
用户运行。mysqld --user=mysql --datadir=/var/lib/mysql
mysql
用户的权限)。--user=mysql
确保进程以 mysql
用户运行。datadir
)必须属于 mysql:mysql
,权限通常为 750
或 700
。/var/lib/mysql
):
bash
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql # 推荐权限
/etc/my.cnf
或 /etc/mysql/my.cnf
):
bash
sudo chown root:root /etc/my.cnf
sudo chmod 644 /etc/my.cnf # 允许全局读取,仅 root 可写
/var/log/mysql.log
):
bash
sudo chown mysql:mysql /var/log/mysql.log
sudo chmod 640 /var/log/mysql.log
[ERROR] Could not create file '/var/lib/mysql/ibdata1'
mysql
用户无权写入数据目录。bash
sudo chown -R mysql:mysql /var/lib/mysql
[ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
root
用户运行 mysqld
未指定 --user=mysql
。systemd
或 --user=mysql
启动。systemd
管理服务(自动处理用户降权)。bash
sudo ls -l /var/lib/mysql /etc/my.cnf /var/log/mysql*
sudo systemctl start mysqld
(需 root 权限)。mysql
用户运行。mysql:mysql
。通过合理配置权限,可确保 MySQL 服务安全稳定运行。