Linux安装MySQL

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

本文主要简绍MySQL版本选择以及Linux服务器的安装,Linux版本为CentOS7类似版本。
如果比较熟悉MySQL了,可以直接看 六、快速安装设置(精简版)。

下面文章不定期更新中。。。

Linux安装JDK17(精品)
Linux安装MySQL(精品)
Linux安装Nginx(精品)
Linux安装Maven(精品)
运行一个jar包(精品)

Jenkins安装启动(JDK8/11/17)
Jenkins配置(插件/角色/凭证)
Jenkins的jdk和maven配置
Jenkins三种构建类型

一、概念

在这里插入图片描述

MySQL是一个非常流行的开源关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,后来被Sun Microsystems公司收购,Sun Microsystems之后又在2009年被甲骨文公司(Oracle Corporation)收购。MySQL使用GPL许可证发布,这意味着你可以免费使用它,但如果你在你的产品中使用MySQL并且该产品不是开源的,那么你可能需要购买商业许可。

MySQL广泛应用于各种应用场景,尤其是网站和网络应用程序,如内容管理系统和博客平台。它以其高性能、可靠性、易用性和灵活性而闻名。MySQL支持多种操作系统,包括Linux、Windows、MacOS等。

核心特性

  • 关系型数据库:MySQL存储数据在表格中,数据之间的关系通过外键等机制建立。
  • SQL支持:MySQL使用结构化查询语言(SQL)作为其主要的数据操作语言。
  • 事务安全:MySQL支持具有提交、回滚和崩溃恢复能力的完整ACID事务。
  • 可扩展性和灵活性:MySQL支持大型数据库,可以处理拥有上百万条记录的大型表。
  • 安全性:提供基于主机的认证、SSL加密连接等安全特性。
  • 高性能:MySQL采用了多种优化技术,包括索引、缓存等,以提高查询速度和数据处理能力。
  • 复制和分区:支持数据的复制和分区,以提高数据的可用性和读取速度。

应用场景

  • 网站和网络应用程序:MySQL是许多流行的Web应用程序的首选数据库,例如WordPress、Drupal和Joomla。
  • 电子商务:用于管理电子商务网站的用户数据、订单、商品信息等。
  • 数据仓库:虽然MySQL主要用于在线事务处理(OLTP),但它也可以用于数据仓库和在线分析处理(OLAP)场景。
  • 嵌入式应用:由于其轻量级,MySQL也适用于嵌入式系统和小型设备。

选择MySQL的理由

  • 成本效益:作为一个开源的数据库系统,其初始成本较低,适合初创企业和有预算限制的项目。
  • 社区支持:有一个庞大的社区支持,大量的文档、论坛和教程可供学习和解决问题。
  • 易于使用:相比其他数据库系统,MySQL更容易学习和使用,特别是对于初学者。

结论

MySQL是一个功能强大的数据库管理系统,适用于从小型个人项目到大型企业级应用的广泛场景。无论是在性能、可靠性还是易用性方面,MySQL都提供了优秀的表现,这使得它成为当前最受欢迎的数据库解决方案之一。

二、版本选择

在这里插入图片描述

lsb_release -a  # 查看内核

在这里插入图片描述

# 上面截图指令:
[root@i-uwc6z6z8 etc]# cat /proc/version
Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017
[root@i-uwc6z6z8 etc]# uname -a
Linux i-uwc6z6z8 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@i-uwc6z6z8 etc]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.4.1708 (Core) 
Release: 7.4.1708
Codename: Core
[root@i-uwc6z6z8 etc]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core) 
[root@i-uwc6z6z8 etc]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core) 
[root@i-uwc6z6z8 etc]# 

在这里插入图片描述

yum -y install redhat-lsb

在这里插入图片描述
下载地址 https://dev.mysql.com/downloads/

在这里插入图片描述
下载通用包的准备,其实这边不用下载, 主要是要 mysql80-community-release-el7-6.noarch 这个名字,更新后这个名字不一样。

三、卸载无用目录

一、检查安装
   登录Linux,命令检查是否已经安装过mysql,执行命令。如果没有任何显示信息,则说明未安装,如果存在信息,则执行卸载。
1 [root@localhost ~]# rpm -qa | grep mysql    // 检测系统是否自带安装 MySQL:
2 rpm -e mysql        // 普通删除模式
3 rpm -e --nodeps mysql  // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
实际完成这第一步骤就可以卸载掉MySQL了,直接学习安装即可。当然如果想清除更多卸载残留(更完整的卸载),可以选择第二步骤的方式卸载MySQL。


