zoukankan      html  css  js  c++  java
  • Centos7安装MySQL8.0(RPM方式)

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


    安装包选择

    为什么用rpm?

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

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

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

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

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

    本次安装环境:

    Centos7.8 (最小安装,root权限)
    mysql 社区版8.0.16

    此处选择上传已经下载好的官方打包bundle文件mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar,也可以在官方网站分别下载未打包的多个文件。

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

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

    解压

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

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

    解压后包含8个文件,

    解压后8个文件


    安装前环境检测

    检查

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

    rpm -qa | grep -i mariadb
    

    可能结果显示

    mariadb-libs-5.5.65-1.el7.x86_64
    

    去除依赖

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

    安装

    安装顺序

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

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

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


    启动与修改密码

    启动

     systemctl start mysqld
    

    查看状态

    systemctl status mysqld
    

    查看启动状态

    查看初始随机密码

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

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

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

    使用root角色登录

    mysql -u root -p
    

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

    修改密码

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

    首次随机密码登录

    密码要求

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

    以123456为密码测试

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

    简单密码不符合规则

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

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

    开放远程登录权限

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

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

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

    use mysql;
    
    select host,user from user;
    
    update user set host='%' where user ='root';
    

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

    flush privileges;
    

    开放防火墙端口

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

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

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

    开启3306

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

    重新加载防火墙

    firewall-cmd --reload
    

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

    配置文件更改(非必须)

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

    vim /etc/my.cnf
    

    修改数据存放位置


    以下内容非必须。

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

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

    更改mysql的加密规则

    查看加密规则

    show variables like "default_authentication%";
    

    结果可能为

    修改规则

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

    此时使用Navicat连接成功。


    密码问题(非必须)

    修改密码规则

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

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

    登录MySQL

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

    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及以后的版本

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

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

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

    5.7及以前版本

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

    更改密码

    此处密码改为123456

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

    最后

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

  • 相关阅读:
    深入理解关系型数据库的数据水平切分和垂直切分
    数据库Sharding的基本思想和切分策略
    Mycat 设置全局序列号
    Spring MVC异常统一处理
    spring配置文件中bean标签
    浅析VO、DTO、DO、PO的概念、区别和用处
    CentOS7.0安装Nginx 1.7.4
    大数据的四大特点
    CentOS 7 上安装 redis3.2.3安装与配置
    CentOS7下安装MySQL5.7安装与配置(YUM)
  • 原文地址:https://www.cnblogs.com/xiyixiaodao/p/13601854.html
Copyright © 2011-2022 走看看