1. 为什么选择在CentOS上安装MySQL?
MySQL作为最流行的开源关系型数据库之一,在Linux服务器上的部署一直是运维和开发人员的必备技能。CentOS作为企业级Linux发行版,其稳定性和长期支持特性使其成为生产环境的首选。不同于Ubuntu等桌面友好型发行版,CentOS默认采用保守的软件版本策略,这给MySQL安装带来了一些特殊性。
我在管理数十台CentOS服务器的经验中发现,MySQL安装过程中最常遇到的三个关键问题是:软件源配置冲突、依赖项缺失和权限设置不当。特别是在CentOS 7和CentOS 8这两个主流版本上,官方仓库的MySQL版本差异较大,而企业往往需要特定版本的MySQL来保证应用兼容性。
重要提示:从CentOS 7开始,官方仓库默认提供的是MariaDB而非MySQL,直接使用yum install mysql-server会安装MariaDB。这是许多新手容易踩的第一个坑。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的系统准备
2.1 检查系统版本和架构
在开始安装前,首先需要确认您的CentOS版本和系统架构。执行以下命令:
bash复制cat /etc/redhat-release # 查看CentOS版本
uname -m # 查看系统架构(x86_64或aarch64)
这个步骤至关重要,因为:
- CentOS 7和CentOS 8的安装方法有显著差异
- x86_64和ARM架构需要不同的安装包
- 某些旧版本CentOS(如6.x)已停止支持,需要特殊处理
2.2 清理现有MySQL/MariaDB
如果系统上已有旧版MySQL或MariaDB,必须先彻底清理以避免冲突。执行以下步骤:
bash复制# 检查已安装的MySQL相关包
rpm -qa | grep -i mysql
rpm -qa | grep -i mariadb
# 卸载找到的包(以mariadb-libs-5.5.68-1.el7.x86_64为例)
sudo yum remove mariadb-libs-5.5.68-1.el7.x86_64
# 删除残留文件和目录
sudo rm -rf /var/lib/mysql/
sudo rm -rf /etc/my.cnf*
特别注意:/var/lib/mysql是数据库数据目录,删除前请确保已备份重要数据。我曾遇到过因为没备份就执行rm -rf导致数据丢失的惨痛案例。
2.3 配置正确的YUM源
CentOS官方源中的MySQL版本往往较旧,推荐使用MySQL官方YUM源或国内镜像源。以下是配置MySQL官方源的步骤:
bash复制# 下载MySQL YUM仓库配置(RHEL7/CentOS7)
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
# 或者使用国内镜像(如清华源)
sudo rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql80-community-el7/mysql80-community-release-el7-7.noarch.rpm
启用指定版本的仓库(默认启用的是最新版,如需安装5.7需调整):
bash复制# 查看可用仓库
yum repolist all | grep mysql
# 禁用8.0版本,启用5.7版本
sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community
3. MySQL安装方法详解
3.1 使用YUM安装(推荐)
这是最简单的方法,会自动处理依赖关系:
bash复制sudo yum install mysql-community-server
安装完成后,系统会:
- 自动创建mysql用户和用户组
- 初始化必要的系统表
- 设置默认配置文件(/etc/my.cnf)
3.2 RPM包手动安装
当服务器无法连接外网时,可以下载离线RPM包安装。以MySQL 5.7为例:
bash复制# 下载必要的RPM包(需根据实际版本调整)
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server-5.7.44-1.el7.x86_64.rpm
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.44-1.el7.x86_64.rpm
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-5.7.44-1.el7.x86_64.rpm
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-common-5.7.44-1.el7.x86_64.rpm
# 按顺序安装(注意依赖关系)
sudo rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm
常见问题:如果遇到依赖错误,可以使用"--nodeps"参数强制安装,但可能导致功能异常。更好的做法是建立本地YUM仓库。
3.3 二进制包安装
对于需要自定义编译选项的高级用户,可以使用二进制tar包安装:
bash复制# 下载并解压
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
cd /usr/local && ln -s mysql-5.7.44-linux-glibc2.12-x86_64 mysql
# 创建mysql用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 初始化数据库
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
bin/mysqld --initialize --user=mysql
bin/mysql_ssl_rsa_setup
4. 安装后的基本配置
4.1 启动MySQL服务
使用systemctl管理MySQL服务:
bash复制sudo systemctl start mysqld # 启动服务
sudo systemctl enable mysqld # 设置开机启动
sudo systemctl status mysqld # 查看服务状态
4.2 获取初始密码
MySQL 5.7及以上版本在首次安装后会生成一个临时root密码:
bash复制sudo grep 'temporary password' /var/log/mysqld.log
输出类似:
code复制2023-01-01T00:00:00.000000Z 1 [Note] A temporary password is generated for root@localhost: Abc123!@#
4.3 安全设置
运行mysql_secure_installation脚本进行基本安全配置:
bash复制mysql_secure_installation
这个交互式脚本会引导您完成:
- 修改root密码
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
4.4 防火墙配置
如果启用了firewalld,需要开放MySQL端口(默认3306):
bash复制sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
5. 常见问题与解决方案
5.1 安装失败:公钥校验错误
当出现"Failing package is: mysql-community-client-5.7.44-1.el7.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql"错误时,需要导入MySQL GPG密钥:
bash复制sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
5.2 启动失败:权限问题
如果遇到"Could not create unix socket lock file /var/lib/mysql/mysql.sock.lock"等权限错误,执行:
bash复制sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 755 /var/lib/mysql
sudo restorecon -Rv /var/lib/mysql
5.3 连接问题:socket文件位置
当使用mysql客户端连接时出现"Can't connect to local MySQL server through socket '/tmp/mysql.sock'"错误,可能是因为socket文件位置不一致。解决方法:
bash复制# 查找实际的socket文件位置
sudo find / -name mysql.sock 2>/dev/null
# 创建符号链接或修改客户端配置
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
或者修改/etc/my.cnf,在[client]部分添加:
code复制socket=/var/lib/mysql/mysql.sock
6. 性能优化基础配置
6.1 编辑配置文件
MySQL的主要配置文件是/etc/my.cnf,建议根据服务器配置进行调整。以下是一个4GB内存服务器的基本优化配置:
ini复制[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# 基础优化
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
max_connections = 200
query_cache_size = 0
query_cache_type = 0
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
socket=/var/lib/mysql/mysql.sock
6.2 重要参数说明
- innodb_buffer_pool_size:InnoDB缓冲池大小,通常设置为物理内存的50-70%
- innodb_log_file_size:redo日志大小,影响崩溃恢复性能
- max_connections:最大连接数,根据应用需求调整
- character-set-server:建议使用utf8mb4以支持完整Unicode字符
修改配置后需要重启MySQL服务:
bash复制sudo systemctl restart mysqld
7. 日常管理与维护
7.1 备份与恢复
基本的mysqldump备份命令:
bash复制# 备份单个数据库
mysqldump -u root -p database_name > backup.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > full_backup.sql
# 恢复数据库
mysql -u root -p database_name < backup.sql
7.2 用户与权限管理
创建新用户并授权:
sql复制CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
查看用户权限:
sql复制SHOW GRANTS FOR 'username'@'host';
7.3 监控与日志
重要的MySQL日志文件:
- 错误日志:/var/log/mysqld.log
- 慢查询日志(需在my.cnf中启用)
- 二进制日志(用于复制和时间点恢复)
查看当前运行状态:
sql复制SHOW STATUS;
SHOW ENGINE INNODB STATUS;
8. 版本升级注意事项
从MySQL 5.7升级到8.0需要特别注意:
- 兼容性检查:使用mysql_upgrade工具检查不兼容的语法和特性
- 配置调整:8.0版本默认的身份验证插件从mysql_native_password改为caching_sha2_password
- 性能变化:8.0的优化器有重大改进,但某些查询的执行计划可能不同
升级基本步骤:
bash复制# 备份所有数据
mysqldump --all-databases --routines --events > full_backup.sql
# 停止MySQL服务
sudo systemctl stop mysqld
# 安装新版本(使用YUM或RPM)
sudo yum install mysql-community-server-8.0
# 启动服务并运行升级
sudo systemctl start mysqld
mysql_upgrade -u root -p
在实际生产环境中,我建议先在测试环境验证升级过程,特别注意检查应用程序是否兼容新版本。曾经有一个电商系统因为存储过程使用了移除的语法导致升级后订单处理功能失效,造成了严重损失。
