安装Centos7 、 Mysql8 集群,实现读写分离 高可用(二)-- 数据库安装篇

本文详细介绍了在CentOS7环境下安装MySQL8的过程,包括前期准备、硬件规划、安装步骤、密码设置、远程访问配置及防火墙设置等内容。

零、写在前面

        为了尝试新技术和业务需要,因此打算搞一套这样的环境玩儿一下

        本系列的各篇链接如下

编号标题
1、(一)-- 操作系统安装篇
2、(二)-- 数据库安装篇
3、(三)-- 主从设置
4、(四)-- MyCat读写分离
5、(五)-- MyCat配置详解

  

一、硬件规划

    我用的是自己的本机(8核、16G),划分出三台虚拟机(一主两从--MySQL)

主机名IPCPU内存用途备注
centos7One192.168.122.2124主/写(MySQL)主(Redis)Mysql8/Redis4/Centos7
centos7Two192.168.122.2212从/读(MySQL)主(Redis)Mysql8/Redis4/Centos7
centos7Three192.168.122.2312从/读(MySQL)从(Redis)Mysql8/Redis4/Centos7
centos7Four192.168.122.2412从(Redis)Redis4/Centos7

    基本的规划就是如上面所写

    后续会在这四台服务器上安装redis的集群

二、聊聊其他

    1、 网上好多种安装mysql8的方法,我最开始使用的是编译安装的方式,这种方式的最大缺点就是过程较慢

        特别是make这一步,需要好久好久。。。然后一旦有问题就会彻底崩溃,如果你像我一样没把握

        建议还是像我一样使用更靠谱的yum方式安装比较好

    2、 请先参考这篇文章 https://www.cnblogs.com/LiuChunfu/p/8052890.html

        这篇文章先阐述了一下rpm和yum之间的关联关系,同时也介绍了linux下各个文件夹的一些作用。很不错

三、安装Mysql8

    0、 建立新用户和删除老版本

        如果在安装系统的时候,没有为mysql创建独立的用户和划分独立的空间,那么需要在这里建立一下

        创建用户组和用户
            groupadd mysql
            useradd -r -g mysql -s /mysql
        找到原先安装的mysql的rpm和依赖
            rpm -qa | grep -i mysql

        如果有显示结果,那么使用下面的命令逐个删除
            yum remove mysql xxx    (1、mysql关键字不要忘, 2、xxx就是要删除的文件名) 
        以上的操作不会删除mysql 的配置文件,需要手动操作
            find / -name mysql
        找到所有相关的MySQL的配置信息,然后逐条删除即可
            rm -rf xxx    (xxx)就是配置文件
        由于Mysql在Centos7中收费了,所以Centos7开始免费集成的数据库是MariaDB而安装Mysql会和MariaDB冲突,
        因此需要先删除MariaDB,首先搜索
            rpm -pa | grep mariadb
        可能看到的结果如下
            mariadb-libs-5.5.56-2.e17.x86_64
        删除之
            rpm -e mariadb-libs-5.5.56-2.e17.x86_64
        如果提示“依赖检测失败”,适用如下命令强删
            rpm -e --nodeps mariadb-libs-5.5.56-2.e17.x86_64

    1、下载及安装

        先从这里 https://dev.mysql.com/downloads/repo/yum/ 获取rpm包

        

    下载后上传到你的服务器,或者使用wget命令获取

    附上一个mysql5.7的下载路径,以备不时之需。其安装步骤完全照搬本文mysql的方法即可
        wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
    mysql8下载地址
        wget http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm   
    上传成功后,使用yum在本地安装
        yum localinstall mysql80-community-release-el7-1.noarch.rpm
    安装完毕之后,检查一下
        yum repolist enabled | grep "mysql.*-community.*" 
    有类似下图的效果说明成功

    如果看到上图,我们就执行下面的命令,安装MySQL的服务端

    yum install -y mysql-community-server

    一般来说,到这里应该能安装成功,然后我们启动并查看MySQL状态吧,如下图红框所示

        

   

    2、密码那些事

        因为没有密码,我们需要让MySQL给我们生成一套,这么玩儿

        先把/etc/my.cnf配置文件中的"default-authentication-plugin=mysql_native_password"解注释

    改完上图所示部分后,重启    systemctl restart mysqld

    这样,MySQL会给我们在/etc/log/mysqld.log下,为root用户生成了一个新的密码

    可以通过grep 'temporary password' /var/log/mysqld.log查看到

    3、现在登录吧

        mysql -uroot -p
        (你的密码)

    但是,你现在还是干不了任何事,比如我想使用某个数据库都不行,说是需要修改密码,那就改呗。。。

    首先注意,5.7和8.x的修改密码的命令有区别,下图会分别展示两个版本的修改密码的命令写法。(原因在于8.x已经弃用了老版本的 mysql_native_password 插件(模式))

