在服务端开发与后端架构设计中,MySQL 作为核心数据库组件,其环境配置的成败直接影响后续开发效率。本文将带你一步步完成 CentOS 7 与 Ubuntu 两大主流系统的 MySQL 安装与调优,彻底解决环境冲突、密码认证与编码乱码等高频问题,为你的微服务与 API 开发打下坚实基础。
为什么必须先处理 MariaDB?
MySQL 被 Oracle 收购后,CentOS 7 与 Ubuntu 等主流发行版默认预装了 MariaDB——这一 MySQL 的分支版本。虽然语法兼容,但两者在底层存储引擎与配置文件上存在显著差异,极易引发端口占用与服务冲突。因此,安装前彻底卸载 MariaDB 是避免环境混乱的关键第一步。
权限建议:本文所有操作优先使用 root 用户执行(普通用户需加 sudo 获取权限)。学习阶段可直接使用 root 用户,熟悉用户管理后再创建独立账号。
CentOS 7 完整安装配置 MySQL 5.7
CentOS 7 环境推荐安装 MySQL 5.7——该版本兼容性强且为学习主流。全程使用官方 YUM 源,避免第三方依赖问题。整个流程分为五大环节:卸载冲突 → 配置源 → 安装 → 初始化 → 优化。
清理系统残留环境
首先检查并停止 MariaDB 进程,避免卸载时出现资源占用报错:
# 检查MariaDB进程
ps ajx | grep mariadb
# 停止MariaDB服务
systemctl stop mariadb.service
# 再次检查,确认无相关进程
ps ajx | grep mariadb
通过查询命令找出所有相关安装包,逐一卸载干净:
# 查询MariaDB安装包
rpm -qa | grep mariadb
# 查询MySQL安装包(若有旧版)
rpm -qa | grep mysql
# 卸载MariaDB(替换为查询到的包名,也可直接批量卸载)
sudo yum remove mariadb -y
# 若有多个包,可直接通配符卸载
sudo yum remove mariadb* mysql* -y
⚠️ 数据备份:卸载前务必备份配置与数据目录,防止误删重要内容:
# 备份配置文件
cp /etc/my.cnf /etc/my.cnf.bak
# 备份数据存储目录
cp -r /var/lib/mysql /var/lib/mysql.bak
配置官方 YUM 源
CentOS 7 默认源不含 MySQL 官方包,需手动添加。先确认系统版本:
cat /etc/redhat-release
输出示例:CentOS Linux release 7.8.2003 (Core)
下载并安装与系统匹配的 MySQL 5.7 YUM 源包:
# 下载MySQL 5.7 YUM源包
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
# 安装YUM源(普通用户加sudo,解决权限问题)
sudo rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
安装后验证源文件是否生成,并检查可用包列表:
# 查看YUM源目录,确认出现MySQL相关repo文件
ls /etc/yum.repos.d/ | grep mysql
yum list | grep mysql
若出现 mysql-community-server 等包,说明源配置成功。
安装与启动服务
执行安装命令,-y 参数自动确认所有选项:
sudo yum install -y mysql-community-server
常见坑 1:安装时出现秘钥过期报错,提示
解决方案:导入最新的 MySQL 官方秘钥即可:
重新执行安装命令即可成功。
启动并验证服务状态:
# 启动MySQL服务
systemctl start mysqld.service
# 设置开机自启(可选,建议开启,避免重启系统后服务失效)
systemctl enable mysqld
# 重载系统服务配置
systemctl daemon-reload
ps axj | grep mysqld
输出中出现 /usr/sbin/mysqld 相关进程即表示启动成功。
登录与密码重置的三种方案
MySQL 5.7 安装后自动生成临时 root 密码,存放于 /var/log/mysqld.log 日志中。按以下方法依次尝试:
- 临时密码登录(99% 可用):提取并复制密码登录:
# 从日志中提取临时root密码
sudo grep 'temporary password' /var/log/mysqld.log
输出示例:root@localhost: yLMalT:v+5l*
# 登录MySQL,输入上述临时密码
mysql -uroot -p
⚠️ 密码策略默认要求高强度密码,新手可先关闭策略再设置:
-- 关闭密码强度验证策略(0为最低,1为中,2为高)
set global validate_password_policy=0;
-- 设置密码最小长度为1位
set global validate_password_length=1;
-- 修改root本地登录密码(替换为自己的密码,示例:qwer@wu.888)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'qwer@wu.888';
-- 刷新权限,使配置生效
FLUSH PRIVILEGES;
- 直接登录:新版 MySQL 可能无临时密码,直接回车登录:
mysql -uroot -p
- 跳过权限验证:密码丢失时的强制方案,修改配置文件:
# 编辑MySQL主配置文件
vim /etc/my.cnf
在 [mysqld] 节点末尾添加配置(vim 按 i 编辑,ESC + :wq 保存):
# 跳过MySQL权限验证
skip-grant-tables
# 重启MySQL服务,使配置生效
systemctl restart mysqld.service
# 直接登录,无需输入密码
mysql -uroot
登录后重置密码,必须删除 skip-grant-tables 配置并重启:
-- 切换到mysql系统库
USE mysql;
-- 重置root密码(替换为自己的密码)
UPDATE user SET authentication_string=PASSWORD('qwer@wu.888') WHERE User='root' AND Host='localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出MySQL
exit;
# 编辑配置文件,删除skip-grant-tables配置
vim /etc/my.cnf
# 重启MySQL服务
systemctl restart mysqld.service
核心配置优化
修改 /etc/my.cnf 配置文件,设置 UTF-8 编码与 InnoDB 存储引擎(支持事务与行锁):
# 编辑配置文件
vim /etc/my.cnf
[mysql]
# 客户端编码(暂不设置,避免MySQL汉字回显bug,可后续根据需求开启)
# default-character-set=utf8
[mysqld]
# MySQL端口,默认3306
port=3306
# 数据存储目录
datadir=/var/lib/mysql
# 套接字文件
socket=/var/lib/mysql/mysql.sock
# 禁用符号链接,防止安全风险
symbolic-links=0
# 日志文件路径
log-error=/var/log/mysqld.log
# 进程文件路径
pid-file=/var/run/mysqld/mysqld.pid
# 服务端编码,UTF-8
character-set-server=utf8
# 默认存储引擎InnoDB
default-storage-engine=innodb
# InnoDB缓冲池大小,根据服务器内存调整,专用服务器设为内存70%,普通服务器10%
# innodb_buffer_pool_size = 128M
重启服务使配置生效:
systemctl restart mysqld.service
常见故障排查
问题一:中文乱码——检查终端编码环境变量:
# 查看LANG变量
env | grep LANG
若非 LANG=en_US.utf8 ,修改终端配置(永久生效需编辑 /etc/profile 文件):
# 临时设置UTF-8编码
export LANG=en_US.utf8
# 永久设置,编辑profile文件
echo "export LANG=en_US.utf8" >> /etc/profile
# 使配置生效
source /etc/profile
问题二:服务启动失败——检查错误日志定位原因:
# 查看错误日志最后100行
tail -100 /var/log/mysqld.log
常见原因包括端口被占、权限不足、配置语法错误。
Ubuntu 系统安装配置 MySQL 8.0
Ubuntu(20.04/22.04)使用 apt 包管理器,MariaDB 处理更简单。本次安装 MySQL 8.0(官方源主流版本),流程分为五步。
卸载 MariaDB 与安装
先彻底卸载预装组件:
# 停止MariaDB服务
sudo systemctl stop mariadb
# 卸载MariaDB所有包
sudo apt remove mariadb-server mariadb-client mariadb-common -y
# 清理残留配置文件
sudo apt autoremove -y
sudo apt clean
更新源并安装 mysql-server 包(含服务端、客户端及依赖):
# 更新apt软件源
sudo apt update && sudo apt upgrade -y
# 安装MySQL服务
sudo apt install mysql-server -y
安装过程无需设置密码——Ubuntu 自动创建 root 用户并采用 auth_socket 认证。
验证服务与配置密码
确认服务运行状态:
# 查看MySQL服务状态
sudo systemctl status mysql
# 设置开机自启
sudo systemctl enable mysql
显示 active (running) 即成功。修改认证方式为 mysql_native_password 并设置密码:
# 以root身份登录MySQL(Ubuntu本地免密)
sudo mysql -uroot
-- 切换到mysql系统库
USE mysql;
-- 修改root认证方式为密码认证,设置密码(替换为自己的密码)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MySql@123456';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出MySQL
exit;
完成后即可密码登录:
mysql -uroot -p
编码优化与远程访问
编辑主配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf ,在 [mysqld] 节点添加配置:
# 编辑配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 服务端编码
character-set-server = utf8mb4
# 排序规则
collation-server = utf8mb4_unicode_ci
# 默认存储引擎
default-storage-engine = InnoDB
# 端口
port = 3306
# 允许远程访问(注释掉bind-address,默认绑定127.0.0.1,仅本地可访问)
# bind-address = 127.0.0.1
# 编辑客户端配置文件,设置客户端编码
sudo vim /etc/mysql/conf.d/mysql.cnf
在 [mysql] 节点补充:
default-character-set = utf8mb4
重启并验证编码:
sudo systemctl restart mysql
-- 登录MySQL后执行
SHOW VARIABLES LIKE '%character%';
SHOW VARIABLES LIKE '%collation%';
所有编码项为 utf8mb4 即成功(utf8mb4 是 UTF-8 超集,支持 emoji)。
开启远程访问需三步:修改配置(已注释 bind-address)、授权用户、开放端口:
mysql -uroot -p
-- 授权root用户从任意IP访问(%表示任意IP,可替换为具体IP,如192.168.1.100)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'MySql@123456' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
exit;
开放防火墙端口:
# 查看防火墙状态
sudo ufw status
# 开放3306/TCP端口
sudo ufw allow 3306/tcp
# 重启防火墙
sudo ufw reload
完成后即可通过 Navicat、DataGrip 等工具远程连接。
总结
本文完整覆盖了 CentOS 7 与 Ubuntu 双系统的 MySQL 环境搭建全流程。核心要点:彻底卸载 MariaDB 避免冲突、正确配置官方源、灵活处理密码认证、优化编码与存储引擎。掌握这些技能,你就能在服务端开发中快速构建稳定的数据库环境,为后端架构与微服务应用提供可靠的数据支撑。
MySQL 的环境配置是基础,掌握不同系统的安装方法,能快速适配各种开发环境。后续可以继续学习 MySQL 的用户管理、数据库设计、SQL 语句优化等内容,打好后端开发的数据库基础。
如果配置过程中遇到其他报错,欢迎在评论区留言,我会第一时间解答!觉得这篇教程有用的话,记得点赞 + 收藏哦~
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
浙公网安备 33010602011771号