news 2026/8/1 18:27:39

Linux MySQL安装与配置指南:从安装到安全加固

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux MySQL安装与配置指南:从安装到安全加固

前言

MySQL作为最流行的开源关系数据库,在Linux环境中的安装配置是每个开发者和运维的必备技能。本文将提供一套从零开始的完整安装流程,涵盖Ubuntu、CentOS两大主流发行版,包含性能优化、安全加固、远程访问配置等生产环境实用技巧,助你快速搭建稳定可靠的MySQL数据库环境。

一、发行版选择与环境准备

系统要求检查
bash

1. 确认系统架构和内存

uname -m # 查看64位还是32位
free -h # 内存至少2GB推荐

2. 检查是否已有MySQL

systemctl status mysql

ps aux | grep mysqld

3. 清理旧版本(如有冲突)

sudo apt remove --purge mysql-* # Ubuntu
sudo yum remove mysql* # CentOS

二、Ubuntu 22.04/20.04 安装MySQL 8.0

  1. 官方仓库安装(推荐)
    bash

更新包列表

sudo apt update
sudo apt upgrade -y

安装MySQL服务器

sudo apt install mysql-server -y

查看安装版本

mysql --version

输出:mysql Ver 8.0.33 for Linux on x86_64

  1. 安全初始化配置
    bash

运行安全安装脚本

sudo mysql_secure_installation

交互式配置:

  1. 设置密码强度验证策略:选0-2(0最弱,2最强)
  2. 设置root密码:输入强密码
  3. 删除匿名用户:输入Y
  4. 禁止root远程登录:输入Y(生产环境建议)
  5. 删除测试数据库:输入Y
  6. 重新加载权限表:输入Y
  7. 手动配置(如需自定义)
    bash

如果跳过安全脚本,手动设置密码:

sudo mysql

MySQL命令行中执行:

ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘你的强密码’;
FLUSH PRIVILEGES;
EXIT;

三、CentOS 8/RHEL 8 安装MySQL 8.0

  1. 添加官方仓库并安装
    bash

下载MySQL官方仓库

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm

禁用默认的MySQL模块

sudo dnf module disable mysql -y

安装MySQL服务器

sudo dnf install mysql-community-server -y

启动服务并设置开机自启

sudo systemctl start mysqld
sudo systemctl enable mysqld
2. 获取临时密码并修改
bash

查看临时root密码(CentOS首次安装后生成)

sudo grep ‘temporary password’ /var/log/mysqld.log

输出:A temporary password is generated for root@localhost: xxxxxxxxxx

使用临时密码登录

mysql -uroot -p

输入上面获取的临时密码

修改root密码(MySQL命令行中执行)

ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘你的新密码’;
FLUSH PRIVILEGES;
3. 运行安全脚本
bash

登出MySQL后运行

mysql_secure_installation

按提示完成安全配置(与Ubuntu相同)

四、基础管理与配置

  1. 服务管理命令
    bash

Ubuntu/Debian

sudo systemctl start mysql # 启动
sudo systemctl stop mysql # 停止
sudo systemctl restart mysql # 重启
sudo systemctl status mysql # 查看状态
sudo systemctl enable mysql # 开机自启

CentOS/RHEL

sudo systemctl start mysqld # 注意服务名不同
sudo systemctl status mysqld
2. 登录MySQL数据库
bash

本地登录

mysql -u root -p

指定主机登录

mysql -h localhost -u root -p

查看所有数据库

SHOW DATABASES;

查看用户权限

SELECT user, host FROM mysql.user;
3. 创建新用户和数据库
bash

登录MySQL后执行

– 创建数据库
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

– 创建用户
CREATE USER ‘myuser’@‘localhost’ IDENTIFIED BY ‘StrongPass123!’;

– 授予权限
GRANT ALL PRIVILEGES ON mydb.* TO ‘myuser’@‘localhost’;

– 刷新权限
FLUSH PRIVILEGES;

– 查看用户权限
SHOW GRANTS FOR ‘myuser’@‘localhost’;

五、性能优化配置

  1. 调整MySQL配置文件
    bash

备份原配置

sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.backup