## 5.7版本
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';

## 8.x版本
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password by '123456';

        我们先随手写一个“123456”,说是强度太低,如下图

第一次登录是无法修改规则的,否则会提示让你先修改密码后才能进行这种操作。为了避免进入这样的死循环。唯一办法是仿照默认密码的样式设置一个密码,这个密码要有大小写、数字和三个以上的特殊字符 。然后会提示你修改成功。  

如果刚才的密码不是你想要的,可以先改一下密码强度规则后再设置密码,如下所示

以下是设置 mysql 8 的密码强度的配置参数
#设置强度,0是最低级别,数字越大,限制越多
mysql> set global validate_password.policy=0;
Query OK, 0 rows affected (0.00 sec)

#设置密码长度不能少于6位,然后我还用之前的那个“123456”,这次没问题啦。
mysql> set global validate_password.length=6;
Query OK, 0 rows affected (0.00 sec)

#设置真正的密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';
以下是 mysql 5.7 的修改密码强度的配置参数
#设置强度,0是最低级别,数字越大,限制越多
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

#设置密码长度不能少于6位,然后我还用之前的那个“123456”,这次没问题啦。
mysql> set global validate_password_length=6;
Query OK, 0 rows affected (0.00 sec)

#设置真正的密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';

    4、远程登录

        上面解决的是本地访问,那么远程访问的咋办?修改规则呗

        但是,传统的方式不能用了,如下图所示

        解决方法1:创建一个单独的,名为xxx的用户

       CREATE USER 'xxx'@'%' IDENTIFIED BY 'mypwd_1234';

        GRANT ALL ON *.* TO 'xxx'@'%';

            其中,第一个命令是创建一个密码为123456,同时访问ip为全ip(%)的用户

            第二个命令是让这个用户拥有全部的DDL和DML权限

            创建完毕之后,应该就可以使用给这个新用户登录了,只是他没有给别人赋权限的权限

            如果需要,可以如下这么玩儿

            GRANT all PRIVILEGES ON databasename.tablename TO 'username'@'host' IDENTIFIED BY 'password' WITH GRANT OPTION;

        解决方法2:直接改权限

            由于MySQL8新增了一种密码类型“caching_sha2_password”

            所以有些拥有这个属性的用户就是不能从远程登录,

            我们可以通过查看mysql数据库的user表获取相关信息

        

        上图中的这个lalala用户就铁定不能从远程登录,其实略作修改即可

            update user set plugin='mysql_native_password' where user='lalala';

        同时,上图的root用户也不能从远程登录,而root的原因是由于host的类型只允许本机

            update user set host='%' where user='root';

        小tips 修改权限后,记得执行 flush privileges;,如下图

       

    5、别忘了防火墙

        如果你的服务器之前设置过防火墙的相关,那么进行完上面那步就可以登录了

        如果不行,那就再该点东西吧

        systemctl stop firewalld.service
        systemctl disable firewalld.service
        systemctl mask firewalld.service

        然后,安装并开启iptables

        yum install iptables-services -y 
        systemctl enable iptables
        systemctl start iptables

        再在iptables中加一条关于MySQL的端口限制规则  "-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT"  ,如下图的两个红框中所示

    重启iptables

    systemctl enable iptables.service
    systemctl restart iptables.service

    到这儿为止,应该就可以了,然后从远程测试一下吧

        

        搞定

