news 2026/4/24 2:09:35

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/4/23 10:56:34

Jmeter的进阶功能

1. 逻辑控制器 1. if逻辑控制器 要求&#xff1a;如果用户是张三我们就发送一个百度请求&#xff0c;否则就不发送。 新增一个用户变量 userName 新增一个逻辑控制器 > if控制器 把http请求拖到if控制器下面&#xff0c;让if控制器成为Http请求的父亲 执行发现条件满足&a…

作者头像 李华
网站建设 2026/4/23 3:58:44

百考通AI:重新定义本科毕业论文写作,一场以学生为本的智能革新

毕业季的钟声再次敲响&#xff0c;对于广大本科生而言&#xff0c;毕业论文这座“大山”依然横亘在通往学位的必经之路上。选题的迷茫、文献的瀚海、结构的混乱、格式的繁琐&#xff0c;每一项都足以消耗学子们本就紧张的精力与时间。面对这一普遍性难题&#xff0c;传统的写作…

作者头像 李华
网站建设 2026/4/23 10:51:29

malloc 在多线程下为什么慢?——从原理到实测

malloc 在多线程下为什么慢&#xff1f;——从原理到实测 摘要 在高并发或频繁分配的场景下&#xff0c;程序性能经常被 malloc/free 吃掉。本文带你从零开始理解 malloc 在多线程下的主要性能问题&#xff08;arena 锁竞争、缓存一致性、上下文切换、元数据与碎片等&#xf…

作者头像 李华
网站建设 2026/4/22 17:06:37

基于SpringBoot的高尔夫球场管理系统统的设计与实现

高尔夫球场管理系统的背景 高尔夫运动作为一项高端休闲体育活动&#xff0c;近年来在全球范围内逐渐普及。随着参与人数的增加&#xff0c;高尔夫球场的运营管理面临诸多挑战&#xff0c;包括会员管理、场地预约、设备维护、财务结算等。传统的手工或半自动化管理方式效率低下…

作者头像 李华
网站建设 2026/4/23 10:50:45

基于springboot的就业推荐管理系统设计实现

背景分析 随着高校毕业生人数逐年增加&#xff0c;就业市场竞争加剧&#xff0c;传统招聘方式存在信息不对称、匹配效率低等问题。学生难以精准获取岗位信息&#xff0c;企业也面临人才筛选成本高的挑战。SpringBoot作为轻量级Java框架&#xff0c;能快速构建高可用的就业推荐…

作者头像 李华
网站建设 2026/4/23 10:50:30

一篇搞定全流程 9个AI论文工具:本科生毕业论文+开题报告全场景测评

面对日益繁重的学术任务&#xff0c;本科生在撰写毕业论文和开题报告时常常面临选题困难、资料搜集繁琐、写作效率低等挑战。尤其是在AI技术迅速发展的当下&#xff0c;如何选择一款真正适合自己的智能写作工具&#xff0c;成为许多学生关注的焦点。为此&#xff0c;我们基于20…

作者头像 李华