或(CentOS)

sudo cp /etc/my.cnf /etc/my.cnf.backup

编辑配置文件

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu
sudo nano /etc/my.cnf # CentOS
2. 关键优化参数(8GB内存服务器示例)
ini
[mysqld]

基础设置

default_authentication_plugin = mysql_native_password
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

连接设置

max_connections = 200
connect_timeout = 10
wait_timeout = 600
interactive_timeout = 600

内存设置

key_buffer_size = 256M
innodb_buffer_pool_size = 4G # 设置为物理内存的50%-70%
innodb_log_file_size = 512M
innodb_log_buffer_size = 16M

性能优化

innodb_flush_log_at_trx_commit = 2 # 平衡性能与安全
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
query_cache_type = 0 # MySQL 8.0已移除查询缓存

慢查询日志

slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
3. 应用配置并重启
bash

重启MySQL使配置生效

sudo systemctl restart mysql # Ubuntu
sudo systemctl restart mysqld # CentOS

检查配置是否生效

mysql -u root -p -e “SHOW VARIABLES LIKE ‘innodb_buffer_pool_size’;”

六、安全加固措施

  1. 防火墙配置
    bash

Ubuntu UFW防火墙

sudo ufw allow 3306/tcp
sudo ufw reload

CentOS Firewalld防火墙

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
2. 创建专用MySQL用户(非root运行)
bash

创建系统用户组

sudo groupadd mysqlgroup
sudo useradd -r -g mysqlgroup -s /bin/false mysqldb

更改MySQL数据目录权限

sudo chown -R mysqldb:mysqlgroup /var/lib/mysql
sudo chmod -R 750 /var/lib/mysql
3. 启用SSL加密连接
bash

检查是否支持SSL

mysql -u root -p -e “SHOW VARIABLES LIKE ‘%ssl%’;”

自动生成SSL证书(如果未启用)

sudo mysql_ssl_rsa_setup --uid=mysql

在配置文件中启用SSL

添加:

ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem
require_secure_transport=ON # 强制SSL连接
4. 审计与监控
bash

安装审计插件(MySQL Enterprise功能,社区版可用替代)

或使用通用日志

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log

定期检查错误日志

sudo tail -f /var/log/mysql/error.log

七、备份与恢复

  1. 使用mysqldump备份
    bash

备份单个数据库

mysqldump -u root -p mydb > mydb_backup_$(date +%Y%m%d).sql

备份所有数据库

mysqldump -u root -p --all-databases > all_db_backup_$(date +%Y%m%d).sql

带压缩备份

mysqldump -u root -p mydb | gzip > mydb_backup_$(date +%Y%m%d).sql.gz
2. 定时自动备份(Crontab)
bash

编辑crontab

crontab -e

添加(每天凌晨2点备份)

0 2 * * * /usr/bin/mysqldump -u root -p密码 mydb > /backup/mydb_$(date +%Y%m%d).sql
0 3 * * * find /backup -name “*.sql” -mtime +7 -delete # 删除7天前备份
3. 恢复数据库
bash

创建新数据库

mysql -u root -p -e “CREATE DATABASE mydb_restore;”

恢复数据

mysql -u root -p mydb_restore < mydb_backup.sql

或直接在MySQL中执行

SOURCE /path/to/backup.sql;

八、远程访问配置(谨慎开启)

  1. 创建远程访问用户
    bash

登录MySQL

mysql -u root -p

创建允许远程连接的用户(生产环境建议限制IP)

CREATE USER ‘remoteuser’@‘%’ IDENTIFIED BY ‘StrongRemotePass123!’;
GRANT ALL PRIVILEGES ON mydb.* TO ‘remoteuser’@‘%’;
FLUSH PRIVILEGES;

更安全的做法:限制特定IP

CREATE USER ‘remoteuser’@‘192.168.1.%’ IDENTIFIED BY ‘StrongRemotePass123!’;
2. 修改绑定地址
bash

编辑配置文件

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu

找到bind-address,改为:

bind-address = 0.0.0.0 # 允许所有IP访问

bind-address = 192.168.1.100 # 指定服务器IP

重启MySQL

