赞
踩
为了尝试新技术和业务需要,因此打算搞一套这样的环境玩儿一下
服务器的安装请见上一篇
我用的是自己的本机(8核、16G),划分出三台虚拟机(一主两从--MySQL)
主机名 | IP | CPU | 内存 | 用途 | 备注 |
centos7One | 192.168.122.21 | 2 | 4 | 主/写(MySQL)主(Redis) | Mysql8/Redis4/Centos7 |
centos7Two | 192.168.122.22 | 1 | 2 | 从/读(MySQL)主(Redis) | Mysql8/Redis4/Centos7 |
centos7Three | 192.168.122.23 | 1 | 2 | 从/读(MySQL)从(Redis) | Mysql8/Redis4/Centos7 |
centos7Four | 192.168.122.24 | 1 | 2 | 从(Redis) | Redis4/Centos7 |
基本的规划就是如上面所写
后续会在这四台服务器上安装redis的集群
1、 网上好多种安装mysql8的方法,我最开始使用的是编译安装的方式,这种方式的最大缺点就是过程较慢
特别是make这一步,需要好久好久。。。然后一旦有问题就会彻底崩溃,如果你像我一样没把握
建议还是像我一样使用更靠谱的yum方式安装比较好
2、 请先参考这篇文章 https://www.cnblogs.com/LiuChunfu/p/8052890.html
这篇文章先阐述了一下rpm和yum之间的关联关系,同时也介绍了linux下各个文件夹的一些作用。很不错
如果在安装系统的时候,没有为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
先从这里 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状态吧,如下图红框所示
因为没有密码,我们需要让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查看到
- mysql -uroot -p
- (你的密码)
但是,你现在还是干不了任何事,比如我想使用某个数据库都不行,说是需要修改密码,那就改呗。。。
那我们先随手写一个“123456”,还是不行,说是强度太低,如下图
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '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';
上面解决的是本地访问,那么远程访问的咋办?修改规则呗
但是,传统的方式不能用了,如下图所示
解决方法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;,如下图
如果你的服务器之前设置过防火墙的相关,那么进行完上面那步就可以登录了
如果不行,那就再该点东西吧
- 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
到这儿为止,应该就可以了,然后从远程测试一下吧
搞定
在执行到 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”即可
当我们使用命令 "CREATE USER 'XXX'@'%' IDENTIFIED BY 'l123456';" 创建用户后,那么在远程登录时配置的登录名也应该是大写的 XXX,而不能是小写。否则登录失败。踩坑。。
参考资料
https://blog.csdn.net/managementandjava/article/details/80039650
https://www.linuxidc.com/Linux/2016-09/135288.htm
https://blog.csdn.net/qq_16075483/article/details/80296611
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。