MySQL概述安装

一,数据库概述

1.为什么要使用数据库

  1. 将数据持久化。

  2. 持久化主要作用:是将内存中的数据库存储在关系型数据库中,本质也就是存储在磁盘文件中。

  3. 数据库在横向上的存储数据的条数,以及在纵向上存储数据的丰富度,都要好于其他介质。

2.数据库与数据库管理系统

1.数据库的相关概念

DB:数据库(Database)即为存储数据的 "仓库",其本质是一个文件系统。
DBMS:数据库管理系统。是一种操作和管理数据库的大型软件。用于建立,使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。
SQL:结构化查询语言,专门用来与数据库通信的语言。

2.DB 与 DBMS 的关系

数据库管理系统(DBMS)可以管理多个数据库,一个管理系统对应一个或多个数据库,一个数据库对应多个表,一张表对应多条数据,一条数据对应多个字段。

3.常见的数据库管理系统排名(DBMS)

查看排名的网站:https://db-engines.com/en/ranking

3 关系型数据于非关系型数据库

1.关系型数据库 - RDBMS

  1. 该类型数据库是 "最古老" 的数据库类型,是将复杂的数据结构,归结为简单的二维表格形式。
  2. 关系型数据库,是以 "行-row" 和 "列-column" 的形式存储数据。一系列的 "行" 和 "列" 称为 "表" ,一组表组成一个 "库-database"。
  3. 表与表之间的数据记录是有关系的。关系型数据库,也就是建立在 "关系模型" 基础上的数据库。
  4. 使用 SQL 语言查询数据。
  • 优势:
  1. 复杂查询:使用 SQL 语句方便在一个表或多个表之间做非常复杂的数据查询。
  2. 事务支持:数据库安全性高,等...

2.非关系型数据库 - N-RDBMS

非关系型数据库,是传统关系型数据库,舍得版本。基于键值对存储数据,不需要经过 SQL 语言的解析,"性能非常高"。同时,通过减少不常用的功能,从而提供性能。

  • 非关系型数据库的种类:
  1. 键值型数据库:Redis。
  2. 文档型数据库:MongoDB。
  3. 搜索引擎数据库:Elasticsearch。
  4. 列式数据库:HBase。
  5. 图形数据库:Neo4J。
  6. 其他类型的非关系数据库等...

4.关系型数据库设计规则

  • 关系型数据库的典型数据结构就是 "数据表" ,这些 "数据表" 组成都是结构化的。
  • 将数据放到表中,表再放到库中。
  • 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名要具有唯一性。
  • 表具有一些特性,这些特性定义了数据在表中如何存储,类似就 JAVA 和 Python 中 "类" 的设计

1.表,行,列

ORM-面向对象思想(对象关系映射):

  1. 数据库中的一个表 <----对应----> JAVA 中的一个类。
  2. 表中的一条数据 <----对应----> 类的一个对象实例。
  3. 表中的一个列 <----对应----> 类中的一个属性,成员变量。

2.表的关联关系

表与表之间的数据记录是存在关系的,一般这种使用 "关系模型" 来表示。常见的有以下四种关联关系:

  1. 一对一关联(一个人员对应一个用户)。
  2. 一对多关联(一个图层对应多个点位)。
  3. 多对多关联(一个用户对应多个角色,一个角色对应多个用户)。
  4. 自我引用(类别表)。

1.一对一关联

  • 可用于优化查询数据。

当一张表中的字段(列)太多时,在查询时会造成大量内存冗余。查询效率低。因此我们可以根据(常用字段或者说常用业务)将表拆为两张或多张表,表之间的关系是:"一对一的关系",从而提高查询效率。

  • 两种建表原则:
  1. 外键唯一:"主表" 的主键对应 "从表" 的外键(唯一),形成主外键关系,外键唯一。
  2. 外键是主键:"主表" 的主键和 "从表" 的主键,形成主外键关系。

2. 一对多关联

  • 可用于存储数据关系为一对多的数据,例如:图层表对应多条点位数据。

建表原则:在 "从表-图层表" 创建一个字段,该字段作为外键指向 "主表-点位表" 的主键,建立一对多的关系。

3.多对多关联

建表原则:要表示多对多关系,必须创建第三张表,该表通常称为 "联接表/中间表",该表将多对多关系划分为两个一对多关系,将这两个表的主键都插入到第三个表中,从而建立关系。这个 "多" 在 "中间表" 中体现。

4.自我引用

  • 可用于存储数据结构为树形结构的数据,例如:户籍中父子关系,公司中部门关系等...

建表原则:在表中创建一个 "自我引入" 字段引用表中其他数据的主键,建立关系。

前言

常见的 MySQL 安装共有五种方式,分别是:

  1. 软件仓库(yum 或 apt)安装。

  2. rpm 或 deb 文件安装。

  3. 通用二进制文件安装。

  4. Docker 安装。

