news 2026/6/24 9:43:49

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/6/21 10:54:17

2023信奥赛C++提高组csp-s复赛真题及题解:密码锁

2023信奥赛C提高组csp-s复赛真题及题解&#xff1a;密码锁 题目描述 小 Y 有一把五个拨圈的密码锁。如图所示&#xff0c;每个拨圈上是从 000 到 999 的数字。每个拨圈都是从 000 到 999 的循环&#xff0c;即 999 拨动一个位置后可以变成 000 或 888&#xff0c; 因为校园里比…

作者头像 李华
网站建设 2026/6/13 23:50:32

百考通AI:硕士毕业论文的智能加速器,告别无效熬夜,专注核心研究

对于每一位硕士研究生而言&#xff0c;毕业论文无疑是求学路上分量最重的一座山。三万字起步的篇幅、严谨的学术规范、创新的理论视角、扎实的实证支撑&#xff0c;每一项要求都让无数个深夜与Word文档为伴的我们感到窒息。从选题的迷茫、文献的浩如烟海&#xff0c;到格式的反…

作者头像 李华
网站建设 2026/6/18 21:59:15

Pinterest将裁员15%,以加大人工智能投资

图片来源&#xff1a;Szabo Viktor on Unsplash 根据提交给美国证券交易委员会的文件&#xff0c;作为其全球重组计划的一部分&#xff0c;Pinterest 计划裁员不到 15%&#xff0c;并缩减办公空间。 Pinterest 正在削减员工数量和办公面积&#xff0c;以将资源重新分配给专注…

作者头像 李华
网站建设 2026/6/21 3:51:03

Copula二维最全代码,包括边缘分布的拟合寻优,联合分布的拟合寻优及蒙特卡洛数据模拟代码 案...

Copula二维最全代码&#xff0c;包括边缘分布的拟合寻优&#xff0c;联合分布的拟合寻优及蒙特卡洛数据模拟代码 案例包括4部分&#xff1a; 1-变量x1的边缘部分拟合&#xff0c;提供了正态分布、对数正态分布、伽马分布、威布尔分布、指数分布、瑞利分布等6种常见边缘分布&…

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

告别论文焦虑:百考通AI如何助力本科生高效完成毕业论文

本科毕业论文写作是每位大学生都必须面对的重要关卡&#xff0c;许多同学在这一过程中常常陷入“选题无从下手、文献如大海捞针、内容空洞缺乏深度、格式反复调整”的困境。 从开题报告到最终答辩&#xff0c;每个环节都像一场考验。今天&#xff0c;我们将深入了解 百考通AI论…

作者头像 李华
网站建设 2026/6/13 4:28:53

适合二开的物联网平台

物联网平台 - Thinglinks-iot ## &#x1f31f; 项目简介 一个功能完备、高可扩展的物联网平台&#xff0c;用最少的代码接入设备&#xff0c;基于Ruoyi-vue框架&#xff0c;支持Mysql和pgsql双版本&#xff0c;集成mybatis-plus&#xff0c;集成TCP、MQTT、UDP、CoAP、HTTP、…

作者头像 李华