MySQL系统篇,安装部署(一):CentOS 7 下从卸载到登录的完整实战


文章目录
  • 系列文章目录
  • 前言
  • 一、安装前的准备与卸载
    • [1.1 卸载已有环境](#1.1 卸载已有环境)
    • [1.2 检查系统安装包](#1.2 检查系统安装包)
    • [1.3 卸载默认安装包](#1.3 卸载默认安装包)
  • [二、配置 MySQL 官方 yum 源](#二、配置 MySQL 官方 yum 源)
    • [2.1 获取官方 yum 源](#2.1 获取官方 yum 源)
    • [2.2 安装 yum 源并对比前后变化](#2.2 安装 yum 源并对比前后变化)
    • [2.3 验证 yum 源是否可用](#2.3 验证 yum 源是否可用)
  • [三、安装与启动 MySQL 服务](#三、安装与启动 MySQL 服务)
    • [3.1 安装 mysql-community-server](#3.1 安装 mysql-community-server)
    • [3.2 查看配置文件与数据目录](#3.2 查看配置文件与数据目录)
    • [3.3 启动服务并确认](#3.3 启动服务并确认)
  • [四、登录与修改 root 密码](#四、登录与修改 root 密码)
    • [4.1 方法一:用临时密码登录(推荐)](#4.1 方法一:用临时密码登录(推荐))
    • [4.2 方法二:skip-grant-tables 救急](#4.2 方法二:skip-grant-tables 救急)
    • [4.3 让服务开机自启](#4.3 让服务开机自启)
  • [五、配置 my.cnf 与编码](#五、配置 my.cnf 与编码)
  • 六、两个必踩的坑
    • [6.1 中文无法输入](#6.1 中文无法输入)
    • [6.2 安装时密钥过期](#6.2 安装时密钥过期)
  • 总结

前言

  大家好,我是曦夜日长。学数据库的第一步,往往不是写 SQL,而是先把 MySQL 装起来------而这恰恰是最容易让人劝退的一步:默认装的是 mariadb、yum 源不对、临时密码找不到、装完连不上......

  今天这篇文章,就把 CentOS 7 下从卸载旧环境 到成功登录的完整流程一次讲透,并且把两个最容易踩的坑(中文乱码、密钥过期)一并交代清楚。

说明:安装与卸载过程中,用户全部切换成 root。初期练习阶段,MySQL 先不进行用户管理,全部使用 root 进行,尽快适应 MySQL 语句;后面学了用户管理,再考虑新建普通用户。


一、安装前的准备与卸载

  CentOS 7 默认自带的是 mariadb (MySQL 的一个分支),如果不先清干净,后面装官方 MySQL 十有八九会冲突。所以第一步永远是:先卸载干净。

1.1 卸载已有环境

  先检查系统里有没有 mariadb 在跑:

bash 复制代码
[whb@VM-0-3-centos ~]$ ps ajx | grep mariadb
13134 14844 14843 13134 pts/0    14843 S+    1005   0:00 grep --color=auto mariadb
19010 19187 19010 19010 ?           -1 Sl      27  16:55 /usr/libexec/mysqld \
  --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin \
  --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid \
  --socket=/var/lib/mysql/mysql.sock

  发现有服务在跑,先停掉它:

bash 复制代码
[whb@VM-0-3-centos ~]$ systemctl stop mariadb.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
Authentication is required to manage system services or units.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ====

  再确认一次,只剩下 grep 自己那条进程,说明已经停干净:

bash 复制代码
[whb@VM-0-3-centos ~]$ ps axj | grep mariadb
13134 14976 14975 13134 pts/0    14975 S+    1005   0:00 grep --color=auto mariadb

1.2 检查系统安装包

  停掉服务还不够,安装包也要查出来卸掉。分别检查 mariadb 和 mysql:

bash 复制代码
[whb@VM-0-3-centos ~]$ rpm -qa | grep mariadb
# 或
[whb@VM-0-3-centos ~]$ rpm -qa | grep mysql

  如果之前装过 MySQL,会打印出类似这样的一串包:

bash 复制代码
[root@bite-alicloud mysql]# rpm -qa | grep mysql
mysql-community-common-5.7.41-1.el7.x86_64
mysql-community-server-5.7.41-1.el7.x86_64
mysql57-community-release-el7-11.noarch
mysql-community-client-5.7.41-1.el7.x86_64
mysql-community-libs-5.7.41-1.el7.x86_64

1.3 卸载默认安装包

  把这些包一个一个卸掉:

bash 复制代码
[whb@VM-0-3-centos ~]$ sudo yum remove mariadb

卸载前记得备份 /etc/my.cnf 配置文件 ,以及 /var/lib/mysql 数据目录。数据无价,这一步别省。


二、配置 MySQL 官方 yum 源

2.1 获取官方 yum 源

  MySQL 官方的 yum 源地址是 http://repo.mysql.com/。这里有个关键提醒:

最好安装和自己系统版本一致的 MySQL 源,否则可能存在软件兼容性问题。先查看自己的系统版本:

bash 复制代码
[root@VM-0-2-centos ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

然后进入 http://repo.mysql.com/,找一下和自己版本一致的资源,下载到本地,再上传到 Linux 服务器。

2.2 安装 yum 源并对比前后变化

  安装前,先看一眼本地的 yum 源目录(你会发现自己机器上的和我的不同,但共同点是------都没有 MySQL 相关的源):

bash 复制代码
[whb@VM-0-3-centos 9.9]$ ls
mysql57-community-release-el7-10.noarch.rpm

[whb@VM-0-3-centos 9.9]$ ls /etc/yum.repos.d/ -al
-rw-r--r--    1 root root  2523 Dec 26 19:31 Centos-Base.repo
-rw-r--r--    1 root root  1309 Apr  8  2020 CentOS-CR.repo
-rw-r--r--    1 root root   649 Apr  8  2020 CentOS-Debuginfo.repo
-rw-r--r--    1 root root  1919 Apr  8 23:57 docker-ce.repo
-rw-r--r--    1 root root  1050 Nov  1 04:33 epel.repo
...

  安装 yum 源。这里有个很典型的报错 ------不加 sudo 会因为权限不足失败:

bash 复制代码
[whb@VM-0-3-centos 9.9]$ rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
warning: mysql57-community-release-el7-10.noarch.rpm: Header V3 DSA/SHA1 \
  Signature, key ID 5072e1f5: NOKEY
error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)

  加上 sudo 即可:

bash 复制代码
[whb@VM-0-3-centos 9.9]$ sudo rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:mysql57-community-release-el7-10 ################################# [100%]

  安装后再看目录,多出了两个 mysql 相关的源文件,这就说明源装上了:

bash 复制代码
-rw-r--r--    1 root root  1627 Apr  5  2017 mysql-community.repo        # 安装了 mysql yum 源
-rw-r--r--    1 root root  1663 Apr  5  2017 mysql-community-source.repo

2.3 验证 yum 源是否可用

  看看能不能正常工作:

bash 复制代码
[whb@VM-0-3-centos 9.9]$ yum list | grep mysql
Repository epel is listed more than once in the configuration
mysql57-community-release.noarch           el7-10                 installed
akonadi-mysql.x86_64                       1.9.2-4.el7            base
anope-mysql.x86_64                         2.0.9-3.el7            epel
...

  能列出 mysql 相关的包,说明 yum 源配置成功。


三、安装与启动 MySQL 服务

3.1 安装 mysql-community-server

  一条命令装服务端(会自动带上依赖):

bash 复制代码
[whb@VM-0-3-centos 9.9]$ sudo yum install -y mysql-community-server
...
  Installing : mysql-community-common-5.7.33-1.el7.x86_64    # 公共模块
  Installing : mysql-community-libs-5.7.33-1.el7.x86_64      # 库
  Installing : mysql-community-client-5.7.33-1.el7.x86_64    # 客户端
  Installing : mysql-community-server-5.7.33-1.el7.x86_64    # 服务器

  可以看到,一次装上了公共模块、库、客户端、服务器四个包。

3.2 查看配置文件与数据目录

  装完先确认两件事:配置文件在哪、数据存在哪。

bash 复制代码
[whb@VM-0-3-centos 9.9]$ ls /etc/my.cnf
/etc/my.cnf

[whb@VM-0-3-centos 9.9]$ sudo ls /var/lib/mysql
....

记住这两个路径:/etc/my.cnf 是配置文件 ,/var/lib/mysql 是数据存储位置。后面改配置、排查问题都绕不开它们。

3.3 启动服务并确认

  启动 MySQL 服务:

bash 复制代码
[whb@VM-0-3-centos 9.9]$ systemctl start mysqld.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
Authentication is required to manage system services or units.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ====

  再确认服务是不是真的起来了:

bash 复制代码
[whb@VM-0-3-centos 9.9]$ ps axj | grep mysqld
    1 23183 23182 23182 ?           -1 Sl      27   0:00 /usr/sbin/mysqld \
      --daemonize --pid-file=/var/run/mysqld/mysqld.pid
13134 23243 23242 13134 pts/0    23242 S+    1005   0:00 grep --color=auto mysqld

  能看到 /usr/sbin/mysqld --daemonize 这条进程,说明服务正常运行了。


四、登录与修改 root 密码

  MySQL 5.7 装完后,root 是有一个临时密码 的,藏在日志里。下面说两种登录方式,方法一不行再用方法二。

4.1 方法一:用临时密码登录(推荐)

  先从日志里把临时密码捞出来:

bash 复制代码
[whb@VM-0-3-centos 9.9]$ sudo grep 'temporary password' /var/log/mysqld.log
2021-04-12T03:23:46.153263Z 1 [Note] A temporary password is generated for \
  root@localhost: yLMalT:v+5l*

  用这个临时密码登录:

bash 复制代码
[whb@VM-0-3-centos 9.9]$ mysql -uroot -p
Enter password:

  登录后第一件事是改密码。但 MySQL 5.7 默认开启密码强度校验,直接改简单密码会被拒绝,所以先把它关掉:

sql 复制代码
-- 关闭密码安全强度校验,默认为中(即 1),要求必须包含数字、符号、大小写字母,长度至少 8 位
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

-- 设置密码最小长度
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

-- 修改本地登录密码,暂不授权远程登录
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'qwer@wu.888';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

如果你安装的是比较新的 MySQL 版本,可能没有所谓的临时密码,root 默认没有密码 ,直接 mysql -uroot 试着登录一下即可。

4.2 方法二:skip-grant-tables 救急

  如果密码彻底找不到了,可以用 skip-grant-tables 跳过权限验证救急。打开配置文件:

bash 复制代码
[root@bite-alicloud mysql]# vim /etc/my.cnf
# 在 [mysqld] 最后添加(不知道加哪就放配置文件最后):
skip-grant-tables

  重启服务后就能免密登录了:

bash 复制代码
[root@bite-alicloud mysql]# systemctl restart mysqld
[root@bite-alicloud mysql]# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.41 MySQL Community Server (GPL)
...
mysql>

注意:skip-grant-tables 是应急手段 ,登录改完密码后记得把它从 my.cnf 里删掉并重启,否则数据库等于没有权限保护,非常危险。

4.3 让服务开机自启

  不想每次开机都手动启服务的话,设置一下开机自启(可以不设):

bash 复制代码
systemctl enable mysqld
systemctl daemon-reload

五、配置 my.cnf 与编码

  最后配置一下 my.cnf,主要是数据库客户端和服务器的编码格式。先看看默认长什么样:

bash 复制代码
[whb@VM-0-3-centos 9.9]$ cat /etc/my.cnf

  关键的几项配置如下:

ini 复制代码
[mysql]
# default-character-set=utf8  暂不设置,mysql 有 bug,汉字不回显

[mysqld]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
default-storage-engine=innodb

  配置完毕,重启 MySQL 即可生效。

这里有个细节值得注意:[mysql] 段的 default-character-set=utf8 是暂时不设置 的,因为 MySQL 有个 bug 会导致汉字不回显。而 [mysqld] 段的 character-set-server=utf8 才是服务端编码的正解。


六、两个必踩的坑

6.1 中文无法输入

  明明已经配置了客户端、服务器都是 utf8 编码,却无法输入中文。先确保你在终端命令行里能输入中文,检查语言环境变量:

bash 复制代码
[whb@VM-0-3-centos ~]$ env | grep LANG
LANG=en_US.utf8

6.2 安装时密钥过期

  安装过程中可能遇到 GPG 密钥过期:

bash 复制代码
Failing package is: mysql-community-client-5.7.39-1.el7.x86_64
 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

  解决方案是重新导入官方密钥:

bash 复制代码
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

总结

  这就是本节的全部内容了。我们完整走了一遍 CentOS 7 下 MySQL 5.7 的安装部署流程:卸载 mariadb 旧环境 → 检查并卸载残留安装包 → 配置官方 yum 源 → 安装服务端 → 启动服务 → 用临时密码登录并改密码(备用 skip-grant-tables)→ 配置 my.cnf 编码,最后交代了中文乱码和密钥过期两个高频坑。

  环境装好了,我们就能正式开始玩数据库了。但数据库到底是什么?它和文件存储有什么区别?SQL 又分哪几类、MySQL 的存储引擎是什么?这些就是我们下一节的内容了。

  感谢您的阅读,我们下次再见。


相关推荐
路上有只喵1 小时前
认识立创商城元器件 · 贴片电容 MLCC · 国巨CC0603KRX7R9BB104规格书解读4
数据库
微学AI1 小时前
260多条异构链路背后,KFS如何同步数据库结构变化
数据库
努力进修1 小时前
多源异构数据库同步难题:DDL 结构变更自动化解决方案
运维·数据库·自动化
Anastasiozzzz1 小时前
InnoDB 为什么不用跳表,Redis 为什么不用 B+树?一场“磁盘”与“内存”的终极对决
数据库·redis·b树
天空属于哈夫克31 小时前
企业微信API开发:如何实现外部群消息关键词统计?
数据库·企业微信
小马不起床1 小时前
第七阶段:数据存储与部署
数据库·python
PegasusYu1 小时前
Node.js使用nedb轻量级数据库测试脚本
数据库·electron·node.js·脚本·测试·轻量级·nedb
AI源码2 小时前
PC 手机电商(MySQL 版)
数据库·mysql·智能手机
茉莉玫瑰花茶2 小时前
GO [ context 原理解析 ]
数据库·oracle·iphone