avatar


1.概述和工具准备

什么是数据库

数据库,DataBase,简称DB,作用是存储和管理数据。

特点有:

  1. 存储数据的仓库
  2. 是一个文件系统
  3. 提供了专门的工具来操作和管理数据

关系型和非关系型

数据库分为两类:

  1. 关系型数据库
    例如:MySQLOracleSQL ServerDB2SQLite
  2. 非关系型数据库。
    例如:RedisMongoDBElasticSearchHBase

关系型数据库

什么是关系型数据库

关系型数据库用二维表格,即行(Row)和列(Column)来表示数据,一系列的行和列,组成表(Table),一系列的表组成库(DataBase)。表与表之间,可能会有关联关系,比如部门表的每个部门的ID,会出现的员工表的部门字段中,表示某位员工的部门是哪个。

SQL是关系型数据库的查询语言。

关系型数据库设计规则

E-R(entity-relationship,实体-联系)模型中有三个主要概念:实体集、属性、联系集。

  • 一个实体集(class)对应于数据库中的一个表(table)。
  • 一个实体(instance)则对应于数据库表中的一行(row),也称为一条记录(record)。
  • 一个属性(attribute)对应于数据库表中的一列(column),也称为一个字段(field)。

表的关联关系

关联关系有四种:

  1. 一对一关联
  2. 一对多关联
  3. 多对多关联
  4. 自我关联(自我引用)

非关系型数据库

非关系型数据库又可以分为:

  1. 键值型数据库
  2. 文档型数据库
  3. 搜索数据库
  4. 列式数据库
  5. 图数据库

键值型数据库

键值型数据库,顾名思义,通过"Key-Value"键值的方式来存储数据。
Key和Value可以是简单的对象,也可以是复杂的对象,Key是唯一标识。
这类数据库的优点是查找速度快,在这方面明显优于关系型数据库。缺点是无法像关系型数据库一样使用条件过滤。
键值型数据库典型的使用场景是作为内存缓存。
典型的键值型数据库是Redis。

文档型数据库

文档型数据库,用于存储和读取文档,这些文档可以是XML、JSON等格式,一个文档就相当于一条记录。
我们可以认为,文档数据库所存放的文档,就相当于键值数据库所存放的"值"。

典型的文档型数据库是MongoDB。

搜索数据库

搜索数据库,典型代表是ElasticSearch。

关于Elastic Search,我们在《ElasticSearch实战入门(6.X)》有过更详细的讨论。

此外,常见的搜索数据库还有Solr、Splunk。

列式数据库

列式数据库是相对于行式存储的数据库而言的,如Oracle、MySQL、SQL Server等数据库都是采用的行式存储(Row-Based),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统。

典型的列式数据库是HBase。

图数据库

图数据库,专用于描述对象之间的关系。

图数据库

如图所示,是三星系各公司之间的持股关系,这种关系,之前讨论的的几种非关系型数据库都无法描述。关系型数据库,虽然可以描述,但不够方便。
而图数据库可以,图数据库的数据模型主要是以节点和边(关系)来实现,特点在于能高效地解决复杂的关系问题。
典型的图数据库有Neo4J、InfoGrid等。

(是的,图数据库,这种专门用来描述关系的数据库,却通常被分类到非关系数据库的类别。)

比较

关系型 非关系型
数据结构 结构化 非结构化
数据关联 关联的 无关联
查询方式 SQL 非SQL
事务特性 ACID 无事务(或者无法满足事务的强一致性)
  • 关系型数据库的数据关联,指的是通过外键的方式进行关联(虽然在阿里巴巴的开发规范中,不建议使用外键)。

MySQL安装与配置

目前,存在两个主要版本的MySQL,5.X和8.X。
在这里,我们以8.X为例。

Windows

我们先讨论如何在Windows上安装配置一个MySQL。

安装

关于Windows的安装包,可以从这个地址下载:https://dev.mysql.com/downloads/installer/

(如果需要安装5.X的版本,点击网页的"Looking for previous GA versions?",切换到5.X的安装包)

