原本云服务器中安装的mysql版本是5.7,现在想将其替换为mysql8.0版本。主要是因为官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!因此在安装前就需要先卸载旧版的mysql,防止出现不必要的冲突问题。
MySQL 推荐使用 RPM 包进行 Linux 平台下的安装,因为 RPM 包的安装和卸载都很方便,通过简单的命令就可以实现。下文中的卸载、安装过程都是基于RPM进行操作。
[root@VM-12-7-centos ~]# rpm -qa | grep -i mysql
mysql-community-common-8.0.25-1.el7.x86_64
mysql-community-client-8.0.25-1.el7.x86_64
mysql-community-libs-8.0.25-1.el7.x86_64
mysql-community-client-plugins-8.0.25-1.el7.x86_64
mysql-community-server-8.0.25-1.el7.x86_64
结果显示当前 Linux 上安装的 MySQL 8.0 版本,具体以自己系统显示为准。
# 停止mysql服务
[root@VM-12-7-centos ~]# systemctl stop mysqld
# 卸载旧版mysql的RPM包,需要将-e后的参数替换为自己当前系统安装的rpm包
[root@VM-12-7-centos ~]# rpm -e mysql-community-server-8.0.25-1.el7.x86_64
注意:
####3.1)、查找系统中所有的 MySQL 的目录,进行删除。
# 从根目录进行查找所有的mysql文件夹
[root@VM-12-7-centos ~]# find / -name mysql
# 将查找到的目录文件进行删除
[root@VM-12-7-centos ~]# rm -rf 【要删除的mysql目录】
注意:
注意:
百度Centos:CentOS是免费的、开源的、可以重新分发的开源操作系统 [1] ,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一。CentOS Linux发行版是一个稳定的,可预测的,可管理的和可复现的平台,源于[Red Hat Enterprise Linux](https://baike.baidu.com/item/Red Hat Enterprise Linux/10770503?fromModule=lemma_inlink)(RHEL)依照开放源代码(大部分是GPL开源协议 [2] )规定释出的源码所编译而成。
当前系统安装环境为 CentOS Linux release 7.6.1810 (Core) ,选用 el7 的安装包。根据自己的系统来选择相对应的安装包。如果安装包对应的系统版本不正确,安装时会出现有关 glibc 的依赖错误。
1.3.1 查看当前系统的内核或者系统版本(选择相应的el)
查看Linux内核版本命令(可以看到看到当前测试系统需要使用el7的rpm)
方式1:cat /proc/version
[root@VM-12-7-centos ~]# cat /proc/version
Linux version 3.10.0-1160.45.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Oct 13 17:20:51 UTC 2021
方式2:uname -a
[root@VM-12-7-centos ~]# uname -a
Linux VM-12-7-centos 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
查看Linux系统版本的命令
方式1:cat /etc/redhat-release,只适合Redhat系的Linux
[root@VM-12-7-centos ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
方式2:cat /etc/centos-release,只适用于Centos系统
[root@VM-12-7-centos ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
方法3:(来源网络,当前系统测试不可用)lsb_release -a,即可列出所有版本信息,这个命令适用于所有的Linux发行版,包括RedHat、SUSE、Debian…等发行版。
方式4:(来源网络,当前系统测试,查看文件为空,没有版本信息)cat /etc/issue,此命令也适用于所有的Linux发行版。
1.3.2 如何选择安装那些rpm包?
将 Bundle 包上传至指定位置(也可以仅仅下载需要安装的包上传到系统指定位置为安装做准备),推荐在操作系统上创建上传目录/soft,并放于该目录下解压,不管是 Bundle 包上传目录、软件安装目录,还是数据存放目录,都要提前做好规划。下面将 TAR包解压,并简要说明各个 RPM 包,以便大家深入理解这些 RPM 包的功能和作用,知道在什么样的场景下安装什么样的包。Bundle 包中各类 RPM 文件的说明如下表所示。
RPM包名称 | 概要 |
---|---|
mysql-community-server | 数据库服务器和相关工具 |
mysql-community-client | MySQL 客户端应用程序和工具 |
mysql-community-client-plugin | MySQL 客户端y应用程序插件 |
mysql-community-common | 服务器和客户端通用的库文件 |
mysql-community-devel | MySQL 数据库客户端应用程序开发的头文件和库文件 |
mysql-community-libs | 用于 MySQL 数据库客户端应用程序的共享库 |
mysql-community-libs-compat | 对于之前 MySQL 安装的共享兼容性库 |
mysql-community-embedded | MySQL 嵌入式库 |
mysql-community-embedded-devel | 嵌入式的 MySQL 开发头文件和库文件 |
mysql-community-test | MySQL 服务器的测试套件 |
通常来讲,为了满足绝大部分场景需求,建议至少安装下列的这些 RPM 包,以获得功能强大的 MySQL 标准安装特性。
# 对于当前安装的mysql8.0.25,需要安装一下安装包,并且需要依照顺序,其中存在依赖关系,否则会出现安装依赖问题。
第一个:mysql-community-common
第二个:mysql-community-client-plugins
第三个:mysql-community-libs
第四个:mysql-community-client
第五个:mysql-community-server
将下载的安装包上传到服务器中,切换到 root 用户。按照依赖关系依次安装 rpm 包,依赖关系依次为 common→plugins→libs→client→server。使用命令rpm -ivh {-file-name}
进行安装操作。
注意:
# ivh 中,i-install 参数表示安装后面的一个或多个 RPM 软件包;v-verbose 参数表示安装过程中显示详细的信息;h-hash 参数表示使用“#”来显示安装进度。
[root@VM-12-7-centos ~]# rpm -ivh mysql-community-common-8.0.25-1.el7.x86_64.rpm
[root@VM-12-7-centos ~]# rpm -ivh mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
[root@VM-12-7-centos ~]# rpm -ivh mysql-community-libs-8.0.25-1.el7.x86_64.rpm
[root@VM-12-7-centos ~]# rpm -ivh mysql-community-client-8.0.25-1.el7.x86_64.rpm
[root@VM-12-7-centos ~]# rpm -ivh mysql-community-server-8.0.25-1.el7.x86_64.rpm
注意:有些版本的可能安装前需要安装一些前置依赖包,可以先尝试安装确定需要该依赖再进行安装
# mysql可能需要的安装依赖包
[root@VM-12-7-centos ~]# yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6 libncurses.so.5 --setopt=protected_multilib=false
[root@VM-12-7-centos ~]# yum update libstdc++-4.4.7-4.el6.x86_64
MySQL 服务的操作命令是:(不同版本服务名不同:mysqld或者mysql)
systemctl status|start|stop|restart|disable|enable mysqld
以上几个参数的意义如下:
使用 RPM 包安装时,系统不会提示各种文件安装在哪个文件夹下。下面介绍每个主要的文件在什么目录下,MySQL 服务器目录以及子目录如下表所示:
文件夹 | 文件夹内容 |
---|---|
/usr/bin | 客户端和脚本(mysqladmin、mysqldump 等命令) |
/usr/sbin | mysqld 服务器 |
/var/lib/mysql | 日志文件、socket 文件和数据库 |
/usr/share/info | 信息格式的手册 |
/usr/share/man | UNIX 帮助页 |
/usr/include/mysql | 头文件 |
/usr/lib/mysql | 库 |
/usr/share/mysql | 错误消息、字符集、安装文件和配置文件等 |
/etc/rc.d/init.d/ | 启动脚本文件的 mysql 目录,可以用来启动和停止 MySQL 服务 |
mysql配置文件位置
Linux 操作系统中 MySQL 的配置文件是 my.cnf,一般会放在 /etc/my.cnf 或 /etc/mysql/my.cnf 目录下。总的来说,my.cnf 类似于 my.ini 配置文件。如果编辑并保存 my.cnf 文件后,必须重新启动 MySQL 服务,这样 my.cnf 中的配置才会起作用。
服务启动后,查找 root 初始随机密码(如果没有初始密码,直接输入用户名 root 登录即可)
首选:cat /var/log/mysqld.log | grep 'temporary password is generated'
备选:mysql 安装完成之后, 会自动生成一个随机的密码, 并且保存在一个密码文件中 : /root/.mysql_secret
步骤1:使用以下命令登录 MySQL。
mysql -uroot -p[查询到的默认密码]
步骤2:可使用以下命令修改密码
# 该命令会提示密码不符合规则,因此我们需要设置一个和默认密码类似的密码,否则无法进行下面操作
set password='root';
在mysql 初始化时,使用临时密码,修改自定义密码时,由于自定义密码比较简单,就出现了不符合密码策略的问题。
# 密码策略问题异常信息:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
步骤1:查看 mysql 初始的密码策略
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.01 sec)
步骤2:设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可
mysql> set global validate_password.policy=LOW;
Query OK, 0 rows affected (0.00 sec)
关于 mysql 密码策略相关参数;
步骤3:当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可。
mysql> set global validate_password.length=6;
Query OK, 0 rows affected (0.00 sec)
步骤4:现在可以为 mysql 设置简单密码了,只要满足六位的长度即可。
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’;
#刷新权限命令(一般用于数据库用户信息更新后 新增用户或者修改用户权限)
FLUSH PRIVILEGES;
#另外一种方法:就是重启mysql服务器也可以刷新权限
注意:
在默认密码的长度最小值为 4 ,由 大/小写字母各一个 + 阿拉伯数字一个 + 特殊字符一个,只要设置密码的长度小于 3 ,都将自动设值为 4 。
步骤1:登陆mysql,并选择使用mysql数据库
mysql -uroot -p123456
# mysql 数据库中存储了用户信息的 user 表。需要对连接使用的用户进行表修改
use mysql;
步骤2:在 mysql 数据库的 user 表中查看当前 root 用户的相关信息
# 不要直接星号查询所有列,会显示信息过多不便于查看
mysql> select host, user, authentication_string, plugin from user \G;
*************************** 1. row ***************************
#这里host列为localhost,表示只允许主机连接,修改为%,就可以远程连接了
host: localhost
user: root
authentication_string: $A$005$_A
QK#=(Tx
aZ_6WNubBG5qAAu92ch3a7yrv8aHeG446jdjXct2LtmN58oRLP7
plugin: caching_sha2_password
*************************** 2. row ***************************
host: localhost
user: mysql.infoschema
authentication_string: $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
plugin: caching_sha2_password
*************************** 3. row ***************************
host: localhost
user: mysql.session
authentication_string: $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
plugin: caching_sha2_password
*************************** 4. row ***************************
host: localhost
user: mysql.sys
authentication_string: $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
plugin: caching_sha2_password
4 rows in set (0.00 sec)
ERROR:
No query specified
步骤3:修改root用户的host列为%
# % 表示通配所有 host,可以访问远程。
update user set host='%' where user='root';
步骤4:查看 root 用户的 host
再次执行步骤 2,你会发现 root 用户的 host 已经变成 %,说明我们的修改已经成功,可以远程访问了。
在MySQL8.0之前,身份验证的插件是mysql_native_password,在MySQL 8.0中,caching_sha2_password 是默认的身份验证插件,安全性更高。
故障的原因可以猜测为:在从库连接主库的时候使用的是不被 caching_sha2_password认可的RSA公钥,所以主库MySQL拒绝了数据库连接的请求,从而,从库报错’caching_sha2_password’ reported error:Authentication require secure connection。
步骤1:查看用户密码加密规则
mysql> select user,plugin from user;
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| root | caching_sha2_password |
| mysql.infoschema | caching_sha2_password |
| mysql.session | caching_sha2_password |
| mysql.sys | caching_sha2_password |
+------------------+-----------------------+
4 rows in set (0.00 sec)
步骤2:直接修改用户加密规则为mysql_native_password
mysql> update user set plugin='mysql_native_password' where user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select user,plugin from user;
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| root | mysql_native_password |
| mysql.infoschema | caching_sha2_password |
| mysql.session | caching_sha2_password |
| mysql.sys | caching_sha2_password |
+------------------+-----------------------+
4 rows in set (0.00 sec)
远程访问数据库的可视化工具比较多如:Navicat、SQLyog、MySQL workbench 等,我这里使用 Navicat
输入访问的 host 和密码,报 2059 错误,这是因为 MySql8.0 版本 和 5.0 的加密规则不一样,而现在的可视化工具只支持旧的加密方式。
此问题有两种方法,一种是更新 Navicat 驱动来解决此问题,另一种是将 MySQL 用户登录的加密规则修改为 mysql_native_password,请采用第二种方法。
# password 为你当前密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
# 更新 root 用户密码,password 为你新设置的密码。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
# 刷新权限
FLUSH PRIVILEGES;