CentOS 7 安装 MySQL 8.0 完整指南(含远程连接配置)

在服务器或本地虚拟机上搭建数据库环境时,MySQL 8.0 是一个非常主流的选择。但由于 CentOS 7 默认预装了 MariaDB,且官方仓库已停止维护,直接安装 MySQL 会遇到各种冲突和依赖问题。本文将带你一步步完成从卸载冲突、下载安装包、配置、初始化到开启远程连接的全过程。

一、准备工作:卸载 MariaDB

1.1 为什么要卸载 MariaDB

MariaDB 是 MySQL 的一个开源分支,CentOS 7 及之后版本已不再内置 MySQL,转而使用 MariaDB。如果直接安装 MySQL,两者文件会相互冲突,导致安装失败。因此,我们首先需要彻底卸载系统中自带的 MariaDB。

1.2 卸载步骤

首先,查看系统中是否已安装 MariaDB 相关包:

bash 复制代码
rpm -qa | grep mariadb

如果有返回结果(例如 mariadb-libs-5.5.68-1.el7.x86_64),说明需要卸载。复制该包名,执行以下命令强制卸载:

bash 复制代码
rpm -e --nodeps 包名

--nodeps 表示忽略依赖关系,强制移除,因为 MariaDB 的库文件可能被其他软件依赖,但安装 MySQL 时必须清除。

卸载完成后,再次确认是否还有残留:

bash 复制代码
rpm -qa | grep mariadb

若无输出,则表示卸载成功。

二、下载 MySQL 8.0 安装包

2.1 准备存放目录

为了方便管理,我们在 /usr/local/ 下创建一个 software 目录,后续所有安装包和 MySQL 程序都将集中放在这里。

bash 复制代码
mkdir -p /usr/local/software
cd /usr/local/software

2.2 选择下载方式

可以从 MySQL 官方归档页面选择 Linux - Generic (glibc 2.12) (x86, 64-bit) 版本,下载后上传到服务器;

也可以使用 wget 直接下载,效率更高。

这里主要演示 wget 方式。

执行以下命令下载 MySQL 8.0.20 的通用二进制包:

bash 复制代码
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

如果系统提示 wget: command not found,说明尚未安装 wget

需要先安装:

bash 复制代码
yum install -y wget

但此时你可能会遇到另一个错误:Could not retrieve mirrorlist http://mirrorlist.centos.org/...。这是因为 CentOS 7 已于 2024 年 6 月停止维护,官方 mirrorlist 已经失效。

解决方法:更换为 CentOS 的归档仓库或国内镜像源(如阿里云)。具体操作如下:

  1. 进入 yum 配置目录:

    bash 复制代码
    cd /etc/yum.repos.d
  2. 备份原有配置,并编辑 CentOS-Base.repo

    bash 复制代码
    cp CentOS-Base.repo CentOS-Base.repo.backup
    vi CentOS-Base.repo
  3. 将文件内容修改为指向 vault.centos.org 的归档地址(或后面直接换成阿里云镜像)。

    进入后改为:

bash 复制代码
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#
 
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
#released updates 
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#$baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  1. 保存后执行:

    bash 复制代码
    sudo yum clean all
    sudo yum makecache
  2. 为了获得更快的下载速度,可以进一步替换为阿里云镜像源:

    bash 复制代码
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    cat CentOS-Base.repo   # 确认 mirror 为阿里云地址
  3. 再次清理并重建缓存:

    bash 复制代码
    sudo yum clean all
    sudo yum makecache

现在 yum 恢复正常,重新执行 yum install -y wget 即可成功安装 wget

回到 /usr/local/software 目录,再次执行 wget 下载 MySQL 安装包,耐心等待下载完成(若中途失败或卡住,可中断后重试)。

bash 复制代码
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz


三、解压并安装 MySQL

3.1 解压压缩包

根据文件后缀,使用不同的 tar 参数解压。.tar.xz 格式使用 -Jxvf.tar.gz 使用 -zxvf。这里下载的是 tar.xz 格式,执行:

bash 复制代码
tar -Jxvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

解压后会在当前目录下生成一个类似 mysql-8.0.20-linux-glibc2.12-x86_64 的文件夹。

3.2 移动并重命名

为了路径简洁,通常我们会将 MySQL 安装到 /usr/local/mysql 下,并将版本目录重命名为 mysql8(或其他自定义名称,但需与后续配置文件保持一致)。

首先创建目标父目录(如果不存在):

bash 复制代码
mkdir -p /usr/local/mysql