具体安装过程,我们不做太多讨论,和常见的Windows程序安装并没有太大区别。
唯一需要注意的是这里。
三种选择

三种选择,对应三种不同的内存使用量。

  • 开发:只会使用少数的内存。
  • 服务器:会使用中等程度的内存。
  • 专用:会使用所有的内存。

数据目录

在安装完成之后,我们可以打开Windows电脑上的这个地址

1
C:\ProgramData\MySQL\MySQL Server 8.0\Data

会看到如下内容:
MySQL

然后我们通过数据库客户端软件,比如Navicat,看看都有哪些库。
Navicat

一个文件夹一个库?
这似乎也和我们在本文开头的观点对上了,数据库是一个文件系统。

库的解释

information_schema,MySQL自带的数据库,主要保存MySQL数据库服务器的系统信息。比如数据库的名称、数据表的名称、字段名称、存取权限、数据文件所在的目录,等等。

performance_schema,MySQL自带的数据库,可以用来监控MySQL的各类性能指标。

sys,MySQL自带的数据库,主要作用是以一种更容易被理解的方式展示MySQL数据库服务器的各类性能指标。

mysql,MySQL自带的数据库,保存了MySQL数据库服务器运行时需要的系统信息,比如数据文件夹、当前使用的字符集、约束检查信息等。

其他操作

卸载
如果我们卸载MySQL的,并且以后都不用的话,可以删除C:\ProgramData\MySQL\MySQL Server 8.0\Data这个目录。

服务
Windows上,在安装完成之后,默认是服务已经启动,而且是开机自启动。但,也可以自行修改启动方式,或者停止服务。
通过命令services.msc打开"服务",找到MySQL的服务(默认是mysql80,具体服务名称,在安装过程中会有提示,可以修改),即可修改启动方式,或者停止服务。

此外,还可以,以管理员身份运行cmd,通过命令net start mysql80net stop mysql80,启动和停止服务。

配置文件
MySQL的配置文件:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

Linux:YUM

接下来,我们讨论如何在Linux上安装和配置MySQL。

在Linux上安装软件,有四种方式。

  1. 源码编译
  2. 压缩包解压(一般为tar.gz)
  3. 编译好的安装包(RPM、DPKG等)
  4. 在线安装(YUM、APT等)

在这里,我们只讨论YUM和RPM。

删除已安装的MariaDB

MariaDB是一款默认安装在CentOS 7的数据库软件,我们先将MariaDB卸载。

(其实,MariaDB是MySQL的一个分支。2009年SUN被Oracle收购,MySQL的创始人等担心MySQL有闭源的风险,因此创建了MySQL的分支项目MariaDB。)

检查MariaDB

示例代码:

1
rpm -qa|grep mariadb
运行结果:
1
mariadb-libs-5.5.68-1.el7.x86_64

删除Mariadb

示例代码:

1
rpm -e --nodeps mariadb-libs
运行结果:
1
【无】

检查MySQL

示例代码:

1
rpm -qa|grep mysql
运行结果:
1
2
3
4
5
6
7
mysql-community-client-8.0.28-1.el7.x86_64
mysql-community-common-8.0.28-1.el7.x86_64
mysql-community-libs-8.0.28-1.el7.x86_64
mysql-community-server-8.0.28-1.el7.x86_64
mysql80-community-release-el7-5.noarch
mysql-community-client-plugins-8.0.28-1.el7.x86_64
mysql-community-icu-data-files-8.0.28-1.el7.x86_64

删除MySQL

示例代码:

1
2
3
rpm -e --nodeps mysql-community-client

【部分代码略】

添加MySQL Yum Repository

查看系统版本

示例代码:

1
cat /etc/redhat-release
运行结果:
1
CentOS Linux release 7.9.2009 (Core)

选择对应的版本进行下载

https://repo.mysql.com/ ,找到对应的版本。
例如,在CentOS 7安装MySQL的rpm地址为:https://repo.mysql.com/mysql80-community-release-el7.rpm

  • 注意,必须是el7

示例代码:

1
wget https://repo.mysql.com/mysql80-community-release-el7.rpm
运行结果:
1
2
3
4
5
6
7
8
9
10
--2022-01-28 21:10:04--  https://repo.mysql.com/mysql80-community-release-el7.rpm
Resolving repo.mysql.com (repo.mysql.com)... 104.86.185.42
Connecting to repo.mysql.com (repo.mysql.com)|104.86.185.42|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10928 (11K) [application/x-redhat-package-manager]
Saving to: ‘mysql80-community-release-el7.rpm’

100%[===================================================================] 10,928 --.-K/s in 0s

2022-01-28 21:10:06 (304 MB/s) - ‘mysql80-community-release-el7.rpm’ saved [10928/10928]

安装MySQL源

示例代码:

1
rpm -Uvh mysql80-community-release-el7.rpm
运行结果:
1
2
3
4
warning: mysql80-community-release-el7.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql80-community-release-el7-5 ################################# [100%]

注意:rpm -UvhU大写。

检查是否安装成功

安装成功后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo以及mysql-community-source.repo

示例代码:

1
ll /etc/yum.repos.d/
运行结果:
1
2
3
4
5
total 16
-rw-r--r-- 1 root root 675 Jan 28 20:35 CentOS-Base.repo
-rw-r--r-- 1 root root 230 Jan 28 20:35 epel.repo
-rw-r--r-- 1 root root 2062 Jan 13 03:00 mysql-community.repo
-rw-r--r-- 1 root root 2132 Jan 13 03:00 mysql-community-source.repo

通过yum repolist可以看到mysql相关资源。
示例代码:

1
yum repolist enabled | grep "mysql.*-community.*"
运行结果:
1
2
3
mysql-connectors-community/x86_64 MySQL Connectors Community                 230
mysql-tools-community/x86_64 MySQL Tools Community 138
mysql80-community/x86_64 MySQL 8.0 Community Server 321

选择MySQL版本

查看当前MySQL Yum Repository中所有MySQL版本
示例代码:

1
yum repolist all | grep mysql
运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Community   disabled
mysql-cluster-7.5-community-source MySQL Cluster 7.5 Community - disabled
mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Community disabled
mysql-cluster-7.6-community-source MySQL Cluster 7.6 Community - disabled
mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Community disabled
mysql-cluster-8.0-community-source MySQL Cluster 8.0 Community - disabled
mysql-connectors-community/x86_64 MySQL Connectors Community enabled: 230
mysql-connectors-community-source MySQL Connectors Community - disabled
mysql-tools-community/x86_64 MySQL Tools Community enabled: 138
mysql-tools-community-source MySQL Tools Community - Sourc disabled
mysql-tools-preview/x86_64 MySQL Tools Preview disabled
mysql-tools-preview-source MySQL Tools Preview - Source disabled
mysql57-community/x86_64 MySQL 5.7 Community Server disabled
mysql57-community-source MySQL 5.7 Community Server - disabled
mysql80-community/x86_64 MySQL 8.0 Community Server enabled: 321
mysql80-community-source MySQL 8.0 Community Server - disabled
  • 注意disabledenabled

切换版本

如果版本不对,需要切换版本。切换版本的命令如下:

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

注意:

  • 在这里我们不需要切换版本。
  • 如果提示yum-config-manager: command not found。这是因为系统默认没有安装这个命令,这个命令在yum-utils包里,可以通过命令yum -y install yum-utils进行安装。

除了使用yum-config-manager之外,还可以直接编辑/etc/yum.repos.d/mysql-community.repo文件。
示例代码:

1
2
3
4
5
6
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

解释说明:

  • enabled=0:禁用
  • enabled=1:启用

安装MySQL

示例代码:

1
yum install mysql-community-server
  • 在安装过程中,还会提问Is this ok,一般输入y,即可。

该命令会安装MySQL服务器(mysql-community-server)及其所需的依赖、相关组件,包括mysql-community-clientmysql-community-commonmysql-community-libs等。

至此,MySQL安装完毕。