二、卸载MySQL
  当然如果在第一次检测时就没有显示什么,那么这一步可以忽略……
  1、查看MySQL服务
    登录Linux后执行service mysqld status 或者service mysql status命令查看MySQL服务状态(下面为查看的两种情况)

 1 ####命令
 2 [root@localhost ~]# service mysqld status
 3 
 4 ####执行结果:标识没有该服务
 5 Redirecting to /bin/systemctl status mysqld.service
 6 Unit mysqld.service could not be found.
 7 
 8 ####执行结果:标识服务已启动
 9 [root@localhost ~]# service mysqld status
10 Redirecting to /bin/systemctl status mysqld.service
11 ● mysqld.service - MySQL Server
12 Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
13 Active: active (running) since 一 2020-10-19 10:54:07 CST; 2min 1s ago
14 Docs: man:mysqld(8)
15 http://dev.mysql.com/doc/refman/en/using-systemd.html
16 Process: 1563 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
17 Process: 1111 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
18 Main PID: 1579 (mysqld)
19 Tasks: 27
20 CGroup: /system.slice/mysqld.service
21 └─1579 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
22 
23 1019 10:53:01 localhost.localdomain systemd[1]: Starting MySQL Server...
24 1019 10:54:07 localhost.localdomain systemd[1]: Started MySQL Server.

2、关闭MySQL服务(not be found就是没找到服务,则忽略该步骤) 
    如果MySQL服务正在运行,则执行service mysqld stop或者service mysql stop命令停止MySQL服务

   1 [root@localhost ~]# service mysql stop


3、卸载MySQL

   1 [root@localhost ~]# rpm -e --nodeps mysql

4、查找与MySQL相关的残留目录
    和Windows系统一样,MySQL的卸载不仅仅是卸载程序,也需要删除与程序相关的文件夹。才能保证卸载的完整性!
    使用命令:find   /  -name  mysql  或者  whereis   mysql

 1 ####find命令查询:速度会慢点
 2 [root@localhost ~]# find / -name mysql
 3 find: ‘/run/user/1000/gvfs’: 权限不够 4 /usr/lib64/mysql
 5 /usr/share/mysql
 6 
 7 ####whereis命令搜索,速度较快
 8 [root@localhost ~]# whereis mysql
 9 mysql: /usr/lib64/mysql /usr/share/mysql


5、删除残留
    删除残留的目录,只删除MySQL目录即可,当前登录的已经是root权限了,find查询的结果对于权限不足的,就无需操作了。
    命令:rm   -rf    目录

1 [root@localhost mysql]# rm -rf  /usr/lib64/mysql/
2 [root@localhost mysql]# rm -rf  /usr/share/mysql

6、删除MySQL配置文件
    执行rm  -rf   /etc/my.cnf命令删除/etc/my.cnf文件,执行rm  -rf   /etc/init.d/mysqld命令删除/etc/init.d/下跟MySQL有关的全部文件,一般包括mysql文件或mysqld文件,如果存在mysql文件则执行:
    rm   -rf/etc/init.d/mysql命令

1 [root@localhost etc]# rm  -rf   /etc/my.cnf
2 [root@localhost etc]# rm  -rf   /etc/init.d/mysqld



 7、删除mysql用户及用户组
    执行id mysql命令查看MySQL用户及用户组,执行userdel mysql命令删除MySQL用户及用户组。

1 [root@localhost etc]# id mysql
2 uid=27(mysql) gid=27(mysql)=27(mysql)
3 [root@localhost etc]# userdel mysql

  再次执行大标题步骤1的检查安装命令,查看是否存在MySQL程序。
  和Windows系统一样,MySQL的卸载不仅仅是卸载程序,也需要删除与程序相关的文件夹。才能保证卸载的完整性!

在这里插入图片描述
先删除无用文件夹

四、正式安装

在这里插入图片描述
wget没有命令,用yum -y install wget 处理后就可以使用了。yum repolist enabled | grep “mysql.-community.” 这个命令应该先执行,本意是检查一下yum的仓库中有没有我们需要的rpm,一般是没有的,所以才用wget下载yum源到yum仓库中。

yum -y install wget  # 如果wget命令不支持,就执行此句
yum repolist enabled | grep "mysql.*-community.*" #  查看一下yum仓库中是否有合适的MySQL,如果查出了,下面直接可以安装了

在这里插入图片描述
wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
发现仓库还是没有,差了一步安装mysql源,只是wget下载还不够,还得安装一次(sheet!!!) sudo rpm -Uvh mysql80-community-release-el7-6.noarch.rpm来增加到yum仓库中,注意名字一定要和官网一样。

wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm # 下载
sudo rpm -Uvh mysql80-community-release-el7-6.noarch.rpm # 增加到yum仓库中
sudo yum install mysql-community-server # 安装

在这里插入图片描述
安装完之后就可以查到了已经安装了yum源了。 yum repolist enabled | grep “mysql.-community.” 命令。可以看到是 8.0版本。

