连接、服务、引擎、存储
它包含了对SQL语句处理的全过程。
show variables like max_connections
来查看,一般最大默认连接量是 151。包含服务的启动,停止,状态查看,数据库内容的查看等基本命令。
由于是用宝塔面板安装,所以可能会有不一样的地方。
路径 | 描述 |
---|---|
/www/server/data | mysql数据库的存放路径 |
/etc/my.cnf | 配置文件目录位置 |
/www/server/mysql/bin | 相关命令目录 |
/etc/init.d | 服务启动相关 |
# 查看Linux的关于mysql的组
[root@localhost lib]# cat /etc/group|grep mysql
mysql:x:1002:
# 查看Linux的关于mysql的组的用户
[root@localhost lib]# cat /etc/passwd|grep mysql
mysql:x:1002:1002::/home/mysql:/sbin/nologin
# 查看有没有安装MySQL服务
[root@localhost lib]# rpm -qa|grep -i mysql
# 查看mysql安装目录
[root@localhost lib]# ps -ef|grep mysql
# 服务启动
service mysqld start
# 服务停止
service mysqld stop
# 查看服务状态
service mysqld status
# 设置开机自动启动服务
chkconfig mysqlid on
# 查看设置状态,2、3、4都为on则开启开机自动启动
chkconfig --list | grep mysqlid
# centos7下运用它
systemctl enable mysqld.service
# 运用宝塔面板装的mysql配置文件在 /etc/my.cnf
[root@localhost /]# find / -name my.cnf
/etc/my.cnf
/www/server/mysql/mysql-test/suite/federated/my.cnf
/www/server/mysql/mysql-test/suite/group_replication/my.cnf
/www/server/mysql/mysql-test/suite/ndb/my.cnf
/www/server/mysql/mysql-test/suite/ndb_big/my.cnf
/www/server/mysql/mysql-test/suite/ndb_binlog/my.cnf
/www/server/mysql/mysql-test/suite/ndb_ddl/my.cnf
/www/server/mysql/mysql-test/suite/ndb_memcache/my.cnf
/www/server/mysql/mysql-test/suite/ndb_rpl/my.cnf
/www/server/mysql/mysql-test/suite/ndb_team/my.cnf
/www/server/mysql/mysql-test/suite/ndbcluster/my.cnf
/www/server/mysql/mysql-test/suite/rpl/extension/bhs/my.cnf
/www/server/mysql/mysql-test/suite/rpl/my.cnf
/www/server/mysql/mysql-test/suite/rpl_ndb/my.cnf
建议安装完成 mysql 之后就设置
# 查看字符集
show variables like 'character%';
show variables like '%char%';
# 找到指定配置文件并打开
[root@localhost ~]# cd /etc
[root@localhost etc]# ls -i my.cnf
19620831 my.cnf
[root@localhost etc]# vim my.cnf
1 [client]
2 #password = your_password
3 port = 3306
4 socket = /tmp/mysql.sock
5 default-character-set=utf8 # 新添加的字符集设置
7 [mysqld]
8 port = 3306
9 character_set_server=utf8 # 新添加的字符集设置
10 character_set_client=utf8 # 新添加的字符集设置
11 collation-server=utf8_general_ci # 新添加的字符集设置
12 socket = /tmp/mysql.sock
13 datadir = /www/server/data
14 default_storage_engine = InnoDB
15 performance_schema_max_table_instances = 400
16 table_definition_cache = 400
17 skip-external-locking
18 key_buffer_size = 32M
19 max_allowed_packet = 100G
20 table_open_cache = 128
21 sort_buffer_size = 768K # 排序缓冲池大小,长难句统计排序,这里适当调大
22 net_buffer_length = 4K
23 read_buffer_size = 768K
24 read_rnd_buffer_size = 256K
25 myisam_sort_buffer_size = 8M
26 thread_cache_size = 16 # 线程缓冲池大小
27 query_cache_size = 16M # 查询缓冲池大小
28 tmp_table_size = 32M
29 sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
...
64 [mysql]
65 no-auto-rehash # 是否开启自动补全
66 default-character-set=utf8 # 新添加的字符集设置
...
[root@localhost data]# cd db01/
[root@localhost db01]# ll
total 112
-rw-r-----. 1 mysql mysql 67 Nov 25 16:27 db.opt
-rw-r-----. 1 mysql mysql 8586 Nov 25 16:28 user01.frm # 表结构文件,用于数据库迁移
-rw-r-----. 1 mysql mysql 98304 Nov 25 16:29 user01.ibd # 5.7之后默认InnoDB
用来做参考的sql语句:
SELECT customer_id,first_name,last_name FROM customer WHERE customer_id = 14;
通过客户端携带正确的参数(主机,用户名,密码等信息)对数据库服务器建立连接,数据库的连接层一直会处于监听状态,如果建立连接之后,首先判断查询语句是否满足缓存中的数据,是的话直接返回缓存中的数据给客户端,否则就走下一步。
对于我们的MySQL会将缓存存在一个引用表中,可以理解为一个HashMap的结构,通过计算关于版本号,sql语句内容之类的东西来进行比对,也就是说多一个空格都不行,所以缓存的命中概率极低。
没有命中缓存的话进入解析器阶段,主要这个阶段就是解析SQL命令。SQL是以字符串的形式传过来的,我们得解析成数据库认识的、合法的SQL语句。
解析过程主要包含以下五个阶段:
词法分析:
按照,进行分词拆分,将一条SQL拆分成各个零件,拿上面的SQL语句就是:
SELECT,customer_id,first_name,last_name,FROM,customer,WHERE,customer_id,=,14
语法分析:
解析树:
预处理器:
新解析树:
查询优化器:
**在执行以上所有步骤之后我们会获得一个相对完整高效的执行计划。**然后交给我们的存储引擎与底层文件交互。
主要负责与底层文件层进行交互从而==完成数据在物理层面的真正存储和读取==。
一张表使用的存储引擎决定了表中数据的存储结构不同,它是针对表而不是针对库的,一个库中不同表可以用不同的存储引擎。
插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取分离。
# 查询当前数据库的存储引擎
show variables like '%storage_engine%';
存储引擎大致可以分为以下几种:
适合作为中间表,进行数据交换。
码云仓库同步笔记,可自取欢迎各位star指正:https://gitee.com/noblegasesgoo/notes
如果出错希望评论区大佬互相讨论指正,维护社区健康大家一起出一份力,不能有容忍错误知识。
—————————————————————— 爱你们的 noblegasesgoo