启动MySQL

启动

示例代码:

1
systemctl start mysqld.service

查看状态

示例代码:

1
systemctl status mysqld.service
运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2022-01-28 21:19:16 CST; 5s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 1487 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 1562 (mysqld)
Status: "Server is operational"
CGroup: /system.slice/mysqld.service
└─1562 /usr/sbin/mysqld

Jan 28 21:19:11 Linux systemd[1]: Starting MySQL Server...
Jan 28 21:19:16 Linux systemd[1]: Started MySQL Server.
[root@Linux ~]#

停止和重启

两个相关的命令,停止和重启,也在这里列举一下。
停止:

1
systemctl stop mysqld.service

重启:
示例代码:

1
systemctl restart mysqld.service

修改密码

初始密码

MySQL第一次启动后会创建超级管理员账号root@localhost,初始密码存储在日志文件中。
在日志中找到初始密码。
示例代码:

1
grep 'temporary password' /var/log/mysqld.log
运行结果:
1
2022-01-28T13:19:13.656009Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: /#.fRi:yF1,?

登录

示例代码:

1
mysql -h127.0.0.1 -uroot -p
运行结果:
1
Enter password:

然后输入上一步找到的临时密码。
注意:

  • 密码建议在下一行输入,保证安全。(否则用history命令能看到密码)
  • 如果在同一行输入密码,-p与密码之间不能有空格,但其他参数名与参数值之间可以有空格也可以没有空格。

注意,上述的登录命令,默认可以不输入-h127.0.0.1。此外上述的登录命令还有一个完整版,如下

1
mysql --host=127.0.0.1 --user=root --password

修改密码

示例代码:

1
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
运行结果:
1
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

出现这个提示是因为密码太简单了,解决方法如下:

  1. 使用复杂密码,MySQL默认的密码策略是要包含数字、大小写字母及特殊字符。
  2. 修改密码策略,修改配置文件/etc/my.cnf,添加validate_password=OFF,保存并重启MySQL。

建议使用复杂密码!

示例代码:

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MySQL@2022';
运行结果:
1
Query OK, 0 rows affected (0.00 sec)

允许root远程访问

但是,这时候我们并不能远程访问我们的数据库,只能登录服务器进行访问。
接下来,我们讨论如何允许root远程访问。

授权

关于授权部分,在8版本和5版本的区别较大。

8版本的方式如下:

  1. 先创建用户:
    1
    CREATE USER '用户名'@'IP地址' IDENTIFIED BY '密码';
    示例代码:
    1
    CREATE USER 'root'@'%' IDENTIFIED BY 'MySQL@2022';
  2. 再给用户授权:
    1
    grant all privileges on 库名.表名 to '用户名'@'IP地址';
    示例代码:
    1
    grant all privileges on *.* to 'root'@'%';

5版本的方式如下:

1
grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;
示例代码:
1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'MySQL@2022' WITH GRANT OPTION;

刷新

示例代码:

1
FLUSH PRIVILEGES;

设置编码为utf8

查看编码

示例代码:

1
SHOW VARIABLES LIKE 'character%';
运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
如果是5版本,执行结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

退出

exitquit,都可以。
示例代码:

1
exit;
运行结果:
1
Bye

修改字符集

如果是5版本,需要修改字符集。
编辑/etc/my.cnf[mysqld]节点增加以下代码:

1
2
3
[mysqld]
character_set_server=utf8
init-connect='SET NAMES utf8'

在修改字符集之后,需要重启MySQL。

设置开机启动

示例代码:

1
2
systemctl enable mysqld
systemctl daemon-reload

Linux:RPM

第二种Linux系统的安装方法是通过RPM。

删除已安装的MariaDB

第一步同样是删除已安装的MariaDB,具体操作略,参考上文。

下载MySQL安装包

在这个网址 https://dev.mysql.com/downloads/mysql/ ,找到对应的安装包,并下载。

示例代码:

1
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
  • 如果不想下载rpm-bundle,官网也提供单独的rpm下载链。

安装MySQL

解压

