根底篇

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# 服务端应用的字符集默认为UTF8character-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=3306default-character-set=utf8  

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

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

形式二:

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-releaseCentOS 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 -pEnter 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