进阶学习在Liunx安装MySQL
安装并启动好两台虚拟机: CentOS 7
掌握克隆虚拟机的操作
mac地址
主机名
- vim /etc/hostname
- 在这里插入图片描述
- 修改i,退出Esc,然后:wq,表示保存并退出
- 在这里插入图片描述
- 修改完需要重启主机
- reboot
ip地址和UUID
- vim /etc/sysconfig/network-scripts/ifcfg-ens33
- 在这里插入图片描述
- 修改完需要网络重启 systemctl restart network
远程连接有 Xshell 和 Xftp 等访问CentOS系统的工具
通常要上传安装的软件放在opt文件夹下
CentOS6和CentOS7在MySQL的使用中的区别
- 防火墙:6是iptables,7是firewalld
- 启动服务的命令:6是service,7是systemctl
1.卸载MySQL
查看是否有MySQL
查看MySQL版本
mysqladmin --version```sql如果你是用rpm安装, 检查一下RPM PACKAGE:```sqlrpm -qa | grep -i mysql # -i 忽略大小写不存在mysql-lib的版本:root@zzz-Latitude-3410:/# rpm -qa | grep -i mysqlroot@zzz-Latitude-3410:/#
开始卸载
关闭服务
systemctl stop mysqld.service
查看当前 mysql 安装状况
rpm -qa | grep -i mysql # 或 yum list installed | grep mysql
卸载上述命令查询出的已安装程序
yum remove mysql-xxx mysql-xxx mysql-xxx mysqk-xxxx
务必卸载干净,反复执行rpm -qa | grep -i mysql
确认是否有卸载残留
删除 mysql 相关文件
- 查找相关文件
find / -name mysql
- 删除上述命令查找出的相关文件
find / -name "msyql" -exec rm -rf {} \;
- 删除 my.cnf
rm -rf /etc/my.cnf
2.安装MySQL
MySQL的4大版本
MySQL Community Server 社区版本,开源免费,自由下载,但不提供官方技术支持,适用于大多数普通用户。 MySQL Enterprise Edition 企业版本,需付费,不能在线下载,可以试用30天。提供了更多的功能和更完备的技术支持,更适合于对数据库的功能和可靠性要求较高的企业客户。 MySQL Cluster 集群版,开源免费。用于架设集群服务器,可将几个MySQL Server封装成一个Server。需要在社区版或企业版的基础上使用。 MySQL Cluster CGE 高级集群版,需付费。
此外,官方还提供了 MySQL Workbench (GUITOOL)一款专为MySQL设计的 ER/数据库建模工具它是著名的数据库设计工具DBDesigner4的继任者。MySQLWorkbench又分为两个版本,分别是 社区版 (MySQL Workbench OSS)、 商用版 (MySQL WorkbenchSE)。
下载MySQL指定版本
下载地址
官网:https://www.mysql.com
在General Availability(GA) Releases中选择适合的版本
Linux系统下安装MySQL的几种方式
Linux系统下安装软件的常用三种方式:
方式1:rpm命令
使用rpm命令安装扩展名为".rpm"的软件包。
.rpm包的一般格式:
方式2:yum命令
需联网,从互联网获取的yum源,直接使用yum命令安装。
Cetnos7 配置yum源阿里云源
备份,将 CentOS-Base.repo 为CentOS-Base.repo.backup
[root@localhost ~]$ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的 http://mirrors.aliyun.com/repo/Centos-7.repo,并命名为CentOS-Base.repo
[root@localhost ~]$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 或者[root@localhost ~]$ curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清除缓存
[root@localhost ~]$ yum clean all # 清除系统所有的yum缓存[root@localhost ~]$ yum makecache # 生成yum缓存
安装开始
用yum安装MySQL8版本
准备工作
1.查看是否有安装过mysql
rpm -qa | grep -i mysql
2.删除mysql
yum -y remove MySQL-*
3.把所有出现的目录统统删除
find / -name mysql
4.删除配置文件
rm -rf /etc/my.cnf
5.删除mysql的默认密码
rm -rf /root/.mysql_sercret
1.配置Mysql 8.0安装源
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
2.安装Mysql 8.0
sudo yum --enablerepo=mysql80-community install mysql-community-server
提示下载插件选择:y。
如果报错GDK,在yum install 版本后面加上 --nogpgcheck,即可绕过GPG验证成功安装。
sudo yum --enablerepo=mysql80-community install mysql-community-server --nogpgcheck
启动mysql服务
sudo service mysqld start
查看mysql服务运行状态
service mysqld status
<img src="https://img-blog.csdnimg.cn/c927acddfa0942c8ba667c90065a0616.png" alt="在这里插入图片描述" data-href="https://greatsql.cn/" style=""/>
在这里插入图片描述
查看root临时密码
安装完mysql之后,会生成一个临时的密码让root用户登录。
grep "A temporary password" /var/log/mysqld.log
登录mysql
mysql -uroot -p
注意,登录完先改密码注意,登录完先改密码注意,登录完先改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
会提示:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements(密码不符合当前策略)
方案1: 设置符合策略的密码(大小写字母+数据+符号)
方案2:密码策略改简单一点
方案2设置方式:
先更改密码,否则无法下一步操作
输入:ALTER USER 'root'@'localhost' IDENTIFIED BY '83mJt20R#u_k';
validate_password.length 是密码的最小长度,默认是8,我们把它改成4
输入:set global validate_password.length=4;
validate_password.policy 验证密码的复杂程度,我们把它改成0
输入:set global validate_password.policy=0;
validate_password.check_user_name 用户名检查,用户名和密码不能相同,我们也把它关掉
输入:set global validate_password.check_user_name=off;
再执行修改密码的命令
输入:ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
密码设置成功,设为了root。
方式3:编译安装源码包
针对 tar.gz 这样的压缩格式,要用tar命令来解压;如果是其它压缩格式,就使用其它命令。
安装方式汇总及评价
安装方式 | 特点 |
---|---|
rpm | 安装简单,灵活性差,无法灵活选择版本、升级 |
rpm repository | 安装包极小,版本安装简单灵活,升级方便,需要联网安装 |
通用二进制包 | 安装比较复杂,灵活性高,平台通用性好 |
源码包 | 安装最复杂,时间长,参数设置灵活,性能好 |
在Ubuntu安装
下载MySQL APT安装配置包
访问https://dev.mysql.com/downloads/repo/apt/获取下载地址
![在这里插入图片描述](https://img-blog.csdnimg.cn/6fff390fa1d64eff8b35ff679087e25d.png#pic_center
然后进入Ubuntu系统,打开终端,并输入以下命令,进行下载MySQL APT配置包
wget https://dev.mysql.com/get/mysql-apt-config_0.8.14-1_all.deb
安装MySQL APT配置包
输入以下命令,进行安装:
sudo dpkg -i mysql-apt-config_0.8.14-1_all.deb
安装MySQL Server
更新APT软件源:
sudo apt-get update
安装MySQL Server
sudo apt-get install mysql-server
输入 y 继续执行,弹出MySQL 8安装对话框,按回车键确定,进入设置root密码的对话框
下载速度可能有点慢请耐心等待,可以尝试更换APT数据源,国内的镜像网站有很多,比如阿里云、清华大学镜像等等,至于如何更换,请自行百度。
设置 root 用户密码,这里密码暂时设为 123
TAB+回车确定
MySQL 8安装好之后,会创建如下目录:
数据库目录:/var/lib/mysql/。 配置文件:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)。 相关命令:/usr/bin(mysqladmin、mysqldump等命令)和/usr/sbin。 启动脚本:/etc/init.d/mysql(启动脚本文件mysql的目录)。
启动MySQL服务
通过以上的APT方式安装好之后,所有的服务、环境变量都会启动和配置好,无须手动配置。
服务器启动后端口查询
sudo netstat -anp | grep mysql
查看服务状态
sudo service mysql status
停止服务
sudo service mysql stop
启动服务
sudo service mysql start
重启服务
sudo service mysql restart
查看MySQL服务是否自启动
查看是否自启
systemctl list-unit-files|grep mysqld.service
默认是 enabled
设置开机自启
systemctl enable mysqld.service
关闭开机自启
systemctl disable mysqld.service
登录MySQL数据库
mysql -u root -p
卸载命令
需要完全清理MySQL时,可以完全卸载。
sudo apt purge mysql-*sudo rm -rf /etc/mysql/ /var/lib/mysqlsudo apt autoremovesudo apt autoclean
修改MySQL密码
先输入:flush privileges;
再输入:ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql';
其中mysql
为密码
3.MySQL登录
通过mysql -hlocalhost -P3306 -uroot -p
进行登录,在Enter password:录入初始化密码
接着修改密码
因为初始化密码默认是过期的,所以查看数据库会报错
修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
5.7版本之后(不含5.7),mysql加入了全新的密码安全机制。设置新密码太简单会报错。
关闭防火墙
#查看防火墙状态
systemctl status firewalld.service
#关闭防火墙
systemctl stop firewalld.service
#设置开机启用防火墙
systemctl enable firewalld.service
#设置开机禁用防火墙
systemctl disable firewalld.service
Linux下修改配置
use mysql; select Host,User from user; mysql> select Host,User from user; +-----------+---------------+| Host | User |+-----------+---------------+| localhost | mysql.session || localhost | mysql.sys || localhost | root |+-----------+---------------+4 rows in set (0.00 sec)
可以看到root用户的当前主机配置信息为localhost
修改Host为通配符%
Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。 user=root Host=localhost,表示只能通过本机客户端去访问。而 %是个通配符
如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果 Host=% ,表示所有IP都有连接权限
update user set host = '%' where user ='root';update user set host = '192.168.1.%' where user ='root';
Host设置了“%”后便可以允许远程访问。
mysql> select Host,User from user; +-----------+---------------+| Host | User |+-----------+---------------+| % | root || localhost | mysql.session || localhost | mysql.sys || localhost | root |+-----------+---------------+4 rows in set (0.00 sec)
执行成功以后要刷新权限
flush privileges;
4.MySQL8的密码强度评估
4.1 MySQL不同版本设置密码
MySQL5.7中:成功
mysql> alter user 'root' identified by 'abcd1234'; Query OK, 0 rows affected (0.00 sec)
MySQL8.0中:失败
mysql> alter user 'root' identified by 'abcd1234'; # HelloWorld_123 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
在MySQL 8.0之前,MySQL使用的是validate_password
插件检测、验证账号密码强度,保障账号的安全性。
安装/启用插件方式1:在参数文件my.cnf中添加参数
cat /etc/my.cnf[mysqld] plugin-load-add=validate_password.so #ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 是否使用该插件(及强制/永久强制使用) validate-password=FORCE_PLUS_PERMANENT
说明1: plugin library中的validate_password文件名的后缀名根据平台不同有所差异。 对于Unix和 Unix-like系统而言,它的文件后缀名是.so,对于Windows系统而言,它的文件后缀名是.dll。 说明2: 修改参数后必须重启MySQL服务才能生效。 说明3: 参数FORCE_PLUS_PERMANENT是为了防止插件在MySQL运行时的时候被卸载。当你卸载插件时就会报错。如下所示。
mysql> SELECT PLUGIN_NAME, PLUGIN_LIBRARY, PLUGIN_STATUS, LOAD_OPTION FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';+-------------------+----------------------+---------------+----------------------+| PLUGIN_NAME | PLUGIN_LIBRARY | PLUGIN_STATUS | LOAD_OPTION | +-------------------+----------------------+---------------+----------------------+| validate_password | validate_password.so | ACTIVE | FORCE_PLUS_PERMANENT |+-------------------+----------------------+---------------+----------------------+1 row in set (0.00 sec)mysql> UNINSTALL PLUGIN validate_password; ERROR 1702 (HY000): Plugin 'validate_password' is force_plus_permanent and can not be unloaded
安装/启用插件方式2:运行时命令安装(推荐)
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';Query OK, 0 rows affected, 1 warning (0.11 sec)
4.2 MySQL不同版本设置密码MySQL8的安全策略
- validate_password说明 MySQL 8.0,引入了服务器组件(Components)这个特性,validate_password插件已用服务器组件重新实现。8.0.25版本的数据库中,默认自动安装validate_password组件。
未安装插件前,执行如下两个指令 ,执行效果:
mysql> show variables like 'validate_password%'; Empty set (0.04 sec) mysql> SELECT * FROM mysql.component; ERROR 1146 (42S02): Table 'mysql.component' doesn't exist
安装插件后,执行如下两个指令 ,执行效果:
mysql> SELECT * FROM mysql.component; +--------------+--------------------+------------------------------------+| component_id | component_group_id | component_urn | +--------------+--------------------+------------------------------------+| 1 | 1 | file://component_validate_password | +--------------+--------------------+------------------------------------+1 row in set (0.00 sec) mysql> show variables like 'validate_password%'; +--------------------------------------+--------+| Variable_name | Value | +--------------------------------------+--------+| validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+7 rows in set (0.01 sec)
关于 validate_password 组件对应的系统变量说明:
选项 | 默认值 | 参数描述 |
---|---|---|
validate_password_check_user_name | ON | 设置为ON的时候表示能将密码设置成当前用户名。 |
validate_password_dictionary_file | 用于检查密码的字典文件的路径名,默认为空 | |
**validate_password_length ** | 8 | 密码的最小长度,也就是说密码长度必须大于或等于8 |
validate_password_mixed_case_count | 1 | 如果密码策略是中等或更强的,validate_password要求密码具有的小写和大写字符的最小数量。 |
validate_password_number_count | 1 | 密码必须包含的数字个数 |
validate_password_policy | MEDIUM | 密码强度检验等级,可以使用数值0、1、2或相应的符号值LOW、MEDIUM、STRONG来指定。 |
validate_password_special_char_count | 1 | 密码必须包含的特殊字符个数 |
组件和插件的默认值可能有所不同。例如,MySQL 5.7. validate_password_check_user_name的默认值为OFF。
修改安全策略
SET GLOBAL validate_password_policy=LOW; SET GLOBAL validate_password_policy=MEDIUM; SET GLOBAL validate_password_policy=STRONG; SET GLOBAL validate_password_policy=0; # For LOW SET GLOBAL validate_password_policy=1; # For MEDIUM SET GLOBAL validate_password_policy=2; # For HIGH #注意,如果是插件的话,SQL为set global validate_password_policy=LOW
此外,还可以修改密码中字符的长度
set global validate_password_length=1;
4.3密码强度测试
如果你创建密码是遇到“Your password does not satisfy the current policy requirements”,可以通过函数组件去检测密码是否满足条件: 0-100。当评估在100时就是说明使用上了最基本的规则:大写+小写+特殊字符+数字组成的8位以上密码
mysql> SELECT VALIDATE_PASSWORD_STRENGTH('medium'); +--------------------------------------+| VALIDATE_PASSWORD_STRENGTH('medium') | +--------------------------------------+| 25 | +--------------------------------------+1 row in set (0.00 sec)mysql> SELECT VALIDATE_PASSWORD_STRENGTH('K354*45jKd5'); +-------------------------------------------+| VALIDATE_PASSWORD_STRENGTH('K354*45jKd5') | +-------------------------------------------+| 100 | +-------------------------------------------+1 row in set (0.00 sec)
注意:如果没有安装validate_password组件或插件的话,那么这个函数永远都返回0。 关于密码复杂度对应的密码复杂度策略。如下表格所示:
Password Test | Return Value |
---|---|
Length | 0 |
Length ≥ 4 and | 25 |
Satisfies policy 1 (LOW) | 50 |
Satisfies policy 2 (MEDIUM) | 75 |
Satisfies policy 3 (STRONG) | 100 |
4.4 卸载插件、组件
卸载插件
mysql> UNINSTALL PLUGIN validate_password; Query OK, 0 rows affected, 1 warning (0.01 sec)
卸载组件
mysql> UNINSTALL COMPONENT 'file://component_validate_password'; Query OK, 0 rows affected (0.02 sec)