示例代码:

1
tar -xvf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
运行结果:
1
2
3
4
5
6
7
8
9
10
mysql-community-client-8.0.28-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
mysql-community-common-8.0.28-1.el7.x86_64.rpm
mysql-community-devel-8.0.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.28-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
mysql-community-libs-8.0.28-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm
mysql-community-server-8.0.28-1.el7.x86_64.rpm
mysql-community-test-8.0.28-1.el7.x86_64.rpm

我们需要安装的是这六个:

  1. mysql-community-common-8.0.28-1.el7.x86_64.rpm
  2. mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
  3. mysql-community-libs-8.0.28-1.el7.x86_64.rpm
  4. mysql-community-client-8.0.28-1.el7.x86_64.rpm
  5. mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
  6. mysql-community-server-8.0.28-1.el7.x86_64.rpm

如果是MySQL5.X的话,只需要安装四个:

  1. mysql-community-common-5.7.36-1.el7.x86_64.rpm
  2. mysql-community-libs-5.7.36-1.el7.x86_64.rpm
  3. mysql-community-client-5.7.36-1.el7.x86_64.rpm
  4. mysql-community-server-5.7.36-1.el7.x86_64.rpm

安装

各rpm包是有依赖关系的,所以需要按照如下的顺序进行安装:

1
2
3
4
5
6
rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm

记不住顺序怎么办?没关系,安装过程中会提示。
例如,提示

1
2
3
warning: mysql-community-libs-8.0.28-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
error: Failed dependencies:
mysql-community-client-plugins = 8.0.28-1.el7 is needed by mysql-community-libs-8.0.28-1.el7.x86_64

另外,如果安装过程中提示缺少了其他的包,那么就把缺少的包安装上,可能会提示需要安装libaio

1
yum install libaio

macOS

关于macOS的安装包,可以从这个地址下载:https://dev.mysql.com/downloads/mysql/
整个安装过程,没有需要赘述的。

安装完成后,在macOS的System Preferences可以看到MySQL,点击之后,分别可以启动停止MySQL以及配置文件路径。

macOS

安装完成后,已经可以通过各种图形化的MySQL工具连接了,但是还无法通过类似于mysql -uroot -p的命令连接,因为安装路径还没有添加到系统搜索路径(环境变量)下。
默认安装路径是/usr/local/mysql,如果要使用子程序,需要将/usr/local/mysql/bin添加到系统环境变量中。
编辑.bash_profile,示例代码:

1
open ~/.bash_profile

新增如下内容:

1
export PATH=${PATH}:/usr/local/mysql/bin

刷新,使其生效。

1
source ~/.bash_profile

除了设置环境变量,第二种方法,我们只为常用命令mysqlmysqladmin设置别名,示例代码:

1
2
alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/mysqladmin

tar.gz

再讨论一下基于tar.gz安装MySQL,以在Linux中为例,macOS中整体类似。

准备工作

在准备工作阶段,同样需要删除已安装的MySQL,具体操作略,参考上文。

下载包并解压

在这个网址https://downloads.mysql.com/archives/community/,找到对应的安装包,下载并解压。

解压命令:

1
tar -zxvf mysql-8.0.33-el7-x86_64.tar.gz

配置安装

一、在解压后的目录下,创建data文件夹

1
2
cd mysql-8.0.33-el7-x86_64
mkdir data

二、添加用户和用户组

添加mysql用户:

1
useradd mysql

三、修改mysql安装目录的所属用户组

1
chown -R mysql:mysql mysql-8.0.33-el7-x86_64

四、创建mysql配置文件

1
vim /etc/my.cnf

配置文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录(此处填写自己mysql安装目录)
basedir=/usr/local/mysql/mysql-8.0.33-el7-x86_64
# 设置mysql数据库的数据的存放目录(刚刚创建的data目录)
datadir=/usr/local/mysql/mysql-8.0.33-el7-x86_64/data
# 设置mysql允许最大连接数
max_connections=200
# 设置允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

user=mysql
lower_case_table_names=1
default-time-zone='+8:00'
sql_mode=NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE

[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4

四、初始化mysql服务

/usr/local/mysql/mysql-8.0.33-el7-x86_64/bin执行如下的命令,初始化,示例代码:

1
./mysqld --initialize --console
运行结果:
1
2
3
4
5
6
2023-10-08T07:06:14.828204Z 0 [Warning] [MY-010915] [Server] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2023-10-08T07:06:14.828309Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
2023-10-08T07:06:14.828344Z 0 [System] [MY-013169] [Server] /usr/local/mysql/mysql-8.0.33-el7-x86_64/bin/mysqld (mysqld 8.0.33) initializing of server in progress as process 28051
2023-10-08T07:06:14.856500Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-10-08T07:06:15.145062Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-10-08T07:06:15.875784Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 3m?uJQ%nHcB;

注意,这个是初始密码。

1
A temporary password is generated for root@localhost: 3m?uJQ%nHcB;

启动停止MySQL

support-files目录下,找到mysql.server

启动MySQL:

1
./mysql.server start

停止MySQL:

1
./mysql.server stop

启动之后,可以通过./mysql -uroot -p登录,后续修改密码、允许远程访问等操作,与上文没有区别。

题外话

my.cnf默认路径是/etc/my.cnf,想要修改默认位置,可以修改support-files/mysql.server里207行的conf=
(不同版本的MySQL可能略有区别,一般再207行上下。)

安装MySQL客户端

对于Windows和MacOS上安装MySQL客户端,我们不讨论。可以利用DataGrip或者Navicat等图形化的软件。
在Linux上安装MySQL客户端的方法如下:

1
yum install mysql -y

连接异常的处理

对于部分客户端,在连接的时候,可能会有如下的错误:

连接异常的处理

原因是:MySQL8.0默认采用caching_sha2_password的加密方式,但是有些第三方客户端不支持这种加密方式。

解决方法如下:

  1. 登录服务器,通过命令,mysql -u root -p,进入MySQL。
  2. 修改加密方式,例如:
    1
    ALTER USER'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Qigaoxiang2018@';
  3. 刷新:
    1
    FLUSH PRIVILEGES;

卸载MySQL

  1. 关闭MySQL服务

  2. 查询系统是否安装了MySQL
    查询系统是否安装了MySQL,示例代码:

    1
    rpm -qa | grep -i mysql

    运行结果:

    1
    2
    3
    4
    5
    6
    7
    mysql-community-server-8.0.35-1.el7.x86_64
    mysql-community-libs-8.0.35-1.el7.x86_64
    mysql-community-client-plugins-8.0.35-1.el7.x86_64
    mysql80-community-release-el7-11.noarch
    mysql-community-icu-data-files-8.0.35-1.el7.x86_64
    mysql-community-client-8.0.35-1.el7.x86_64
    mysql-community-common-8.0.35-1.el7.x86_64

    如输出结果表示,已经安装了MySQL,所以不得不卸载重装

  3. 卸载并删除MySQL安装的组键服务,示例代码:

    1
    2
    3
    4
    5
    6
    7
    rpm -ev mysql-community-server-8.0.35-1.el7.x86_64
    rpm -ev mysql-community-libs-8.0.35-1.el7.x86_64
    rpm -ev mysql-community-client-plugins-8.0.35-1.el7.x86_64
    rpm -ev mysql80-community-release-el7-11.noarch
    rpm -ev mysql-community-icu-data-files-8.0.35-1.el7.x86_64
    rpm -ev mysql-community-client-8.0.35-1.el7.x86_64
    rpm -ev mysql-community-common-8.0.35-1.el7.x86_64
  4. 查看MySQL对应的文件夹,示例代码:

    1
    find / -name mysql

    运行结果:

    1
    2
    3
    4
    5
    6
    /var/lib/mysql
    /var/lib/mysql/mysql
    /var/lib/pcp/config/pmlogconf/mysql
    /etc/selinux/targeted/active/modules/100/mysql
    /etc/selinux/targeted/tmp/modules/100/mysql
    /usr/lib64/mysql
  5. 删除系统中MySQL的所有文件夹,示例代码:

    1
    2
    3
    4
    5
    6
    rm -rf /var/lib/mysql
    rm -rf /var/lib/mysql/mysql
    rm -rf /var/lib/pcp/config/pmlogconf/mysql
    rm -rf /etc/selinux/targeted/active/modules/100/mysql
    rm -rf /etc/selinux/targeted/tmp/modules/100/mysql
    rm -rf /usr/lib64/mysql
  6. 最后验证MySQL是否删除完成,示例代码:

    1
    rpm -qa | grep -i mysql

SQL

什么是SQL

SQL,Structured Query Language,结构化查询语言。当然,其实SQL不仅仅可以查询,还可以新增、修改、删除等,只是取了这个名字。

SQL是操作所有关系型数据库的规则,关系型数据库有很多,但是所有的关系型数据库都遵守SQL的规则。
《基于JavaScript的前端开发入门:2.基础语法》中,我们讨论了ECMAScript,ECMAScript是JavaScript的语法和基础核心,是所有浏览器厂商共同遵守的一套JavaScript语法工业标准。
也就是说,SQL和ECMAScript类似,是一种大家都遵守的约定。

ECMAScript存在一些方言,例如:JScript、ActionScript等。
SQL也存在一些方言,有些是MySQL特有、有些是Oracle特有。

ECMAScript存在很多版本,其中比较重要的版本是ES6。
SQL也存在很多版本,其中比较重要的版本的是SQL92和SQL99。

SQL分类

SQL在功能上主要分为如下四类:

  1. DQL(Data Query Languages),数据查询语言。用来查询数据库中表的记录(数据)。
    主要的语句关键字有:SELECTWHERE等。
  2. DDL(Data Definition Languages),数据定义语言,这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
    主要的语句关键字有:CREATEDROPALTER等。
  3. DML(Data Manipulation Language),数据操作语言,用于添加、删除、更新数据库记录,并检查数据完整性。
    主要的语句关键字有:INSERTDELETEUPDATE等。
  4. DCL(Data Control Language),数据控制语言,用于定义数据库、表、字段、用户的访问权限和安全级别。
    主要的语句关键字有:GRANTREVOKECOMMITROLLBACKSAVEPOINT等。

这四种SQL和库以及表的关系如下:
四种SQL和库以及表的关系

  • 有一些资料会把DQL合并到DML
  • 还有一些资料会把COMMITROLLBACK抽出来,称为TCL(Transaction Control Language),事务控制语言。

SQL的规则与规范

  • SQL可以写在一行或者多行。
    为了提高可读性,各子句分行写,必要时可以使用缩进。
  • 每条命令以;\g\G结束。
  • 关键字不能被缩写也不能分行。
  • 标点符号:
    必须保证所有的括号()、单引号' '、双引号" "是成对的。
    必须使用半角的表标点符号。
    字符串型和日期时间类型的数据可以使用单引号' '表示。
    列的别名,尽量使用双引号" ",而且不建议省略as

除了上述规则,还有和命名有关的规则,我们会在《3.DDL、DML、DCL》进行讨论。

注释

  • 单行注释:#,MySQL特有的方式。
  • 单行注释:-- --后面必须有一个空格。
  • 多行注释:/* 注释文字 */

SQL大小写建议

  • 如果MySQL被安装在Windows上,是大小写不敏感的。
  • 如果MySQL被安装在Linux上:
    数据库名、表名、表的别名、变量名是大小写敏感的。
    关键字、函数名、列名(或字段名)、列的别名(字段的别名)是大小写不敏感的。

推荐采用统一的书写规范:

  • 数据库名、表名、表别名、字段名、字段别名等都小写。
  • 关键字、函数名、绑定变量等都大写。
文章作者: Kaka Wan Yifan
文章链接: https://kakawanyifan.com/11101
版权声明: 本博客所有文章版权为文章作者所有,未经书面许可,任何机构和个人不得以任何形式转载、摘编或复制。

留言板