如有需要使用 "Docker" 安装 MySQL 的话,请参阅:https://hub.docker.com/r/mysql/mysql-server/

  1. 源代码编译(定制化)。

如有需要 "定制化" 或 "自主扩展" MySQL 的话,请参阅:https://dev.mysql.com/doc/refman/8.0/en/source-installation.html

说明:本文章中只介绍 "通用二进制文件安装" 以及 "rpm 文件安装",这两种方式安装。

二,Linux中卸载MySQL数据库

说明:第一次安装请略过!

1.检查是否安装 MySQL

使用一下命令查看当前安装MySQL的情况,是否安装了 MySQL

bash 复制代码
rpm -qa|grep -i mysql

显示一下内容说明安装了:

bash 复制代码
MySQL-client-5.5.25a-1.rhel5
MySQL-server-5.5.25a-1.rhel5
...

停止MySQL服务,删除卸载安装的 MySQL。命令:rpm -e ---nodeps 包名

bash 复制代码
rpm -ev MySQL-client-5.5.25a-1.rhel5
rpm -ev MySQL-server-5.5.25a-1.rhel5

2.查找MySQL的目录

查找 MySQL 目录(提示:现在很多都是使用编译的 MySQL 安装包进行安装的,所以查找文件是必须的)

bash 复制代码
find / -name mysql

具体要根据个人的情况,删除对应的 mysql 目录(注意:宁可不删,不可乱删!)。

注意:/etc/my.cnf 不会删除,需要进行手工删除。

bash 复制代码
rm -rf /etc/my.cnf

3.检查是否卸载成功

再次查找机器是否安装 MySQL(注意:再次检查文件是必须的)

  • 检查安装情况
bash 复制代码
rpm -qa|grep -i mysql
  • 检查 MySQL 配置文件情况
bash 复制代码
find / -name /etc/my.cnf

无结果说明卸载(删除)成功!

三,Linux下安装MySQL数据库 - 二进制文件

  • 基本介绍:
    本次是在Linux下安装MySQL数据库。无需编译安装,解压后初始化即可使用。
    本次演示的MySQL版本为: MySQL Community Server 8.0.20

1.查看环境信息

  • 查看 linux 内核版本的命令:
bash 复制代码
uname -a

uname 命令选项:

  • -a 或 --all:显示所有信息;
  • -n 或 --nodename:只打印对外主机名;
  • -r 或 --release:只打印内核版本;(下载文件时能用到)
  • -p 或 --processor:打印系统架构,比如X86_64;
  • -o 或 --operating-system:打印操作系统名称;

本文章是:GNU/Linux 的 x86_64 位操作系统。

  • 查看Linux操作系统版本的命令:
bash 复制代码
# 查看Linux系统版本的命令
lsb_release -a
# 或者
cat /etc/redhat-release

本文章使用的是:CentOS Linux release 7.6.1810 (Core) 操作系统版本

扩展 - Redhat系的Linux系统请使用:

bash 复制代码
cat /etc/issue

2.下载 MySQL

打开官方下载地址:https://downloads.MySQL.com/archives/community/ 或者 https://dev.mysql.com/downloads/MySQL/ 根据自己对应是系统,以及版本进行选择,这里演示的是Linux系统的安装 MySQL 8.0.20(本文章是:GNU/Linux 的 x86_64 位操作系统)。

  • 直接点击下面的 Download 即可下载,下载完成将文件上传到Linux。

  • 当然也可以在Linux系统中用 wget 方式进行下载:

bash 复制代码
wget https://cdn.MySQL.com/archives/MySQL-8.0/MySQL-8.0.20-linux-glibc2.12-x86_64.tar.xz

3.上传安装包并解压

  • 创建安装文件夹
bash 复制代码
mkdir -p /usr/local/mysql
  • 将 MySQL 安装文件上传到 "/usr/local/mysql" 文件夹下,并解压:

注意:从 MySQL 8.0 开始下载的安装包是 ".xz" 结尾的了,需要先使用 xz 命令处理。

bash 复制代码
xz -d mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

解压 tar压缩包 命令:

bash 复制代码
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar
  • 文件解压后重命名(提示:该步骤根据个人习惯)
bash 复制代码
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql
  • 看一下现在的 MySQL 安装文件的名称和所在路径。
bash 复制代码
pwd

名称:"mysql",安装路径:"/usr/local/mysql"。这些信息很重要哦!

4.安装前准备

  • 检查 libaio 库是否安装。

说明:MySQL 依赖 libaio 库,如果未在本地安装此库,则数据库初始化和后续的服务器启动步骤将会失败。

如果未安装,在初始化时可能遇到下面的报错:

bash 复制代码
./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directoryx

libaio 检查命令:

bash 复制代码
whereis libaio.so.1

出现以上结果说明 libaio 库已经安装。

如果没有找到 "libaio.so.1" 文件,就要手动安装 libaio 库。

方式1:yum 安装。

bash 复制代码
yum install -y libaio

