文章目录
- 系列文章目录
- 前言
- 一、安装前的准备与卸载
- [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 的存储引擎是什么?这些就是我们下一节的内容了。
感谢您的阅读,我们下次再见。