Linux系统下的数据库
前言
这篇文章是在跟着b站尚硅谷的数据库视频学习后写的,仅仅是为了记录一下学习过程中遇到的报错等,如果有问题请指正!
准备工作
Linux系统及工具的准备(数据库高级篇一般在Linux操作系统学习之后,所以以下部分内容不做详细说明)
- 下载安装VMware以及相关linux系统(Centos7、Ubuntu等)
- 虚拟机的安装自行搜索,我当时参考的是这篇博主的文章VMware虚拟机安装Linux教程(超详细)
- 至于视频中讲到的虚拟机克隆的操作,暂时不做要求,因为老师是为了演示Mysql8.0和Mysql5.7部分功能特性的不同;况且克隆多个虚拟机可能对电脑配置也有要求 - 安装Xshell和Xftp等访问Centos系统的工具
- Xshell是一个可以在windows界面下访问远端不同系统下的服务器,达到远程控制终端的目的。如果你觉得在虚拟机下直接操作更方便就可以不用安装,也是不做硬性要求。
- Xftp是可以让用户在windows和linux不同的操作系统之间进行文件的传输的工具,可能会用到,以下是我在安装过程中遇到一些问题
1、 虚拟机的ip地址查询(Xftp连接以及后续Sqlyog连接时使用):
- 在虚拟机中打开终端,输入
ip addr
- 如果查看ens33的内容后发现没有inet这个属性,就需要进行网卡配置(我这个因为是后来截的,所以有)
- 在命令框输入
vim /etc/sysconfig/network-scripts/ifcfg-ens33
- 从配置清单中发现Centos7默认不启动网卡(ONBOOT=no,我这个也是后来截的),直接修改为yes。(按i进入编辑模式,esc停止编辑模式,:wq退出编辑)
如果修改不了可能是权限问题,用sudo+上述命令(vim/..)
再试试 - 再在命令窗口输入
service network restart
重启服务;接着再次输入ip addr
,就能看到ip(不包括/24)
2、Xftp连接后可能在Linux的部分有乱码
- 点击齿轮状的图形 设置编码格式为uft-8
3、Xftp在使用过程中可能的报错 :xftp上传文件错误,permission is not allowed
- 在传输文件时,可能会遇到这个报错,这是因为对要传输到的linux文件夹操作权限不够,修改对应文件夹权限即可
chmod 777 文件夹名称
Mysql的下载安装
- 点击DOWNLOADS选择MYSQL Community(GPL) Downloads
- 选择对应Linux的版本(Centos对应选择Red Hat就行,下面的选项要对应自己的Linux系统格式)
- 下载时间较长,等待片刻:
解压后的文件不用全部使用Xftp传到Linux上,只需要这6个包就好(版本可能不同,根据前缀挑选)(如果传输失败也可能是权限问题,chmod)
- Mysql的安装
- 以备不测,建议在root的权限下进行:
su
再输入密码就可以从普通用户转到root用户,如果出现’‘su:鉴定故障’'的报错,确定不是记错密码的情况下,多输几遍就行(可能是大小写的问题)。 - 检查Mysql的依赖
rpm -qa|grep libao
和rpm -qa|grep net -tools
,没有就会报错,有的话就会显示存在(一般这里不会有问题,只要你虚拟机安装好了)
- 安装(有安装的先后顺序)
rpm -ivh mysql-community-common-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.33-1.el7.x86_64.rpm
其中安装到第三步时,会报这样一个错误
Mysql在被Orcle收购后,为了防止他们将Mysql闭源,做了这样一个措施
yum remove mysql-libs
,删除掉原来的依赖即可
-
查看Mysql版本
mysql --version
以及Mysql安装的内容rpm -qa|grep -i mysql
-
为了保证数据库目录和文件的所有者是mysql登录目录,需要执行下面的命令进行初始化
mysqld --initialize --user=mysql
-
查看密码
-
查看服务是否启动
systemctl status mysqld
-
启动服务
systemctl start mysqld
-
查看Mysql服务是否是自启动的
systemctl list-unit-files|grep mysqld.service
(默认自启动) -
登录数据库
-
查看数据库中的表
show databases;
在未改修改密码前会报错
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
- 修改密码
alter user 'root'@'localhost' identified by '密码'
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
报错的原因可能是安装了密码校验插件,不符合其中的规定。我们可以修改密码,也可以修改规定,更可以删除插件(因人而异)
- 如果密码修改成功另当别论。但如果你觉得你密码比较简单并且也没有提示,而且查看密码策略也是空表,别慌,可能就是没有安装插件,插件安装也简单
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
安装完后查看Mysql的密码策略
mysql> SHOW VARIABLES LIKE ‘validate_password%’;
±-------------------------------------±-------+
| Variable_name | Value |
±-------------------------------------±-------+
| validate_password_check_user_name | OFF | 决定是否使用该插件(及强制/永久强制使用):ON/OFF/FORCE/FORCE_PLUS_PERMANENT
| validate_password_dictionary_file | | 插件用于验证密码强度的字典文件路径
| validate_password_length | 8 | 密码最小长度
| validate_password_mixed_case_count | 1 | 密码至少要包含的小写字母个数和大写字母个数
| validate_password_number_count | 1 | 密码至少要包含的数字个数
| validate_password_policy | MEDIUM | 密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG
| validate_password_special_char_count | 1 | 密码至少要包含的特殊字符数
±-------------------------------------±-------+
7 rows in set (0.02 sec)
0/LOW:只检查长度。
1/MEDIUM:检查长度、数字、大小写、特殊字符。
2/STRONG:检查长度、数字、大小写、特殊字符字典文件。
- 接着登录就能看到其中的表
Sqlyog与Linux数据库的连接
- Address、(数据库的)用户名和密码都是虚拟机上对应的内容
- 直接连接会报错(Mysql配置了不支持远程连接,以及各系统的防火墙引起的)
- 确认网络
在远程机器上使用ping ip 保证网络畅通(这步一般不会有报错)
在远程机器上使用telent 保证端口号开放访问(这步问题很多)
有两种开启端口的方法 - 控制面板里找到程序与功能,在其左侧的打开或关闭Windows功能里找到Telnet服务端并开启
- 管理员命令行里运行:
dism /online /Enable-Feature /FeatureName:TelnetClient
🔺管理员命令行打开方式:win+r -> cmd -> ctrl+shift+enter
1、在我自己采用这两种方法时,都会报错。前者报 “出现错误,并非所有的功能被更改”,就是并不像一些博主分享的办法中需要下载Telnet相关功能,直接就是修改不了;
2、然后我使用后者,结果依旧不行,具体报错我忘记截图了,就是下载到最后是让你去C:\Windows\Logs\DISM\dism.log查看具体错误。然后我找到了文件,里面内容很多,根据时间以及ERROR找到对应的几行,查看其中的错误代码是0x80070057。然后拿朋友的电脑开始却可以,再想到我windows有部分功能一直更新失败,所以我猜想可能与这有关。(一般多是其他的解决办法,用管理员权限等等)
3、win10更新失败(解决方案)这个问题之前困扰了我许久,一直没解决,结果这次顺带着解决了,并且Telnet服务端也能打开(打开方式照旧,就是更新的时间太长,我在晚上更的) - 关闭系统的防火墙
- Win10打开控制面板,右上角有个Windows Defender防火墙,点进去关闭就可以(可能有风险)所以后来我找到了Windows10下修改防火墙设置,对单独的ip接口进行了放行。
- Linux下的防火墙修改
systemctl status firewalld
查看防火墙状态
systemctl stop firewalld
关闭防火墙
systemctl disable firewalld
将防火墙设为开机不自启动
🔺linux由于是安在虚拟机上,所以关闭防火墙其实无伤大雅,但为了安全还是采用另一种方法。 - su转换到root用户下,
firewall-cmd --list-all
查看开放的端口号, - 接着添加3306端口号,
firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 添加后刷新,
firewall-cmd --reload
- 再次查看开放的端口号,
firewall-cmd --list-all
,发现添加成功,sqlyog也可以连接上。
- 修改linux数据库
- 关闭防火墙后仍不能连接成功,在linux下登录数据库,
mysql -uroot -hlocalhost -p
输入密码后,show databases;
打开其中的mysql表 - 切换到mysql下
在use mysql;
,再显示其中的内容select host,user from user;
- 修改root对应的host
update user set host = '%' where user = 'root';
%是通配符,这个ip格式因人而异,但最好选择%,我这个会影响在linux下登录数据库(属于错误示范,也是后来发现的)。
- 最后要刷新一下服务
flush privileges;
🔺不出意外,以上命令执行成功后的返回语句大多是Query OK, 0 rows affected (0.00 sec)
(仅供参考) - 之后就可以连接成功了
总结
第一次记录笔记,篇幅也挺长,之前想着挺简单,感觉花不了多长时间,但做起来还是很费时费力的。在这里要感谢在文中出现的文章的所属作者,感谢他们的文章(引用已经过同意),不然我解决不了问题,更不会有这篇笔记!!!