人生处处皆学问,工作也是如此!过去不止一次在Linux上安装MySQL,可以说轻车熟路,但是写篇文章总结一下,发现有很多细节值得学习!

安装包选择

为什么用rpm?

在Linux系列上安装软件一般有源码编译安装、rpm(或者dpkg)、yum等方式,优劣主要体现在是否需要网络环境、是否能自动检测依赖,升级和卸载是否方便等。作为非运维人员,也需基本了解。

源码安装支持离线,但即使可以自动创建 Makefile等文件简化安装,整个过程也比较复杂,升级和卸载更麻烦。针对一些没有官方释出的软件,只能选择这种方式。

yum方式可以自动监测依赖,并且安装过程中可以将安装信息写入系统的软件管理程序,升级卸载都比较方便。缺点是多数情况下需要良好的网络环境,尤其是一些没有国内镜像的软件,速度感人。(事实上,有些情况也可以在rpm包所在的目录下以离线方式使用yum,前提是各种依赖都在本地具备)。

rpm相当于官方编译好的安装包,支持离线,能够检测依赖,但部分软件没有rpm包。所以说一定程度上rpm具备了上述两种方式的有点。

实际情况下,要根据具体的环境选择,一般来说rpm优先于源码。

本次安装环境:

Centos7.8 2003 (最小安装,root权限)

mysql 社区版8.0.16

此处选择上传已经下载好的官方打包bundle文件,也可以在官方网站分别下载未打包的多个文件。

mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar

或者在线下载(也可以在本地直接将wget后面的地址复制到浏览器地址栏,将自动开始下载)

  1. wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar

解压

注意此处解压命令是,-xvf 没有z

  1. tar -xvf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar

解压后包含8个文件,

安装前环境检测

检查

在MySQL被收购后,MySQL最初的作者担心MySQL存在闭源的风险,在MySQL的分支上开发了mariadb。后来一些Linux分发版就将mariadb作为系统默认安装的数据库系统,理论上mariadb兼容MySQL,甚至某些方面性能更好。(当然,我没有测试过)

  1. rpm -qa | grep -i mariadb

可能结果显示

  1. mariadb-libs-5.5.65-1.el7.x86_64

去除依赖

  1. rpm -ev --nodeps mariadb-libs-5.5.65-1.el7.x86_64

安装

安装顺序

应当按照common–>libs–>client–>server的顺序安装,否则安装过程会提醒依赖顺序,其他的为非必须安装包。

  1. rpm -ivh mysql-community-common-8.0.16-2.el7.x86_64.rpm
  2. rpm -ivh mysql-community-libs-8.0.16-2.el7.x86_64.rpm
  3. rpm -ivh mysql-community-client-8.0.16-2.el7.x86_64.rpm
  4. rpm -ivh mysql-community-server-8.0.16-2.el7.x86_64.rpm

正如文章开始提到的,也可以在解压后的安装包文件下使用yum命令代替rpm(非必须)

  1. yum install mysql-community-common-8.0.16-2.el7.x86_64.rpm
  2. ...

启动与修改密码

启动

  1. systemctl start mysqld

查看状态

  1. systemctl status mysqld

查看初始随机密码

  1. cat /var/log/mysqld.log | grep password

结果类似下面内容,则初始密码为tC0;+kB?BqCg

  1. 2020-09-02T05:30:06.739311Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: tC0;+kB?BqCg

使用root角色登录

  1. mysql -u root -p

粘贴或输入初始密码,注意,Linux为了安全,MySQL命令行上可能没有反应或者****,但密码已经输入

修改密码

第一次使用随机生成的密码登录后必须修改密码,否则无法进行其他操作。

密码要求

按照MySQL8.0默认的密码组件,此时的密码要求是必须包含数字,大小写字母,特殊字符,且长度不低于8位,否则会提示密码不符合规则。建议按照这种方式设置,如果想将密码设置成123456这种简单形式(养成良好习惯,不建议),请看本文最后一部分,密码问题。