四、一些问题

       4.1 GPG 升级导致安装mysql失败

        在执行到 yum install -y mysql-community-server 这一步的时候,突然报了如下图的错误

        我把报错文本贴出来,如下所示。

Public key for mysql-community-libs-5.7.43-1.el7.x86_64.rpm is not installed


 Failing package is: mysql-community-libs-5.7.43-1.el7.x86_64
 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

        究其原因应该是 MySQL升级GPG,导致秘钥配置失败,解决方案如上图所示,执行 “rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022”即可

        4.2 创建用户大小写

        当我们使用命令  "CREATE USER 'XXX'@'%' IDENTIFIED BY 'l123456';" 创建用户后,那么在远程登录时配置的登录名也应该是大写的 XXX,而不能是小写。否则登录失败。踩坑。。

        4.3 MySql 8.0 GPG问题

        问题描述如上图,但8.0版本的 GPG问题的解决思路和5.7 不同,只需禁用GPG校验即可。操作步骤如下两步所示:

## 查看源
[root@mysql ~]#  ls /etc/yum.repos.d/mysql-*
/etc/yum.repos.d/mysql-community.repo  /etc/yum.repos.d/mysql-community-source.repo

## 修改 8.0版本的 gpgcheck 的值为0,下面是命令
[root@mysql ~]# vi /etc/yum.repos.d/mysql-community.repo

        mysql-community-repo 文件内容如下图所示

        然后再执行   yum install -y perl-DBD-mysql   命令,即可解决问题。

        4.4 镜像异常

        我在执行“yum install -y mysql-community-server”这个命令时,报错。信息如下

已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"

        完整报错如下图所示 

        核心原因

        1、CentOS 7 已终止生命周期
        CentOS 7 已于 2024 年 6 月 30 日结束官方支持(EOL),原镜像站点 mirrorlist.centos.org 已停止服务789。DNS 无法解析该域名,导致 yum 无法访问仓库。

        2、仓库配置未更新
        默认的 /etc/yum.repos.d/CentOS-*.repo 文件仍指向已失效的镜像地址,需要手动切换到存档仓库。

        解决方案

        第一步、修改仓库源配置并执行如下命令

sudo sed -i \
  -e 's/mirrorlist/#mirrorlist/g' \
  -e 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' \
  /etc/yum.repos.d/CentOS-*.repo

        第二步、检查 /etc/yum.repos.d/CentOS-Base.repo 是否已替换为以下内容

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the #mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://#mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
baseurl=http://vault.centos.org/centos/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates 
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://#mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/
baseurl=http://vault.centos.org/centos/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://#mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/
baseurl=http://vault.centos.org/centos/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://#mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

        第三步、清理并重建缓存

[root@keycloak local]# sudo yum clean all
[root@keycloak local]# sudo yum makecache

        第四步、再次执行命令、安装MySql

[root@keycloak local]# sudo yum install -y mysql-community-server

        4.5 DBeaver 登录异常

        用 DBeaver 登录前要测试连接,我在测试时报错“Plugin 'mysql_native_password' is not loaded”,或者遇到“Public Key Retrieval is not allowed” 的报错信息,解决方法如下。

        只需要在DBeaver 的插件中打开对应许可即可,如下图所示

参考资料

https://blog.youkuaiyun.com/managementandjava/article/details/80039650

https://www.linuxidc.com/Linux/2016-09/135288.htm

https://blog.youkuaiyun.com/qq_16075483/article/details/80296611

https://blog.youkuaiyun.com/haropy/article/details/123941785

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值