sudo systemctl restart mysql
3. 测试远程连接
bash

从另一台机器测试

mysql -h 服务器IP -u remoteuser -p

九、故障排除

  1. 忘记root密码
    bash

停止MySQL服务

sudo systemctl stop mysql

安全模式启动

sudo mysqld_safe --skip-grant-tables &

无密码登录

mysql -u root

重置密码(MySQL命令行)

FLUSH PRIVILEGES;
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘新密码’;
EXIT;

重启MySQL

sudo systemctl restart mysql
2. 端口被占用检查
bash
sudo netstat -tulnp | grep :3306
sudo ss -tulnp | grep :3306
3. 查看错误日志
bash

Ubuntu

sudo tail -f /var/log/mysql/error.log

CentOS

sudo tail -f /var/log/mysqld.log

十、生产环境检查清单

✅ 安装完成验证:

MySQL服务正常运行:systemctl status mysql

可以本地登录:mysql -u root -p

版本正确:mysql --version

端口监听正常:ss -tuln | grep :3306

✅ 安全配置验证:

root不能远程登录

匿名用户已删除

测试数据库已删除

防火墙已配置

使用强密码

✅ 性能优化验证:

配置文件已优化

缓冲池大小合适

字符集为utf8mb4

慢查询日志已开启

✅ 备份方案就绪:

备份脚本已测试

自动备份已配置

备份文件可正常恢复

安装成功标志
能够用root用户正常登录MySQL

可以创建数据库和用户

服务稳定运行,无错误日志

配置优化后性能提升

备份恢复流程测试通过

最佳实践建议:

生产环境避免使用root远程连接

定期更新MySQL安全补丁

启用binlog用于数据恢复和主从复制

使用监控工具(如Prometheus + Grafana)监控数据库状态

现在,你已经拥有了一个经过优化和安全加固的MySQL数据库环境,可以开始部署你的应用了!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 12:07:56

springboot基于java web的宠物托管系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试 四、代码参考 源码获取 目的 宠物托管系统作为宠物服务行业的重要组成部分&#xff0c;对于满足宠物主人需求、保障宠物健康具有…

作者头像 李华
网站建设 2026/7/31 7:38:08

实测对比后!千笔,顶流之选的AI论文网站

你是否曾为论文的选题方向而烦恼&#xff1f;是否在写到一半时突然卡壳&#xff0c;不知如何继续&#xff1f;又或者反复修改却始终达不到满意的效果&#xff1f;论文写作不仅是学术能力的考验&#xff0c;更是耐心和效率的挑战。对于无数本科生来说&#xff0c;这是一段既重要…

作者头像 李华
网站建设 2026/7/31 10:04:00

2000-2024年 上市公司-融资约束KZ、SA、WW、FC指数(+文献)

01、数据简介 上市公司融资约束的衡量方式主要有单一指标与约束指数指标两类。单一指标涉及公司规模、负债率、股利分派率及产权性质等&#xff1b;约束指数则包含KZ指数、SA指数、WW指数、FC指数等。与单一指标相比&#xff0c;约束指数指标能更精准、权威地综合衡量企业融资…

作者头像 李华
网站建设 2026/7/19 10:59:04

Java剪辑接单:智能报价比价系统源码剖析

以下是对Java剪辑接单智能报价比价系统源码的深度剖析&#xff0c;涵盖技术架构、核心功能、关键代码及创新价值四大维度&#xff1a;一、技术架构&#xff1a;四层分布式微服务设计表现层&#xff1a;采用Thymeleaf模板引擎动态渲染报价页面&#xff0c;支持PC/移动端多端适配…

作者头像 李华
网站建设 2026/7/31 7:02:33

AI 编程工具安全实战:从 IDE 插件审计到模型投毒防御

AI 编程工具&#xff08;代码大模型、IDE 智能插件、自动化代码生成平台等&#xff09;已成为研发效率提升的核心抓手&#xff0c;从个人开发者的代码补全&#xff0c;到企业级的项目快速开发&#xff0c;其渗透率持续攀升。但这类工具的技术架构涉及IDE 插件生态、大模型训练/…

作者头像 李华