以123456为密码测试

  1. ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

此处我们将密码设置为Root.123456 注意R大写,t后有英文句号。

  1. ALTER user 'root'@'localhost' IDENTIFIED BY 'Root.123456';

开放远程登录权限

此时只能以root角色登录,同样出于安全,MySQL的root角色只能在本地登录,正规的做法应当是用root权限分配其他不同角色供远程登录。

但这里还是强行开启root角色的远程登录权限,否则再写角色分配相关的内容,文章就成了太长不看系列了。

开放权限的本质是在数据库mysql中修改user表的host属性,使其可以被本地之外的IP连接

  1. use mysql;
  2. select host,user from user;
  3. update user set host='%' where user ='root';

执行以上语句之后在执行刷新权限:

  1. flush privileges;

开放防火墙端口

开启root远程登录权限后,还无法直接被外界连接,因为MySQL的端口号3306在Linux中默认关闭的。

注意:使用阿里云等云服务器还需要在控制台中安全组策略打开端口,此处省略。

查询3306端口是否开启

  1. firewall-cmd --query-port=3306/tcp

开启3306

  1. firewall-cmd --zone=public --add-port=3306/tcp --permanent

重新加载防火墙

  1. firewall-cmd --reload

此时我们的程序已经可以直接连接MySQL了。

配置文件更改(非必须)

要修改mysql数据和日志存放位置等信息,配置文件是/etc/my.cnf,直接修改保存位置。

  1. vim /etc/my.cnf

以下内容非必须。

Navicat等工具远程连接问题(非必须)

在使用Navicat或者Sqlyog工具时,较新的版本已经可以直接连接,所以开始此步骤前可以使用Navicat测试连接是否成功。

但旧版本Navicat连接mysql8.0时,可能无法与mysql的加密规则匹配,导致连接失败。此处的加密规则说的是对你的密码进行加密保存时采用的算法。

更改mysql的加密规则

查看加密规则

  1. show variables like "default_authentication%";

结果可能为

修改规则

  1. alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

此时使用Navicat连接成功。

密码问题(非必须)

修改密码规则

注意:若依照前面说的规则设置复杂的密码,这一步骤直接可以省略。

再次啰嗦,建议将密码设置为复杂程度较高的(前提是不要忘记)。若仍然要将密码设置为简单的,往下看。

登录MySQL

查看密码规则要求(正常情况下已经默认安装了密码相关组件)

  1. SHOW VARIABLES LIKE 'validate_password.%';

validate_password.policy的值

可以使用数字值0、1、2或相应的符号值LOW,MEDIUM,STRONG来指定validate_password.policy值

Policy Tests Performed
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file

如果想使用类似于123456形式的简单密码,需要更改密码规则和密码长度

mysql8.0及以后的版本

  1. set global validate_password.policy=0;
  2. set global validate_password.length=1;

实际上,密码长度即使设为1,其最小长度也不会小于下面函数的值,即默认长度始终不会小于4

  1. validate_password.number_count+ validate_password.special_char_count
  2. + (2 * validate_password.mixed_case_count)

5.7及以前版本

  1. set global validate_password_policy=0;
  2. set global validate_password_length=1;

更改密码

此处密码改为123456

  1. ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

最后

比起整个流水化的安装过程,其实更值得深思的是,仅仅一个密码设置和保存,MySQL就提供了不同的组件,设置了不同的规则和策略,尽最大程度去平衡方便和安全,某种意义上说,也是值得我们学习的匠心吧!