注意:此时,使用 yum 命令安装,电脑网络必须保证是正常的。

方式2:离线安装。

下载地址:https://centos.pkgs.org/7/centos-x86_64/libaio-0.3.109-13.el7.i686.rpm.html 网站或镜像地址 http://mirror.centos.org/centos-7/7/os/x86_64/Packages/。

将安装包上传到服务器执行以下命令安装。

bash 复制代码
rpm -ivh libaio-0.3.109-13.el7.i686.rpm

安装之后请再次执行 "whereis libaio.so.1" 命令再次检查是否安装成功。

  • 检查 和 卸载系统自带的 Mariadb
bash 复制代码
rpm -qa|grep mariadb


出现以上结果说明系统中安装了 mariadb。

bash 复制代码
# 强制卸载 mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

卸载之后请再次执行 "rpm -qa|grep mariadb" 检查是否卸载成功。

  • 创建 mysql 组 及 mysql 用户,并授权。
  • 创建 mysql 组命令。
bash 复制代码
groupadd mysql
  • 创建 mysql 用户以及加入到 mysql 组中。
bash 复制代码
useradd -r -g mysql mysql

说明:所有的文件和目录都应该在 mysql 用户下(扩展:useradd 中的 "-r" 表示建立为系统帐号)。

  • 创建 "数据" 存放目录并授权(设置拥有者为 mysql)
bash 复制代码
mkdir -p /usr/local/mysql/data
  • 为 mysql 用户授于 "数据目录(/usr/local/mysql/data)" 权限:
bash 复制代码
chown -R mysql:mysql /usr/local/mysql/data
  • 为 mysql 用户授于 "MySQL 安装目录(/usr/local/mysql/mysql)" 权限:
bash 复制代码
chown -R mysql:mysql /usr/local/mysql/mysql
  • 配置 "my.cnf" 文件

说明:"my.cnf" 文件是 MySQL 的默认配置文件,位于 "/etc/my.cnf"。

bash 复制代码
vi /etc/my.cnf

打开 "my.cnf" 文件将下面配置粘贴进去。

bash 复制代码
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql/mysql #指定的是MySQL安装目录
datadir=/usr/local/mysql/data #指定的是MySQL数据目录
socket=/tmp/mysql.sock # MySQL 的socket文件
log-error=/usr/local/mysql/data/mysql.err #错误日志存放文件
pid-file=/usr/local/mysql/data/mysql.pid # MySQL 服务进程的pid文件
#skip_ssl #关闭SSL加密连接
character_set_server=utf8mb4 # 设置全局的字符集类型
symbolic-links=0 # 开启数据软连接
explicit_defaults_for_timestamp=true
lower_case_table_names=1 # 设置表名大小不敏感。(MySQL在windows下,默认是对表名大小写不敏感的,但是在Linux下是大小写敏感的)
# 修改使用 "mysql_native_password"(之前的密码认证插件)插件作为认证加密方式
# default_authentication_plugin=mysql_native_password # MySQL8.0 默认认证加密方式为 "caching_sha2_password"
#skip-grant-tables #免密码登陆,注意这时候是没有端口的
  • basedir:指定的是 MySQL 的 "安装目录"。

  • datadir:指定的是 MySQL 的 "数据目录"。

  • socket:MySQL 的socket文件(注意:建议指向"/tmp/mysql.sock",不然的话可能会在连接 MySQL 时会出现错误!)。

错误信息:

bash 复制代码
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2
  • skip_ssl : 关闭 SSL 加密连接。
  • character_set_server=utf8mb4:设置全局的字符集类型。
  • lower_case_table_names=1:设置表名大小不敏感(MySQL在windows下,默认是对表名大小写不敏感的,但是在Linux下是大小写敏感的)。
  • skip-grant-tables :免密码登陆 。注意:设置免密码选项后,这时候的 MySQL 服务没有端口(0),除本机外其他客户端无法连接。
bash 复制代码
# MySQL8.0 默认认证加密方式为 "caching_sha2_password" ,为了和之前的版本匹配,需要修改为 "mysql_native_password" 插件作为认证加密方式
default_authentication_plugin=mysql_native_password 

5.初始化数据库

  • 进入MySQL 安装目录中的 bin目录下:
bash 复制代码
cd /usr/local/mysql/mysql/bin
  • 执行初始化 MySQL 命令:
java 复制代码
./mysqld --defaults-file=/etc/my.cnf --initialize
  • --defaults-file:表示初始化时收使用的配置文件。

特别注意:在初始化和启动 MySQL 的命令中,指定的 "系统变量" 的优先级是大于 "my.cnf" 文件的。个人建议:my.cnf 配置文件中有的 "系统变量" 就不要在初始化时指定了。

  • 将启动脚本 "mysql.server" 复制为 "/etc/init.d/mysql"
bash 复制代码
cp /usr/local/mysql/mysql/support-files/mysql.server /etc/init.d/mysql
  • 为 MySQL 配置 PATH 环境变量(执行 MySQL 等命令时不需要带路径)
  1. 打开环境变量 "/root/.bash_profile" 文件:
bash 复制代码
vi /root/.bash_profile
  1. 添加 MySQL 的环境变量:
bash 复制代码
:/usr/local/mysql/mysql/bin # MySQL的 "安装目录/bin" 添加到 PATH 之后,说明这里已":"号为分隔符
  1. 刷新配置文件,使配置生效:
bash 复制代码
source /root/.bash_profile

6.启动和停止 MySQL

  • 启动 MySQL,并查看 MySQL 服务状态。
bash 复制代码
service mysql start
# 或者
systemctl start mysql
  • 查询 MySQL 服务器的状态:
bash 复制代码
service mysql status
# 或者
systemctl status mysql
  • 查询 MySQL 服务状态命令
bash 复制代码
ps -ef|grep mysql
  • 扩展命令 - 端口(3306)信息查询命令:
bash 复制代码
lsof -i:3306
  • 停止 MySQL 服务:
bash 复制代码
service mysql stop
# 或者
systemctl stop mysql

7.登录 MySQL 并修改密码

  • 查看初始化时生成的密码(说明:在 "错误日志" 中,就是 log-error 参数指向的文件,如果不指定 log-error 选项,默认为 "数据目录"/主机名称.err)。
bash 复制代码
more /usr/local/mysql/data/mysql.err | grep "A temporary password"
  • 进入 MySQL 安装目录中的bin目录下:
bash 复制代码
cd /usr/local/mysql/mysql/bin
  • 执行 mysql 命令登录到 MySQL 数据库,密码为初始化数据库时的密码。
bash 复制代码
./mysql -u root -p

  • 修改 root 密码
mysql 复制代码
alter user 'root'@'localhost' identified with mysql_native_password by 'supconit-mysql';

扩展 - 常见修改用户信息的方式:

  • 使用 "set password for" 修改用户密码:
mysql 复制代码
set password for 'root'@'localhost' = 'supconit-mysql';
  • 使用 "alter user" 修改当前用户的密码:
mysql 复制代码
alter user user() identified by 'supconit-mysql';
  • 使用 "update" 修改用户的ip访问权限:
mysql 复制代码
update mysql.user set host = '%' where user = 'root' and host = 'localhost';

注意:使用 DML 语句修改用户密码,必须执行 "刷新权限" 命令也能生效。

mysql 复制代码
flush privileges;
  • 使用(navicat等工具)远程登录登录

navicat下载:链接:https://pan.baidu.com/s/1aknIUwy2L1Ws2uYL88COng 提取码:og7l

特别注意:在使用远程工具远程登录时连接不上。这时就有可能是服务器的防火墙没有关闭导致的!

  • 关闭防火墙
bash 复制代码
service firewalld stop
# 或者
systemctl stop firewalld

查看服务器的防火墙状态命令:

bash 复制代码
service firewalld status
# 或者
systemctl status firewalld
  • 防火墙开启时的状态:


说明:Active: active (running) "活动(正在运行)的"。

  • 防火墙关闭时的状态:

说明:Active: inactive (dead) "不活动(死)的"。

扩展 - 开启防火墙的命令:

bash 复制代码
service firewalld start
# 或者
systemctl start firewalld
  • 再次登录(使用远程工具)

8.遇到的问题

  • 问题1 - 初始化时错误:--initialize specified but the data directory has files in it. Aborting.

原因分析:指定的 "数据目录" 下有文件(即 datadir 选项指向的目录中有文件)。

解决办法:

方式1:删除 "数据目录" 下的所有文件。

方式2:重新创建一个新的 "数据目录",将 datadir 选项指向新的 "数据目录"。

  • 问题2 - 初始化时提示:log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.

原因分析:没有找到指定的日志文件(即:没有找到 /var/log/mariadb/mariadb.log 文件)。
解决办法:创建文件夹和文件,然后给 mysql 用户授权。

bash 复制代码
mkdir /var/log/mariadb
bash 复制代码
touch /var/log/mariadb/mariadb.log
bash 复制代码
chown -R mysql:mysql  /var/log/mariadb/
  • 问题3 - MySQL 启动时错误:ERROR! The server quit without updating PID file (/data/mysql/localhost.localdomain.pid).

原因分析:没有找到指定的 "*.pid" 文件(即没有找到 /data/mysql/localhost.localdomain.pid 文件)。

百度了一下这个文件的作用:

localhost.localdomain.pid 文件中保存的是 MySQL 服务进程的 pid,如果这个文件丢了或者启动时没有找到,就会启动失败。可以创建一个新的,然后放入一些数字。

注意:不建议将此文件放到 /tmp 目录下。

解决办法:在指定的文件夹下创建 localhost.localdomain.pid 文件,然后把 MySQL 的服务进程的 pid 写入到该文件中。

  1. 查询 MySQL 服务进程的 pid 。
