在 Linux 服务器上搭建 MySQL 数据库服务
一、前置准备
# 检查系统信息
cat /etc/os-release
uname -a
# 确保有 root 权限或 sudo 权限
sudo su -
二、安装 MySQL(以主流发行版为例)
1. CentOS/RHEL/Fedora
方式一:使用 yum/dnf(推荐)
# 添加 MySQL Yum Repository
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
# 查看可用的版本
yum repolist enabled | grep mysql
# 安装 MySQL Server
sudo yum install -y mysql-community-server
# 启动并设置开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld
方式二:使用 EPEL + MariaDB(替代方案)
sudo yum install -y epel-release
sudo yum install -y mariadb-server mariadb
sudo systemctl start mariadb
sudo systemctl enable mariadb
2. Ubuntu/Debian
# 更新包索引
sudo apt update
# 安装 MySQL Server
sudo apt install -y mysql-server
# 启动并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
sudo systemctl status mysql
3. openSUSE
sudo zypper install -y mysql-community-server
sudo systemctl start mysql
sudo systemctl enable mysql
三、初始安全配置
# 运行安全脚本
sudo mysql_secure_installation
交互式提示说明:
- VALIDATE PASSWORD COMPONENT — 是否启用密码强度验证插件?(建议
Y)- Set root password — 设置 root 用户密码(建议设置强密码)
- Remove anonymous users — 删除匿名用户?(建议
Y)- Disallow root login remotely — 禁止 root 远程登录?(建议
Y)- Remove test database — 删除测试数据库?(建议
Y)- Reload privilege tables now — 立即刷新权限?(建议
Y)
四、配置 MySQL
1. 修改配置文件
# CentOS/RHEL: /etc/my.cnf 或 /etc/my.cnf.d/server.cnf
# Ubuntu/Debian: /etc/mysql/mysql.conf.d/mysqld.cnf
sudo vi /etc/my.cnf
[mysqld]
# 基本配置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/run/mysqld/mysqld.pid
# 字符集配置(推荐 UTF8MB4)
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 监听地址(默认只监听本地,如需远程访问改为 0.0.0.0)
bind-address=127.0.0.1
# 端口
port=3306
# 最大连接数
max_connections=200
# 查询缓存(MySQL 8.0 已移除)
# query_cache_size=0
# InnoDB 缓冲池大小(建议为物理内存的 50%-70%)
innodb_buffer_pool_size=1G
# 日志配置
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow-query.log
long_query_time=2
# 时区
default-time-zone='+08:00'
# 重启使配置生效
sudo systemctl restart mysqld # CentOS
sudo systemctl restart mysql # Ubuntu
2. 防火墙配置
# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
# Ubuntu (ufw)
sudo ufw allow 3306/tcp
sudo ufw reload
# 如果使用 iptables
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
⚠️ 生产环境建议: 不要将
bind-address设为0.0.0.0,而是通过防火墙限制特定 IP 访问。
五、创建数据库和用户
# 登录 MySQL
mysql -u root -p
-- 创建数据库
CREATE DATABASE IF NOT EXISTS mydb
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 创建专用用户(推荐最小权限原则)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';
-- 授权
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER
ON mydb.* TO 'appuser'@'%';
-- 如果限制特定 IP 访问
-- GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'192.168.1.%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 验证
SHOW DATABASES;
SELECT user, host FROM mysql.user;
-- 退出
EXIT;
六、验证安装
# 检查服务状态
sudo systemctl status mysqld # CentOS
sudo systemctl status mysql # Ubuntu
# 测试连接
mysql -u appuser -p -h 127.0.0.1 -e "SELECT VERSION();"
# 查看 MySQL 版本
mysql --version
# 查看监听端口
ss -tlnp | grep 3306
# 或
netstat -tlnp | grep 3306
七、常用管理命令
# 启动/停止/重启
sudo systemctl start|stop|restart|status mysqld
# 查看错误日志
sudo tail -f /var/log/mysqld.log
# Ubuntu: /var/log/mysql/error.log
# 备份数据库
mysqldump -u root -p mydb > /backup/mydb_$(date +%F).sql
# 恢复数据库
mysql -u root -p mydb < /backup/mydb_2024-01-01.sql
# 定期备份脚本示例
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F)
mkdir -p $BACKUP_DIR
mysqldump -u root -p'YourPassword' --all-databases | gzip > $BACKUP_DIR/all_${DATE}.sql.gz
# 保留最近7天备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
八、常见问题排查
| 问题 | 解决方案 |
|---|---|
| 服务无法启动 | 检查 /var/log/mysqld.log 错误日志 |
| 忘记密码 | 进入单用户模式重置:systemctl stop mysqldmysqld_safe --skip-grant-tables &mysql -u root → UPDATE mysql.user SET authentication_string=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES; |
| 远程连接失败 | 检查 bind-address、防火墙、用户 host 权限 |
| 中文乱码 | 确保 character-set-server=utf8mb4,客户端也设置相同字符集 |
| Too many connections | 增加 max_connections,优化应用连接池 |
九、安全加固建议
-- 1. 禁用空密码用户
DELETE FROM mysql.user WHERE User='';
-- 2. 限制 root 只能本地登录
UPDATE mysql.user SET Host='localhost' WHERE User='root';
FLUSH PRIVILEGES;
-- 3. 启用 SSL 连接
-- 在 my.cnf 中配置:
-- [mysqld]
-- ssl-ca=/path/to/ca.pem
-- ssl-cert=/path/to/server-cert.pem
-- ssl-key=/path/to/server-key.pem
-- 4. 定期更新 MySQL 版本和安全补丁
架构示意图
客户端应用
│
▼
┌─────────────┐ ┌──────────┐ ┌──────────────┐
│ Firewall │────▶│ MySQL │────▶│ Data Files │
│ (Port 3306) │ │ Server │ │ (/var/lib/ │
└─────────────┘ │ (Port │ │ mysql/) │
│ 3306) │ └──────────────┘
└──────────┘
│
┌──────────┐
│ Logs │
│ (error, │
│ slow, │
│ general) │
└──────────┘
按照以上步骤,即可在 Linux 服务器上成功搭建并安全运行 MySQL 数据库服务。根据实际业务需求调整参数和权限即可。
云服务器