Centos7安装MySQL8.0(RPM方式)的更多相关文章

  1. Centos7安装MySQL8.0

    请到这个地址看:https://www.cnblogs.com/kevingrace/p/10482469.html Centos7安装MySQL8.0 - 操作手册 一.yum安装方式: 卸载之前版 ...

  2. <亲测>CentOS7 安装mysql8.0(YUM方式)

    CentOS7 安装mysql(YUM方式)   1.下载mysql源安装包 shell> wget http://dev.mysql.com/get/mysql80-community-rel ...

  3. Centos7安装MySQL8.0 - 操作手册

    MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 一.  Mysql8.0版本相比之前版本的一些特性 1) ...

  4. CentOS7安装MySQL8.0小计

    之前讲配置文件和权限的时候有很多MySQL8的知识,有同志说安装不太一样,希望发个文,我这边简单演示一下 1.环境安装 下载MySQL提供的CentOS7的yum源 官方文档:<https:// ...

  5. CentOS7安装mysql8.0编译报错集合

    以下都是我安装mysql8.0遇到的一些报错和解决方法 1.does not appear to contain CMakeLists.txt. 原因:mysql下载的源码包不对 解决方法:下载正确的 ...

  6. Centos7 安装mysql-8.0.13(rpm)

    yum or rpm? yum安装方式很方便,但是下载mysql的时候从官网下载,速度较慢. rpm安装方式可以从国内镜像下载mysql的rpm包,比较快.rpm也适合离线安装. 环境说明 操作系统: ...

  7. Centos7 安装mysql-8.0.18(rpm)

    1.前言 当前MySQL最新版本:8.0.18 (听说比5.7快2倍)官方之前表示:MySQL 8.0 正式版 8.0.18 已发布,MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量 ...

  8. CentOS7安装MySQL8.0图文教程

    1.下载 MySQL 所需要的安装包 网址:https://dev.mysql.com/downloads/mysql/ 2.Select Operating System: 选择 Red Hat , ...

  9. CentOS7安装mysql8.0.12

    一.配置yum源 下载mysql源安装包 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/ 复制下载链接:https://d ...

随机推荐

  1. observeParents的使用

    observeParents参数 是布尔类型  默认false 在tab切换选项中有轮播图,切换后轮播图就不播了,并且显示也出现了问题,就可以使用observeParents 用法为 <scri ...

  2. Activiti7 流程变量(UEL-Value方式)

    需求:请假天数大于3天走总经理审批,小于等于3天直接走人事 画图 因为IDEA不展示那个线上的东西,所以截屏自己写的,还有就是我感觉IDEA画图挺坑的,之前画了好几遍,一部署就报错,很奇怪 /** * ...

  3. [极客大挑战 2019]Secret File wp

    通过标题考虑可能为文件包含漏洞方面 打开网页 从页面并没任何思路,查看源代码 得到有一个跳转到./Archive_room.php的超链接,打开Archive_room.php 中央有一个secret ...

  4. swift基本体验

    Swift初体验 1. 导入框架 2. 定义标识符: let/var 3. 语句结束时;可以省略 4. print() 5. let/var 6. 逻辑分支 7. 循环使用 // 1.Swift中如何 ...

  5. 学习go的一些笔记

    反射 reflect type CfgSt struct{ Match *int64 `ini:"match"` Desc string `ini:"desc" ...

  6. [LeetCode]子串的最大出现次数(字符串)

    题目 给你一个字符串 s ,请你返回满足以下条件且出现次数最大的 任意 子串的出现次数: 子串中不同字母的数目必须小于等于 maxLetters . 子串的长度必须大于等于 minSize 且小于等于 ...

  7. 我的Python自学之路-003 字符串的知识

    '''字符串是以引号或者单引号括起来的任意文本,例如"123","asdfjk",'adfa'引号或者单引号,只是一种表示方法,并不是字符串的一部分如果字符串本 ...

  8. axios+Qs请求数据转表单格式

    import axios from 'axios' import qs from 'qs' axios.post('http://localhost:8888/baseitem/update', qs ...

  9. flutter权限管理permission_handler

    flutter权限管理permission_handler 添加依赖 #权限 permission_handler: ^3.0.0 使用 在android的mainfest中添加权限: <use ...

  10. CAS导致的ABA问题以及解决方案

    CAS算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化. 上篇文章讲到CAS会出现一个ABA问题.那什么是ABA问题呢? 官方一点的解释就是:当 ...