然后将解压出的文件夹移动到 /usr/local/mysql/ 并重命名:

bash 复制代码
mv mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local/mysql/mysql8


为什么要重命名为 mysql8 一方面方便记忆和配置文件中引用,另一方面如果以后安装多个 MySQL 版本,可以清晰区分。

四、配置 MySQL

4.1 创建数据存放目录

根据我们后续要编写的配置文件,数据库文件将存放在 /usr/local/mysql/mysql8/data/mysql8_data 下。所以先创建该目录:

bash 复制代码
cd /usr/local/mysql/mysql8
mkdir -p data/mysql8_data

4.2 编辑 MySQL 配置文件 my.cnf

MySQL 启动时需要读取配置,我们统一将自定义配置放在 /usr/local/etc/my.cnf(也可以放在其他位置,但后续初始化命令需指定路径)。

首先创建文件:

然后用 vim 创建并编辑 my.cnf

bash 复制代码
vim /usr/local/etc/my.cnf

i 进入插入模式,粘贴以下内容:

ini 复制代码
[mysql]
default-character-set=utf8mb4

[client]
port       = 3306
socket     = /tmp/mysql.sock

[mysqld]
port       = 3306
server-id  = 3306
user       = root
socket     = /tmp/mysql.sock
# 安装目录
basedir    = /usr/local/mysql/mysql8
# 数据存放目录
datadir    = /usr/local/mysql/mysql8/data/mysql8_data
log-bin    = /usr/local/mysql/mysql8/data/mysql8_data/mysql-bin
innodb_data_home_dir      = /usr/local/mysql/mysql8/data/mysql8_data
innodb_log_group_home_dir = /usr/local/mysql/mysql8/data/mysql8_data
# 日志及进程数据存放
log-error = /usr/local/mysql/mysql8/data/mysql8_data/mysql.log
pid-file  = /usr/local/mysql/mysql8/data/mysql8_data/mysql.pid
# 服务端字符集
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 1024
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 64M
thread_cache_size = 128
tmp_table_size = 128M
explicit_defaults_for_timestamp = true
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
binlog_format=mixed
binlog_expire_logs_seconds =864000
# 默认存储引擎
default_storage_engine = InnoDB
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
transaction-isolation=READ-COMMITTED

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 4M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

说明

  • basedir 指向 MySQL 安装根目录;
  • datadir 指向我们刚刚创建的数据目录;
  • 字符集统一为 utf8mb4,支持更完整的 Unicode(包括 emoji);
  • user = root 表示以 root 用户运行 MySQL(学习环境可接受,生产建议使用专用 mysql 用户);
  • 其他参数对性能做了简单优化,可直接沿用。

Esc 退出编辑,输入 :wq 保存并退出。

五、初始化 MySQL 数据库

5.1 设置环境变量(可选,方便后续操作)

为了方便在任意路径下执行 MySQL 命令,可以将 bin 目录添加到 PATH 中。临时生效可执行:

bash 复制代码
export PATH=$PATH:/usr/local/mysql/mysql8/bin

若需永久生效,可将此行写入 /etc/profile~/.bashrc

bash 复制代码
echo 'export PATH=$PATH:/usr/local/mysql/mysql8/bin' >> ~/.bashrc
#使配置立即生效
source ~/.bashrc
bash 复制代码
echo 'export PATH=$PATH:/usr/local/mysql/mysql8/bin' >> /etc/profile
source /etc/profile

当然,也可以每次都使用绝对路径。

5.2 执行初始化

进入 MySQL 的 bin 目录(如果已配置 PATH 可省略切换):

bash 复制代码
cd /usr/local/mysql/mysql8/bin

执行初始化命令(注意参数中各项路径要与配置文件一致):

bash 复制代码
mysqld --defaults-file=/usr/local/etc/my.cnf \
       --basedir=/usr/local/mysql/mysql8 \
       --datadir=/usr/local/mysql/mysql8/data/mysql8_data \
       --user=root \
       --initialize-insecure

参数解释

  • --defaults-file:指定配置文件,必须放在 --initialize 之前;
  • --basedir:安装目录;
  • --datadir:数据文件存储目录;
  • --user=root:指定以 root 身份运行(与配置文件中的 user 一致);
  • --initialize-insecure:初始化后 root 用户无密码(若省略 -insecure 则会生成一个随机密码,记录在错误日志中)。

为什么用 --initialize-insecure? 学习环境为了方便,我们让 root 初始无密码,等首次登录后再修改。生产环境请使用 --initialize 生成随机密码并妥善保管。