bash 复制代码
ps -ef |grep mysql
  1. 在指定的文件夹下创建文件。
bash 复制代码
vi /data/mysql/localhost.localdomain.pid

注意:新创建的文件不能保存一个空文件,需要在里面输入一些数字。

~ MySQL 问题的解决思路

当 MySQL 启动不了,以及在日常的使用中出现了错误,一定要学会看 MySQL 错误日志。毕竟每个人所遇的情况不一定都是一样的,造成 MySQL 启动不了和错误的原因是真的很多。错误日志路径:my.cnf (Windows是my.ini)文件中的 log-error 选择所指向的文件。

如果配置文件中未指定该选项,则 Windows 系统下 MySQL 错误日志默认路径为:"数据目录/你的主机名称.err", Linux 系统下错误日志默认路径为:"/var/log/mysqld.log"。

SQL 命令查找方法:

mysql 复制代码
show variables like 'log_error';

肉还是别人家的香 - MySQL 通用二进制文件安装网上参考资料:https://blog.csdn.net/qq_37598011/article/details/93489404

四,Linux下安装MySQL数据库 - rpm 文件

基本介绍:

本次是在Linux下安装MySQL数据库。rpm 安装包安装。

本次演示的MySQL版本为: MySQL Community Server 8.0.20

1.查看环境信息

  • 查看 linux 内核版本的命令:
bash 复制代码
uname -a

uname 命令选项:

  • -a 或 --all:显示所有信息;
  • -n 或 --nodename:只打印对外主机名;
  • -r 或 --release:只打印内核版本;(下载文件时能用到)
  • -p 或 --processor:打印系统架构,比如X86_64;
  • -o 或 --operating-system:打印操作系统名称;

本文章是:GNU/Linux 的 x86_64 位操作系统。

  • 查看Linux操作系统版本的命令:
bash 复制代码
# 查看Linux系统版本的命令
lsb_release -a
# 或者
cat /etc/redhat-release

本文章使用的是:CentOS Linux release 7.6.1810 (Core) 操作系统版本

扩展 - Redhat系的Linux系统请使用:

bash 复制代码
cat /etc/issue

2.需要安装基础工具

如果你的服务器可以连接外网,并且 yum 可以正常使用,直接运行下面一条命令即可。

bash 复制代码
yum install -y net-tools perl libaio openssl gcc pcre-devel zlib-devel openssl vim openssl-devel

那如果你非常的不幸,要网没网 yum 库还中用的话!祝你好运!所有 rpm 安装包都有的网址:https://pkgs.org/ 直接在页面上搜索即可得到你想要的安装包。

  • 检查 - 安装 gcc 工具库:
bash 复制代码
gcc -v

注意:如果你的电脑上没有 gcc 的话,就需要安装一个。否则 MySQL 肯定会安装失败!

知识扩展:

根据MySQL官网的资料:https://dev.MySQL.com/doc/refman/8.0/en/source-installation-prerequisites.html

从MySQL 8.0.27开始,MySQL 8.0源代码允许使用C++17功能。若要在所有受支持的平台上启用良好的 C++17 支持级别,Linux环境gcc版本最好在7.1以上,所以先升级gcc版本(gcc7.5.0)。

  • 知识扩展 -升级 gcc 版本:

说明:不升级也不会影响 MySQL 安装。以下安装方式是使用源码安装,解压后需要 "编译"-"安装"。

下载需要的 gcc 版本 :下载网址:http://ftp.gnu.org/gnu/gcc/

上传 gcc-7.5.0.tar.xz 到服务器的 "/usr/local/gcc" 下。

bash 复制代码
mkdir /usr/local/gcc

进入目录 "/usr/local/gcc" 解压 gcc-7.5.0.tar.xz。

bash 复制代码
xz -d gcc-7.5.0.tar.xz
bash 复制代码
tar -xvf gcc-7.5.0.tar

进入解压目录 /gcc-7.5.0,下载依赖(自动下载依赖)。注意:此时,电脑网络必须保证是正常的。

bash 复制代码
cd gcc-7.5.0
bash 复制代码
./contrib/download_prerequisites

建立文件夹 build,并进入配置,生成 Makefile 文件即安装配置文件

bash 复制代码
mkdir /usr/local/gcc/gcc-7.5.0/build
bash 复制代码
cd /usr/local/gcc/gcc-7.5.0/build
bash 复制代码
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

编译安装

bash 复制代码
make & make install

删除老版本,为新版本创建软链接

bash 复制代码
rm -rf /usr/bin/gcc
rm -rf /usr/bin/g++
rm -rf /usr/lib64/libstdc++.so.6

创建文件夹映射链接 -- 注意这里要按你们自己的配置来

bash 复制代码
ln -sf /usr/local/bin/gcc /usr/bin/gcc
ln -sf /usr/local/bin/g++ /usr/bin/g++

动态库软链接

bash 复制代码
ln -sf /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6
ln -sf /usr/local/include/c++/7.5.0 /usr/include/c++/7.5.0

