奋斗
努力

在Linux服务器上如何搭建MySQL数据库服务?

云计算

在 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

交互式提示说明:

  1. VALIDATE PASSWORD COMPONENT — 是否启用密码强度验证插件?(建议 Y)
  2. Set root password — 设置 root 用户密码(建议设置强密码)
  3. Remove anonymous users — 删除匿名用户?(建议 Y)
  4. Disallow root login remotely — 禁止 root 远程登录?(建议 Y)
  5. Remove test database — 删除测试数据库?(建议 Y)
  6. 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 mysqld
mysqld_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 数据库服务。根据实际业务需求调整参数和权限即可。

未经允许不得转载:云服务器 » 在Linux服务器上如何搭建MySQL数据库服务?