yum repolist enabled | grep "mysql.*-community.*"  #  查看一下yum仓库中是否有合适的MySQL

在这里插入图片描述
原来没有这个 yum.repos.d目录,安装mysql源以后,终于有了

如果不更换版本,则到此安装完成。如果想切换其他MySQL版本,则继续看下面操作
在这里插入图片描述
yum repolist all | grep mysql,查看当前yum repolist的所有版本。注意(公司115的不换版本,就用80版本,后面操作不做。):使用MySQL Yum Repository安装MySQL,默认会选择当前最新的稳定版本。如果想切换到mysql57版本,sudo yum-config-manager --disable mysql80-community 先关闭80版本的,然后开启57版本的,sudo yum-config-manager --enable mysql57-community。

sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community

在这里插入图片描述
后面会提示是否下载,要选择y哦
在这里插入图片描述
sudo yum install mysql-community-server 该命令会安装MySQL服务器 (mysql-community-server) 及其所需的依赖、相关组件,包括mysql-community-client、mysql-community-common、mysql-community-libs等。安装时间会比较长(20分钟左右)

sudo yum install mysql-community-server 

在这里插入图片描述
报错了
在这里插入图片描述

指令:rpm --import /etc/pki/rpm-gpg/RPM*
yum makecache
备注:yum仓库设置gpgcheck=1,下载安装时会去校验GPG key,本地找不到file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql就会报此错误。
注意:因为报错了,所以其实没有安装成功,需要yum install mysql-community-server 重新安装一次
结果:上面的指令不行呀,最后找到了 /etc/yum.repos.d/mysql-community.repo   这个文件里面有mysql57和mysql80等各种版本的key效验。
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
把里面的 gpgcheck=0  原来是1改为0就可以了。

在这里插入图片描述
这种解决方式才是有效的。/etc/yum.repos.d/mysql-community.repo 在这个文件下面。

五、安装后处理

1、密码

在这里插入图片描述
grep ‘temporary password’ /var/log/mysqld.log 定位到初始密码,就在日志文件里面了。注意,如果文件内容为0,则是mysql没有启动
mysql -uroot -p 然后输入密码

grep 'temporary password' /var/log/mysqld.log 
mysql -uroot -p   然后输入密码

在这里插入图片描述

在进入mysql模式下:
#show databases;   触发一下修改密码
#set password = password('123456');  设置密码   报错了

#set password for 用户名@localhost/ip/% = password('新密码');

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';  # 这个可以

下面的指令可以选择执行(一般不用执行)

设置root用户允许远程连接(这边的报错了)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
或者grant all PRIVILEGES on *.* to root@'%' identified by '123456';

flush privileges;  -- 刷新配置

grant 是数据库用于赋予用户权限的方法
grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;



开放远程连接

mysql>use mysql;

msyql>update user set user.Host='%' where user.User='root';

mysql>flush privileges;

2、防火墙处理

如果Linux服务器开启了防火墙,则需要处理,否则跳过。

# firewall防火墙
 systemctl status firewalld
 # 查看转态
 firewall-cmd --state
 # 开启
 service firewalld start
 # 重启
 service firewalld restart
 # 关闭
 service firewalld stop
 #注意分清楚linux的版本 命令会有所不同
 #查看防火墙规则
 firewall-cmd --list-all 

CentOS 7:

systemctl start firewalld.service #启动firewall

systemctl stop firewalld.service #关闭firewall

systemctl disable firewalld.service #禁止firewall开机启动

在这里插入图片描述
默认防火墙是关闭的,启动查看后发现ports一个都没有,关闭防火墙。

3、设置编码

可以查看下效果,一般不用设置。
在这里插入图片描述

1.查看编码
mysql> SHOW VARIABLES LIKE 'character%';
2.设置编码
编辑/etc/my.cnf,[mysqld]节点增加以下代码
[mysqld]
character_set_server=utf8
init-connect='SET NAMES utf8'
备注:公司这个直接就是utf8mb4,暂时不处理,看下效果

4、开机启动/其他启动

开机启动:
[root@localhost ~]# systemctl enable mysqld
[root@localhost ~]# systemctl daemon-reload

1 service mysqld start        #开启MySQL服务    只要没有错误信息就表示已经正常启动了。
2 service mysqld stop        #关闭MySQL服务
3 service mysqld restart      #重启MySQL服务 
4 service mysqld status      #查看服务状态

5、坑(mysql8的timestamp问题)

create_time在timestamp设置下,插入在mysql5.6和mysql5.7都没有问题在mysql8有问题
解决办法:
1、STRICT mode严格模式的修改,其实这个公司115是ok的
select @@global.sql_mode
set global sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