注意:文件链接的设置根据实际的情况配置。

重启服务器,再次查看gcc版本

bash 复制代码
reboot
bash 复制代码
gcc -v
  • 检查 - 安装 openssl-devel 工具库:
bash 复制代码
openssl version

可以看到是有的,并且系统自带的版本是 openssl-1.0.2k。

注意:如果你的电脑上没有 openssl-devel 的话,就需要安装一个。否则可能会导致 MySQL 安装失败!

  • 安装 openssl 说明:

说明:以下安装方式是使用源码安装,解压后需要 "编译"-"安装"。

  • 方式一: 使用 yum 安装
bash 复制代码
yum install openssl openssl-devel

注意:该方式必须保证 yum 命令正常(有外网)的情况下使用。

  • 方式二:下载安装包安装(离线安装)

说明:以下安装方式是使用源码安装,解压后需要 "编译"-"安装"。

下载需要的 ncurses 版本,下载地址:https://www.openssl.org/source/old/

上传 ncurses-5.9.tar.gz 到服务器的 "/usr/local/openssl" 下

bash 复制代码
mkdir /usr/local/openssl

进入目录 "/usr/local/openssl" 解压 openssl-1.1.1.tar.gz

bash 复制代码
tar -zxvf openssl-1.1.1.tar.gz

进入解压目录 openssl-1.1.1(完整路径为:/usr/local/openssl/openssl-1.1.1)

bash 复制代码
cd openssl-1.1.1/

根据系统环境制作安装配置文件

bash 复制代码
./config --prefix=/usr/local/openssl

安装配置文件

bash 复制代码
./config -t

编译安装

bash 复制代码
make & make install
  • 知识扩展 -升级 openssl 版本:

备份旧版本:

bash 复制代码
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak

建立新版本的软链接:

bash 复制代码
# 命令目录软链接
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
bash 复制代码
# 动态库软链接
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

将 openssl 的 lib 目录追加到 "ld.so.conf" 文件中

bash 复制代码
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

刷新动态链接库:

bash 复制代码
ldconfig -v

说明:如需使用新版本,则需替换原来的软链接指向,即替换原动态库,进行版本升级。

  • 检查 - 安装 cmake 工具库:
bash 复制代码
cmake -version

可以看到是有的,并且系统自带的版本是 2.0.12.2 的。

  • 安装 cmake 说明(离线安装):

说明:以下安装方式是使用源码安装,解压后需要 "编译"-"安装"。

gcc 等必备程序包,如果没有 gcc 请先安装 gcc 等程序包。

bash 复制代码
yum install -y gcc gcc-c++ make automake

注意:该方式必须保证 yum 命令正常(有外网)的情况下使用。

获取 cmake 源码包(下载需要的版本)

下载需要的 cmake 版本,下载地址:https://cmake.org/files/ 或者 https://cmake.org/download/

上传 cmake-2.8.10.2.tar.gz 到服务器的 "/usr/local/cmake" 下。

bash 复制代码
mkdir /usr/local/cmake

进入目录 "/usr/local/cmake" 解压 cmake-2.8.10.2.tar.gz

bash 复制代码
cd /usr/local/cmake
bash 复制代码
tar -zxvf cmake-2.8.10.2.tar.gz

进入解压目录 cmake-2.8.10.2(完整路径为:/usr/local/cmake/cmake-2.8.10.2),运行 "bootstrap" 或者 "configure" 文件。

bash 复制代码
cd cmake-2.8.10.2/

安装配置文件

bash 复制代码
./bootstrap
# 或者
./configure

编译安装(这步时间有点长)

bash 复制代码
gmak & gmake install

再次查看 cmake 版本

bash 复制代码
cmake -version
  • 知识扩展 -升级 cmake 版本:

说明:以下安装方式是使用通用 "二进制文件安装",解压即用。

下载需要的 cmake 版本,下载地址:https://cmake.org/files/ 或者 https://cmake.org/download/

上传 cmake-3.15.5-Linux-x86_64.tar.gz 到服务器的 "/usr/local/cmake" 下

bash 复制代码
mkdir /usr/local/cmake

进入目录(/usr/local/cmake)解压 cmake-3.15.5-Linux-x86_64.tar.gz

bash 复制代码
tar -zxvf cmake-3.15.5-Linux-x86_64.tar.gz

删除老版本,为新版本的文件链接:

bash 复制代码
# 删除老的 cmake 
rm -rf /usr/bin/cmake
bash 复制代码
# 通过建立链接 -替换 cmake
ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake

再次查看 cmake 版本

bash 复制代码
cmake -version
  • 检查 - 安装 ncuress-devel 工具库:

**查看电脑上是否安装了 ncurses **

bash 复制代码
rpm -qa | grep ncurses

注意:如果你的电脑上没有 ncuress-devel 的话,就需要安装一个。否则可能会导致 MySQL 安装失败!

ncuress-devel 安装说明:

  • 方式一: 使用 yum 安装
