likes
comments
collection
share

第一章-初识MySQL

作者站长头像
站长
· 阅读数 13

基础篇

1、安装Mysql

在windows上安装Mysql

zip包解压安装

1.下载mysql压缩包

下载地址:https://dev.mysql.com/downloa...

2.解压下载的zip包

3.在解压后的根目录新建my.ini文件,修改文件内容

注意:目录名不要以t、s、n开头,会被默认识别为\t、\s、\n等,导致my.ini文件报错

文件内容:

[mysqld]
#设置时区为东八区,此项设置后,在连接MySQL的时候可以不用每次都手动设置时区
default-time-zone = '+8:00'
# 设置3306端口
port=3306
# 设置mysql的安装目录,记得切换成自己的路径
basedir=D:\Learn\Tools\mysql-8.0.29-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\Learn\Tools\mysql-8.0.29-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8  

4.以管理员身份进入mysql的bin目录

方式一:win+r输入cmd,然后Ctrl+Shift+Enter即可用管理员权限运行。

方式二:第一章-初识MySQL

5.执行MySQL初始化命令

mysqld --initialize

6.执行MySQL安装命令

mysqld --install mysql8

7.查看MySQL默认的密码

打开【mysql安装目录】\data*.err文件,找到 A temporary password is generated for root@localhost:【默认密码】

8.修改密码

使用默认密码登录mysql

mysql -uroot -p
请输入密码:【默认密码】

执行

use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED  BY '新密码';

在Linux上安装Mysql

yum安装

1.查看是否已经安装了mysql

[root@localhost ~]# rpm -qa|grep mysql #无输出说明没有安装

2.找到对应linux的版本

下载地址:https://dev.mysql.com/downloa...

3.安装mysql源

#下载查看操作系统版本
[root@localhost ~] cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

#下载和安装mysql源
[root@localhost ~] wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
#如果显示wget未找到命令,则需要先安装wget
[root@localhost ~] yum -y install wget
#安装mysql源
[root@localhost ~]# sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm

检查是否安装成功:执行成功后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo及 mysql-community-source.repo

4.安装mysql

[root@localhost ~]# sudo yum install mysql-community-server

5.启停/修改密码/开机自启

[root@localhost ~]# systemctl start mysqld.service
[root@localhost ~]# systemctl status mysqld.service
[root@localhost ~]# systemctl stop mysqld.service
[root@localhost ~]# systemctl restart mysqld.service

#初始密码
[root@localhost ~]# grep 'temporary password' /var/log/mysqld.log

# 修改密码
# 先进行登录
[root@localhost ~]# mysql -uroot -p
Enter password: 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPassword';
#密码太弱
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 


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

6.设置远程访问,添加用户

#设置root用户远程访问
mysql> use mysql;
mysql> select user,host from user;
mysql> update user set host = '%' where user = 'root';
mysql> flush privileges;

#添加mysql用户,设置mysql用户远程访问
mysql> create user 'mysql'@'%' identified with mysql_native_password by 'Lg5181349!';
mysql> grant all privileges on *.* to 'mysql'@'%' with grant option;
mysql> flush privileges;

2、mysql的执行过程

连接管理

连接方式
  • TCP/IP
  • 命名管道
  • 共享内存
  • UNIX域套接字
连接原理

​ 当一个客户端进程连接到服务器时,服务器会开启一个线程专门处于与该客户端的请求,与该客户端交互。当客户端断开连接后,服务端并不会直接销毁该线程,而是将它缓存起来,在另一个新的客户端在进行连接时,把这个缓存的线程分配给新的客户端。这样做是为了减少线程的频繁创建和销毁,从而节省开销。

​ 当建立连接后,服务端会一直等待客户端发送过来的请求,该请求只是一个文本消息,mysql还需要将文本消息经过各种处理。

解析与优化

查询缓存
  • mysql会将查询请求的结果缓存下来,当有相同的请求过来时,mysql会现在缓存中查找结果,而且这个缓存可以在不同的客户端之间共享。
  • 如果两个请求有任何字符上的一点不一样,都会导致缓存不会命中。
  • 如果查询请求中包含系统函数或者用户定义变量和函数、系统表,请求结果就不会被缓存,例如NOW()函数返回的数据,本身就不应该缓存。
  • 如果表的数据和表的结构更新了,所有与该表相关的查询缓存也将失效。比如(update\insert\delete\truncate table\alert table\drop table\drop databases)等语句执行后,那么该表缓存的select结果就会更新。
  • mysql8中将缓存删除了
语法解析
  • 语法解析就是先判断客户端发送过来的文本信息的正确性,然后将文本编译为mysql服务器内部使用的一些数据结构上。
  • 从本质上将,从文本中提取可用信息的过程,其实属于一个编译的过程,设计词法解析、语法分析、语义分析等阶段。
查询优化
  • mysql会将我们编写的sql语句优化为它认为执行效率更高的样子。
  • 优化的结果其实就是生成一个执行计划,我们可以使用explain语句来查看某一个sql语句的执行计划。

存储引擎

理论支持
  • 在查询优化完成之后,其实mysql还没有真正的去访问真实的数据,mysq服务器将数据的存储和提取操作都封装到了一个名为存储引擎的模块中。
  • 存储引擎的本质其实就是接收上层传下来的指令,然后对表中的数据进行读取或者写入操作。
  • 为了方便管理,mysql服务器将处理请求的过程分为server层和存储引擎层

    • server层负责不涉及真实数据的处理,如连接管理、查村缓存、语法解析、查询优化等,
    • 存储引擎层负责真实的数据存取
    • 各个不同的存储引擎为server层提供相同的调用接口,其中包含几十个不同用途的底层函数
    • 在server层完成优化后,只需要按照生产的执行计划调用底层存储引擎提供的节后获取结果返回客户端就好了
    • server层和存储引擎层交互一般是以记录为单位,也就是server层先向存储引擎层取一条数据,然后判断是否符合条件,若符合,就返回到缓冲区,缓冲区满了则返回给客户端,若不符合,就跳过该记录,取下一条记录。
存储引擎的操作
#创建表时指定存储引擎
CREATE TABLE [TABLENAME](
    ...
)ENGINE = [ENGINENAME];

#修改表的存储引擎
ALERT TABLE [TABLENAME] ENGINE = [ENGINENAME];

#查看表的存储引擎
SHOW CREATE TABLE [TABLENAME]\G
转载自:https://segmentfault.com/a/1190000042255926
评论
请登录