初始化过程会创建系统表空间等必要文件,耐心等待执行完毕,无错误输出即表示成功。

六、启动 MySQL 服务

6.1 使用 mysqld_safe 安全启动

MySQL 的 bin 目录下有一个 mysqld_safe 脚本,它会在后台启动 MySQL 服务,并在服务异常终止时尝试重新拉起,非常适合手动管理。

执行启动命令(同样需指定配置文件):

bash 复制代码
/usr/local/mysql/mysql8/bin/mysqld_safe --defaults-file=/usr/local/etc/my.cnf &
# 若添加了PATH变量,可省略如下
mysqld_safe --defaults-file=/usr/local/etc/my.cnf &

结尾的 & 表示放入后台执行。

检查服务是否启动成功:

bash 复制代码
ps -ef | grep mysql

如果看到包含 mysqld 的进程(第二条通常就是 MySQL 服务),则说明启动成功。

七、首次登录与密码修改

7.1 登录 MySQL

由于我们初始化时选择了无密码模式,因此首次登录可以跳过密码验证:

bash 复制代码
mysql -u root --skip-password

如果之前生成了随机密码,则需要找到该密码(通常在 /usr/local/mysql/mysql8/data/mysql8_data/mysql.log 中)并使用 mysql -u root -p 输入。

7.2 修改 root 密码

出于安全考虑,首次进入系统后必须修改 root 密码。建议使用 mysql_native_password 插件,以保证兼容性(部分客户端工具可能不支持新的认证插件)。

sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
FLUSH PRIVILEGES;

FLUSH PRIVILEGES 让权限更改立即生效。

以后如果想再次修改密码,可以使用:

sql 复制代码
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');

或在 Linux 命令行下使用 mysqladmin

bash 复制代码
mysqladmin -u root -p旧密码 password 新密码

八、配置远程连接

很多时候我们需要在本地用图形化工具(如 Navicat、DBeaver)连接服务器上的 MySQL。为此,必须创建一个允许任意主机访问的用户,并开放防火墙端口。

8.1 创建远程访问用户

登录 MySQL 后,先查看当前用户表:

sql 复制代码
USE mysql;
SELECT user, host, plugin, authentication_string FROM user;

可以看到 roothost 字段为 localhost,表示只能本地登录。现在我们创建一个允许任意 IP(%)连接的 root 用户:

sql 复制代码
CREATE USER 'root'@'%';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

再次查看用户表,应该能看到两个 root 用户,其中一个 host 为 %

8.2 开放防火墙 3306 端口

MySQL 默认监听 3306 端口,需要让防火墙放行。

检查当前端口状态:

bash 复制代码
firewall-cmd --query-port=3306/tcp

若返回 no,表示未开放。

执行永久开放并重启防火墙:

bash 复制代码
firewall-cmd --add-port=3306/tcp --permanent
systemctl restart firewalld


打开 Navicat,新建 MySQL 连接,主机 IP 填写你服务器的实际 IP(可通过 ip addr 查看),端口 3306,用户名 root,密码为刚才设置的远程用户密码。

连接成功后,你就可以在图形界面中轻松管理数据库了。

九、退出与关闭 MySQL 服务

用完数据库后,可以安全退出或关闭。

在 MySQL 命令行内退出:

sql 复制代码
quit;

sql 复制代码
exit;

关闭 MySQL 服务,可以在 Linux 命令行执行:

bash 复制代码
/usr/local/mysql/mysql8/bin/mysqladmin -u root -p shutdown

输入密码后服务即停止。

总结

至此,我们完成了从卸载冲突、下载安装包、配置、初始化、启动、设置密码到开启远程访问的全部步骤。

相关推荐
Irene19918 小时前
在 WSL Ubuntu 上安装和使用 Hive
linux·hive·ubuntu
ABILI .8 小时前
Linux上安装部署k8s单机版(minikube)
linux·运维·kubernetes
量子炒饭大师8 小时前
【Linux系统编程】——【自动化构建-make/Makefile】拒绝手动编译!构建你的赛博代码加工厂,重塑逻辑矩阵效率极限
linux·运维·自动化·makefile·make·自动化构建
eggrall9 小时前
Linux信号——信号产生
linux·运维·服务器
zincsweet9 小时前
虚拟地址空间
linux
Ha_To9 小时前
26.5.19 未授权漏洞
linux·服务器·网络
ZGUIZ9 小时前
Ubuntu 25.10 蓝牙Wifi不可用解决流程
linux·运维·ubuntu
rising start9 小时前
Linux入门及相关命令
linux·运维·服务器