bash 复制代码
yum install ncurses-devel

注意:该方式必须保证 yum 命令正常(有外网)的情况下使用。

  • 方式二:下载 rpm 包安装 ncuress-devel(离线安装)

下载需要的 ncurses-devel 版本,下载地址:https://pkgs.org/download/ncurses 或者 http://mirror.centos.org/centos/7/os/x86_64/Packages/ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm

将 ncurses-devel 的安装包上传到服务器

安装命令:

bash 复制代码
rpm -ivh ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
  • 方式三:下载安装包安装(离线安装)

说明:以下安装方式是使用源码安装,解压后需要 "编译"-"安装"。

下载需要的 ncurses 版本,下载地址:https://ftp.gnu.org/gnu/ncurses/

上传 ncurses-5.9.tar.gz 到服务器的 "/usr/local/ncurses" 下

bash 复制代码
mkdir /usr/local/ncurses

进入目录 "/usr/local/ncurses" 解压 ncurses-5.9.tar.gz

bash 复制代码
tar -zxvf ncurses-5.9.tar.gz

进入解压目录 /ncurses-6.1(完整路径为:/usr/local/ncurses/ncurses-5.9)

bash 复制代码
cd ncurses-5.9/

安装配置文件

bash 复制代码
./configure

编译

bash 复制代码
make

安装

bash 复制代码
make install

**看到界面最后输出:表示 ncurses-devel 依赖就装好了。 **