2、
SHOW GLOBAL VARIABLES LIKE "explicit_defaults_for_timestamp";
SET persist explicit_defaults_for_timestamp=OFF;
一定要记得重启mysql,重启,重启
--mysql8.0 新增了持久化修改全局变量,
--使用 set persist 和修改配置文件的效果一致,重启之后无需再改一遍了

MySQL5.7版本中有了一个STRICT mode(严格模式),而在此模式下默认是不允许设置日期的值为全0值的,所以想要解决这个问题,就需要修改sql_mode的值。

select @@global.sql_mode; 查看当前sql_mode;

set sql_mode=(select replace(@@sql_mode,‘NO_ZERO_IN_DATE,NO_ZERO_DATE’,‘’)); 可以修改当前session的sql_mode;

几种常见的mode介绍:

ONLY_FULL_GROUP_BY:

出现在select语句、HAVING条件和ORDER BY语句中的列,必须是GROUP BY的列或者依赖于GROUP BY列的函数列

NO_AUTO_VALUE_ON_ZERO:

该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了

STRICT_TRANS_TABLES:

在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_ZERO_IN_DATE:

这个模式影响了是否允许日期中的月份和日包含0。如果开启此模式,2016-01-00是不允许的,但是0000-02-01是允许的。它实际的行为受到 strict mode是否开启的影响

NO_ZERO_DATE:

设置该值,mysql数据库不允许插入零日期。它实际的行为受到 strict mode是否开启的影响

ERROR_FOR_DIVISION_BY_ZERO:

在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时MySQL返回NULL

NO_AUTO_CREATE_USER:

禁止GRANT创建密码为空的用户

NO_ENGINE_SUBSTITUTION:

如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

PIPES_AS_CONCAT:

将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

ANSI_QUOTES:

启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

原因:

explicit_defaults_for_timestamp 系统变量决定MySQL服务端对timestamp列中的默认值和NULL值的不同处理方法。
此变量自MySQL 5.6.6 版本引入,分为全局级别和会话级别,可动态更新,默认值为OFF。
在8.0之中默认值改为了on**

explicit_defaults_for_timestamp=OFF,表示使用默认的timestamp默认格式;timestamp类型的默认格式是什么样的呢?

1.和其它字段类型不一样,这个字段默认为not null.而且不允许设置default null.
2.第一列timestamp字段,如果不强制指定默认值或on update属性的话,就会默认设为DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP。
3.非第一列timestamp字段,如果不强制指定默认值,DEFAULT ‘0000-00-00 00:00:00’
4.往该列中插入null值,会自动转化为默认值;

explicit_defaults_for_timestamp=ON,则关闭timestamp default的特性:

1.如果没有被显示指定not null,则默认为null;
2.默认值也会是null而非CURRENT_TIMESTAMP;
3.如果指定了not null属性,inset式不指定该字段的值,strict sql_mode下,会报错。非strict sql_mode下插入’0000-00-00 00:00:00’;

六、快速安装设置(精简版)

笔者的一台Linux服务器的版本是Alibaba Cloud Linux 3.2104 LTS 64位,类似CentOS8/Red Hat Enterprise Linux 8 / Oracle Linux 8 版本。

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm # 添加MySQL YUM仓库,https://dev.mysql.com/downloads/repo/yum/网站可以查看CentOS8/Red Hat Enterprise Linux 8 / Oracle Linux 8对应的最新版本。一般是el8-9中的9会变大,越大越是新版本。el8-1是最早版本。
sudo dnf install mysql-server  # 安装MySQL服务器,一路y,dnf是yum的后继者,这里也可以用yum
sudo systemctl start mysqld # 启动MySQL服务
grep 'temporary password' /var/log/mysqld.log # 查看临时密码,例如 2024-03-12T14:48:00.906454Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 0#us-TRtM=0g 中的密码就是最后的 0#us-TRtM=0g
systemctl enable mysqld # 开机启动
#service mysqld start        #开启MySQL服务    只要没有错误信息就表示已经正常启动了。
#service mysqld stop        #关闭MySQL服务
#service mysqld restart      #重启MySQL服务 
#service mysqld status      #查看服务状态,这个也可以查看初始的临时密码
mysql -uroot -p   # 请求进入mysql模式,然后输入临时密码 0#us-TRtM=0g    

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';  # 设置 root登录账户的新密码为123456
exit #  退出mysql模式
mysql -uroot -p # 重新请求进入mysql模式,输入新设置的密码123456,如果成功了,则密码修改成功
exit  # 退出mysql模式,mysql安装完成。

# 如果Navicat等工具连接MySQL使用root账户失败,则进行下面操作
mysql -uroot -p # 求进入mysql模式,输入密码
use mysql;  # 切换mysql数据库
update user set user.Host='%' where user.User='root';  # 设置root账户可以远程连接
flush privileges; # 刷新配置
exit # 退出mysql模式
  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝影铁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值