1. Linux环境下MySQL安装全攻略
作为从业15年的Linux系统管理员,我处理过上百次MySQL安装部署。今天要分享的是经过实战检验的Linux安装MySQL完整方案,包含CentOS和Ubuntu两大主流系统的详细步骤,以及那些官方文档不会告诉你的避坑技巧。
MySQL作为最流行的开源关系型数据库,在Web应用、企业系统中占据核心地位。不同于Windows的一键安装包,Linux环境下的MySQL安装需要处理依赖关系、配置文件优化、权限控制等一系列"Linux特色"问题。这也是为什么网上总有人卡在某个安装环节——缺少对系统差异和潜在问题的全面认知。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 准备工作与环境检查
2.1 系统环境确认
在开始安装前,必须明确你的Linux发行版和版本。不同发行版的包管理器和软件源差异很大,这是导致安装失败的首要原因。执行以下命令确认系统信息:
bash复制# 查看发行版信息
cat /etc/os-release
# 查看内核版本
uname -r
典型输出示例:
code复制NAME="CentOS Linux"
VERSION="7 (Core)"
注意:CentOS 7与8、Ubuntu 20.04与22.04的安装步骤存在显著差异。本文将以CentOS 7和Ubuntu 22.04为例演示两种主流环境。
2.2 存储空间与内存检查
MySQL 8.0推荐至少2GB内存和5GB磁盘空间。使用以下命令检查资源:
bash复制# 检查内存(单位MB)
free -m
# 检查磁盘空间
df -h /var
如果/var分区空间不足(MySQL默认安装位置),需要考虑:
- 扩容磁盘
- 修改MySQL数据目录位置(后续会讲解)
- 清理现有空间
2.3 解决依赖冲突
最常见的问题是系统中已存在MariaDB或其他MySQL分支。这会导致包冲突,必须先彻底移除:
bash复制# CentOS系
sudo yum remove mariadb-server mariadb-client
# Ubuntu系
sudo apt purge mariadb-server
3. CentOS 7安装MySQL 8.0详解
3.1 配置官方MySQL YUM源
CentOS默认源中的MySQL版本较旧,建议使用Oracle官方源:
bash复制# 下载MySQL YUM仓库
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
# 验证仓库是否添加成功
yum repolist enabled | grep "mysql.*-community.*"
3.2 安装MySQL服务器
bash复制sudo yum install mysql-community-server
安装过程中会遇到GPG密钥验证,选择接受即可。如果下载速度慢,可以尝试:
bash复制sudo yum --enablerepo=mysql80-community install mysql-community-server
3.3 关键初始化步骤
bash复制# 启动MySQL服务
sudo systemctl start mysqld
# 查看临时root密码
sudo grep 'temporary password' /var/log/mysqld.log
输出示例:
code复制2023-05-01T03:12:34.123456Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Jqwe+12_asd
3.4 安全加固与配置
使用临时密码登录后立即修改密码:
bash复制mysql -uroot -p
sql复制ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
重要:MySQL 8.0默认启用密码强度验证,密码需包含大小写字母、数字和特殊字符,长度至少8位。
执行安全向导:
bash复制sudo mysql_secure_installation
建议配置:
- 移除匿名用户 ✔️
- 禁止root远程登录 ✔️
- 移除测试数据库 ✔️
- 重新加载权限表 ✔️
4. Ubuntu 22.04安装MySQL 8.0
4.1 使用APT仓库安装
Ubuntu官方源已包含MySQL 8.0:
bash复制sudo apt update
sudo apt install mysql-server
4.2 Ubuntu特有的安全配置
Ubuntu安装后没有临时密码,而是使用auth_socket插件认证:
bash复制sudo mysql
sql复制ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPassword!';
FLUSH PRIVILEGES;
4.3 验证安装状态
bash复制systemctl status mysql.service
预期输出应包含"active (running)"字样。
5. 关键配置优化
5.1 修改数据存储位置
当/var空间不足时,迁移数据目录:
bash复制# 停止MySQL
sudo systemctl stop mysqld
# 创建新目录
sudo mkdir /data/mysql
# 复制数据
sudo rsync -av /var/lib/mysql /data/mysql
# 修改配置文件
sudo vim /etc/my.cnf
添加/修改:
code复制[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
5.2 调整字符集为UTF8MB4
ini复制[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
5.3 基础性能参数
ini复制[mysqld]
innodb_buffer_pool_size=1G # 建议为物理内存的50-70%
max_connections=200
query_cache_size=0 # MySQL 8.0已移除查询缓存
6. 远程访问配置
6.1 创建远程用户
sql复制CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT ALL PRIVILEGES ON *.* TO 'remoteuser'@'%';
FLUSH PRIVILEGES;
6.2 防火墙设置
bash复制# CentOS
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
# Ubuntu
sudo ufw allow 3306/tcp
7. 常见问题解决手册
7.1 启动失败:无法创建PID文件
错误现象:
code复制[ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld.pid
解决方案:
bash复制sudo mkdir /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
7.2 客户端连接报错:caching_sha2_password
MySQL 8.0默认使用新的认证插件,旧客户端可能不支持:
sql复制ALTER USER 'username'@'ip' IDENTIFIED WITH mysql_native_password BY 'password';
7.3 忘记root密码重置步骤
- 停止MySQL服务
- 启动时跳过权限检查:
bash复制sudo mysqld_safe --skip-grant-tables & - 无密码登录:
bash复制
mysql -uroot - 执行:
sql复制FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
8. 生产环境建议
-
定期备份策略:
bash复制# 全量备份 mysqldump -uroot -p --all-databases > full_backup.sql # 定时任务(每天2点) 0 2 * * * /usr/bin/mysqldump -uroot -pPassword --all-databases | gzip > /backups/mysql_$(date +\%Y\%m\%d).sql.gz -
监控设置:
- 安装MySQL Enterprise Monitor或Percona Monitoring插件
- 关键指标:QPS、连接数、缓冲池命中率
-
安全加固:
- 禁用LOCAL INFILE功能:
ini复制[mysqld] local-infile=0 - 启用SSL连接:
sql复制ALTER USER 'remoteuser'@'%' REQUIRE SSL;
- 禁用LOCAL INFILE功能:
经过这些年的运维实践,我强烈建议在安装完成后立即进行基准测试,使用sysbench等工具模拟真实负载,验证配置的合理性。特别是在内存分配参数上,需要根据实际业务负载特点进行动态调整。