javascript 复制代码
installing ./cursesapp.h in /home/wlf/ncurses/include/ncurses
installing ./cursesf.h in /home/wlf/ncurses/include/ncurses
installing ./cursesm.h in /home/wlf/ncurses/include/ncurses
installing ./cursesp.h in /home/wlf/ncurses/include/ncurses
installing ./cursesw.h in /home/wlf/ncurses/include/ncurses
installing ./cursslk.h in /home/wlf/ncurses/include/ncurses
installing etip.h in /home/wlf/ncurses/include/ncurses
make[1]: Leaving directory `/home/wlf/ncurses-5.9/c++'

3.下载 MySQL

打开官方下载地址:https://downloads.MySQL.com/archives/community/ 或者 https://dev.MySQL.com/downloads/MySQL/,根据自己对应是系统,以及版本进行选择,这里演示的是Linux系统的安装 MySQL 8.0.20(本文章是:GNU/Linux 的 x86_64 位操作系统)。

4.上传安装包并解压

  • 创建文件夹,将文件上传到 "/usr/local/mysql" 文件夹下。
bash 复制代码
mkdir /usr/local/mysql
  • 进入目录 "/usr/local/mysql" 解压安装包。
bash 复制代码
tar -xvf mysql-8.0.20-1.el7.x86_64.rpm-bundle.tar

5.进行安装

千万注意:在安装 MySQL 时一定要按照顺序安装。否则会安装失败。

安装顺序:

  1. mysql-community-common-xxx-xx.rpm
  2. mysql-community-test-xxx-xx.rpm
  3. mysql-community-libs-xxx-xx.rpm
  4. mysql-community-client-xxx-xx.rpm
  5. mysql-community-server-xxx-xx.rpm
  6. mysql-community-devel-xxx-xx.rpm

安装命令语法如下:

bash 复制代码
rpm -ivh mysql-xxx.rpm --nodeps
  • 安装 mysql-community-common- xx...
bash 复制代码
rpm -ivh mysql-community-common-8.0.20-1.el7.x86_64.rpm --nodeps

警告:MySQL-community-common-8.0.20-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:MySQL-community-common-8.0.20-1.e################################# [100%]

  • 安装 mysql-community-test- xx...
bash 复制代码
rpm -ivh mysql-community-test-8.0.20-1.el7.x86_64.rpm --force --nodeps

警告:mysql-community-test-8.0.20-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-test-8.0.20-1.el7################################# [100%]

  • 安装 MySQL-community-libs- xx...
bash 复制代码
rpm -ivh mysql-community-libs-8.0.20-1.el7.x86_64.rpm --force --nodeps

警告:mysql-community-libs-8.0.20-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-libs-8.0.20-1.el7################################# [100%]

  • 安装 mysql-community-client- xx...
bash 复制代码
rpm -ivh mysql-community-client-8.0.20-1.el7.x86_64.rpm --force --nodeps

警告:mysql-community-client-8.0.20-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-client-8.0.20-1.e################################# [100%]

  • 安装 mysql-community-server- xx...
bash 复制代码
rpm -ivh mysql-community-server-8.0.20-1.el7.x86_64.rpm --force --nodeps

警告:mysql-community-server-8.0.20-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-server-8.0.20-1.e################################# [100%]

  • 安装 mysql-community-devel- xx...
bash 复制代码
rpm -ivh mysql-community-devel-8.0.20-1.el7.x86_64.rpm --force --nodeps

警告:mysql-community-devel-8.0.20-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-devel-8.0.20-1.el################################# [100%]

安装时可能出现的问题:

bash 复制代码
[root@xxxxxx MySQL]# rpm -ivh MySQL-community-test-8.0.20-1.el7.x86_64.rpm --nodeps
警告:MySQL-community-test-8.0.20-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中...                          ################################# [100%]
file /usr/bin/mysqld_safe from install of MySQL-community-test-8.0.20-1.el7.x86_64 conflicts with file from package mariadb-server-1:5.5.60-1.el7_5.x86_64
​        file /usr/bin/MySQLtest from install of ......
​        ......

错误说明:mysql-community-test-8.0.20-1.el7.x86_64安装的文件/usr/bin/mysql_safe与软件包 mariab-server-1:5.5.60-1.el7_5.x 中的文件冲突

问题原因:我们安装的 MySQL 和 mariab-server 发生了冲突。

解决方式:我选择的是方式一

  • 方式一:在安装的命令后面加上 --force --nodeps(强制安装)。
  • 方式二:卸载引起冲突的软件(文件:mariab-server)。

6.启动和停止 MySQL

  • 启动 MySQL,并查看 MySQL 服务状态。 (注意:使用安装包安装 MySQL 的话,默认的服务名称为:mysqld)
bash 复制代码
service mysqld start
# 或者
systemctl start mysqld
  • 查询 MySQL 服务器的状态:
bash 复制代码
service mysqld status
# 或者
systemctl status mysqld
  • MySQL 服务开启时的状态:

说明:Active: active (running) "活动(正在运行)的",Main PID: 39490(mysqld):表示 MySQL 占用的进程id。

  • MySQL 服务关闭时的状态:

说明:Active: inactive (dead) "不活动(死)的",Main PID: 39490(mysqld):表示 MySQL 占用的进程id。

  • 扩展命令 - 查询 MySQL 服务状态命令:
bash 复制代码
ps -ef|grep mysqld
  • 扩展命令 - 端口(3306)信息查询命令:
bash 复制代码
lsof -i:3306
  • 停止 MySQL 服务:
bash 复制代码
service mysqld stop
# 或者
systemctl stop mysqld

7.登录 MySQL 并修改密码

  • 查看临时密码(说明:在 "错误日志" 中,默认为:"/var/log/mysqld.log")
bash 复制代码
more /var/log/mysqld.log | grep "A temporary password"
  • 登录 MySQL
bash 复制代码
mysql -uroot -p

登录成功!

  • 修改密码策略

说明:mysql 8.0 的默认密码策略要求是比较严苛的,所以这里需要修改 "密码策略"。如果不修改的话,密码设置的过于简单的话,会出现错误 错误1819(HY000)密码不符合当前策略要求 的错误。

mysql 复制代码
# 修改密码复杂级别
set global validate_password.policy=0;
mysql 复制代码
# 修改密码长度
set global validate_password.length=1;

注意:以上两个系统变量 8.0 后做了变动,变量名不同了。(validate_password_policy 和 validate_password.policy )

  • MySQL 8.0 版本之前使用 validate_password_policy 和 validate_password_length。
  • MySQL 8.0 版本之后使用 validate_password.policy 和 validate_password.length。
  • 修改 root 密码
mysql 复制代码
alter user 'root'@'localhost' identified with mysql_native_password by 'supconit-mysql';

扩展 - 常见修改用户信息的方式:

  • 使用 "set password for" 修改用户密码:
mysql 复制代码
set password for 'root'@'localhost' = 'supconit-mysql';
  • 使用 "alter user" 修改当前用户的密码:
mysql 复制代码
alter user user() identified by 'supconit-mysql';
  • 使用 "update" 修改用户的ip访问权限:
mysql 复制代码
update mysql.user set host = '%' where user = 'root' and host = 'localhost';

注意:使用 DML 语句修改用户密码,必须执行 "刷新权限" 命令也能生效。

mysql 复制代码
flush privileges;
  • 使用(navicat等工具)远程登录登录

navicat下载:链接:https://pan.baidu.com/s/1aknIUwy2L1Ws2uYL88COng 提取码:og7l

特别注意:在使用远程工具远程登录时连接不上。这时就有可能是服务器的防火墙没有关闭导致的!

  • 关闭防火墙
bash 复制代码
service firewalld stop
# 或者
systemctl stop firewalld

查看服务器的防火墙状态命令:

bash 复制代码
service firewalld status
# 或者
systemctl status firewalld
  • 防火墙开启时的状态:

说明:Active: active (running) "活动(正在运行)的"。

  • 防火墙关闭时的状态:

说明:Active: inactive (dead) "不活动(死)的"。

扩展 - 开启防火墙的命令:

bash 复制代码
service firewalld start
# 或者
systemctl start firewalld
  • 再次登录(使用远程工具)

肉还是别人家的香 - MySQL rpm 文件安装网上参考资料:https://blog.csdn.net/helpluozhao123/article/details/127217512