在Linux系统中配置MySQL数据库服务器是搭建动态应用服务的关键步骤,本文将详细从安装、初始化、安全配置到用户管理、参数优化等环节展开说明,帮助用户完成稳定可用的MySQL服务部署。
安装MySQL服务器
不同Linux发行版的安装命令存在差异,需根据系统选择合适的方式,以下以主流的Ubuntu/Debian和CentOS/RHEL为例:
发行版 | 安装命令 | 说明 |
---|---|---|
Ubuntu/Debian | sudo apt update && sudo apt install mysql-server |
自动安装MySQL服务及依赖,默认配置文件位于/etc/mysql/mysql.conf.d/ |
CentOS/RHEL | sudo yum install mysql-server (CentOS 7+)或sudo dnf install mysql-server (CentOS 8+) |
需先启用EPEL源,配置文件路径为/etc/my.cnf 或/etc/my.cnf.d/ |
安装完成后,通过systemctl status mysql
检查服务状态,若未启动则执行sudo systemctl start mysql
并设置开机自启sudo systemctl enable mysql
。
初始化安全配置
MySQL首次启动后会生成匿名用户和测试数据库,需通过安全脚本加固:
sudo mysql_secure_installation
该交互式脚本将引导完成以下操作:
- 设置root密码:输入强密码并确认,避免使用简单组合;
- 移除匿名用户:禁止匿名登录,提升安全性;
- 禁止root远程登录:限制root仅允许本地连接(如需远程需单独配置);
- 移除测试数据库:删除
test
等默认数据库,避免未授权访问; - 重新加载权限表:使配置立即生效。
用户与权限管理
MySQL通过用户和权限表控制访问,常用操作如下:
-
创建用户:
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
其中
'app_user'
为用户名,'localhost'
限制仅本地连接,若需远程可替换为。 -
授权:
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'localhost';
授予
app_user
对mydb
数据库所有表的查询、插入、更新权限,表示所有数据库所有表(需谨慎使用)。 -
刷新权限:
FLUSH PRIVILEGES;
-
查看用户与权限:
SELECT User, Host FROM mysql.user; -- 查看所有用户 SHOW GRANTS FOR 'app_user'@'localhost'; -- 查看指定用户权限
配置文件优化
MySQL核心配置文件为my.cnf
(Ubuntu)或my.cnf
(CentOS),可通过调整参数提升性能,常见优化项如下:
[mysqld] # 数据存储路径 datadir=/var/lib/mysql # socket文件路径 socket=/var/run/mysqld/mysqld.sock # 字符集(推荐utf8mb4) character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 缓冲区大小(根据服务器内存调整,建议为内存的50%-70%) innodb_buffer_pool_size=1G # 最大连接数 max_connections=200 # 慢查询日志(用于性能排查) slow_query_log=1 slow_query_log_file=/var/log/mysql/slow-query.log long_query_time=2
修改后需重启MySQL服务:sudo systemctl restart mysql
。
防火墙配置
若需远程访问MySQL(默认端口3306),需开放防火墙端口:
- CentOS(firewalld):
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
- Ubuntu(ufw):
sudo ufw allow 3306/tcp
测试连接
-
本地连接:
mysql -u root -p
输入root密码后进入MySQL命令行,执行
SELECT VERSION();
验证安装。 -
远程连接:
在客户端工具(如Navicat、DBeaver)中输入服务器IP、端口(3306)、用户名及密码,确保用户已授权远程访问且防火墙放行。
相关问答FAQs
Q1:忘记MySQL root密码怎么办?
A1:可通过跳过权限表重置密码,步骤如下:
- 停止MySQL服务:
sudo systemctl stop mysql
; - 跳过权限表启动:
sudo mysqld_safe --skip-grant-tables &
; - 无密码登录:
mysql -u root
; - 执行重置密码SQL(MySQL 5.7+):
UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword123!') WHERE User='root'; FLUSH PRIVILEGES;
- 正常启动MySQL:
sudo systemctl start mysql
,使用新密码登录。
Q2:如何允许特定IP远程连接MySQL?
A2:需同时修改用户权限和防火墙配置:
- 创建允许远程的用户(或修改现有用户):
CREATE USER 'remote_user'@'192.168.1.100' IDENTIFIED BY 'RemotePassword123!'; GRANT ALL PRIVILEGES ON mydb.* TO 'remote_user'@'192.168.1.100'; FLUSH PRIVILEGES;
其中
168.1.100
为允许访问的客户端IP; - 确保MySQL配置文件
bind-address
设置为0.0.0
(允许所有IP连接)或指定IP; - 开放服务器防火墙的3306端口(参考第五部分)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23004.html