一、 导入hellodb.sql生成数据库 [root@centos8 ~]# yum install lrzsz -y rz -E hellodb_innodb.sql

[root@centos8-153 ~]# yum install mariadb-server -y

[root@centos8 ~]# mysql < hellodb_innodb.sql

(1) 在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄 MariaDB [hellodb]> select Name,Age from students where Age> 25 and Gender='M'; +--------------+-----+ | Name | Age | +--------------+-----+ | Xie Yanke | 53 | | Ding Dian | 32 | | Yu Yutong | 26 | | Shi Qing | 46 | | Tian Boguang | 33 | | Xu Xian | 27 | | Sun Dasheng | 100 | +--------------+-----+ 7 rows in set (0.000 sec)

(2) 以ClassID为分组依据,显示每组的平均年龄 MariaDB [hellodb]> select ClassID,avg(Age) from students group by ClassID; +---------+----------+ | ClassID | avg(Age) | +---------+----------+ | NULL | 63.5000 | | 1 | 20.5000 | | 2 | 36.0000 | | 3 | 20.2500 | | 4 | 24.7500 | | 5 | 46.0000 | | 6 | 20.7500 | | 7 | 19.6667 | +---------+----------+ 8 rows in set (0.001 sec)

(3) 显示第2题中平均年龄大于30的分组及平均年龄 MariaDB [hellodb]> select ClassID,avg(Age) from students group by ClassID having avg(Age)>30; +---------+----------+ | ClassID | avg(Age) | +---------+----------+ | NULL | 63.5000 | | 2 | 36.0000 | | 5 | 46.0000 |

(4) 显示以L开头的名字的同学的信息

MariaDB [hellodb]> select * from students where Name like 'L%'; +-------+-------------+-----+--------+---------+-----------+ | StuID | Name | Age | Gender | ClassID | TeacherID | +-------+-------------+-----+--------+---------+-----------+ | 8 | Lin Daiyu | 17 | F | 7 | NULL | | 14 | Lu Wushuang | 17 | F | 3 | NULL | | 17 | Lin Chong | 25 | M | 4 | NULL | +-------+-------------+-----+--------+---------+-----------+ 3 rows in set (0.000 sec)

2、数据库授权magedu用户,允许192.168.1.0/24网段可以连接mysql MariaDB [(none)]> grant all on mysql.* to magedu@'92.168.1.%' identified by 'magedu'; Query OK, 0 rows affected (0.002 sec)

二、总结mysql常见的存储引擎以及特点。 1、MyISAM

使用这个存储引擎,每个MyISAM在磁盘上存储成三个文件。

(1)frm文件:存储表的定义数据

(2)MYD文件:存放表具体记录的数据

(3)MYI文件:存储索引

frm和MYI可以存放在不同的目录下。MYI文件用来存储索引,但仅保存记录所在页的指针,索引的结构是B+树结构。 支持数据的类型也有三种:

(1)静态固定长度表

这种方式的优点在于存储速度非常快,容易发生缓存,而且表发生损坏后也容易修复。缺点是占空间。这也是默认的存储格式。

(2)动态可变长表

优点是节省空间,但是一旦出错恢复起来比较麻烦。

(3)压缩表

上面说到支持数据压缩,说明肯定也支持这个格式。在数据文件发生错误时候,可以使用check table工具来检查,而且还可以使用repair table工具来恢复。

有一个重要的特点那就是不支持事务,但是这也意味着他的存储速度更快,如果你的读写操作允许有错误数据的话,只是追求速度,可以选择这个存储引擎。

2、InnoDB InnoDB是默认的数据库存储引擎,他的主要特点有:

(1)可以通过自动增长列,方法是auto_increment。

(2)支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。

(3)使用的锁粒度为行级锁,可以支持更高的并发;

(4)支持外键约束;外键约束其实降低了表的查询速度,但是增加了表之间的耦合度。

(5)配合一些热备工具可以支持在线热备份;

(6)在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度;

(7)对于InnoDB类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。数据和索引放在一块,都位于B+数的叶子节点上;

当然InnoDB的存储表和索引也有下面两种形式:

(1)使用共享表空间存储:所有的表和索引存放在同一个表空间中。

(2)使用多表空间存储:表结构放在frm文件,数据和索引放在IBD文件中。分区表的话,每个分区对应单独的IBD文件,分区表的定义可以查看我的其他文章。使用分区表的好处在于提升查询效率。

对于InnoDB来说,最大的特点在于支持事务。但是这是以损失效率来换取的。 三、总结MySQL查询缓存优化总结。 查询缓存相关的服务器变量 MariaDB [(none)]> show variables like 'query_cache_%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_cache_limit | 1048576 | 1M,如果返回结果超过它,就不能缓存了 | query_cache_min_res_unit | 4096 | | query_cache_size | 1048576 | 有大小1M | query_cache_strip_comments | OFF | | query_cache_type | OFF | 默认是关闭的 | query_cache_wlock_invalidate | OFF | +------------------------------+---------+ 6 rows in set (0.001 sec) 更改配置文件的方法: vim /etc/my.cnf.d/mariadb-server.cnf

[mysqld] #skip-grant-tables query_cache_type=on query_cache_size=100M 重新启动后查看结果: MariaDB [(none)]> show variables like 'query_cache_%';

图1 1.png 怎么判断生效了

MariaDB [(none)]> show global status like 'Qcache%'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | Qcache_free_blocks | 1 | 处于空闲的块 | Qcache_free_memory | 104839760 | 空闲 | Qcache_hits | 0 | 命中次数 | Qcache_inserts | 0 | 向 Query Cache 中插入新的 Query Cache 的次数,即没有命中的次数 | Qcache_lowmem_prunes | 0 | 记录因为内存不足而被移除出查询缓存的查询数 | Qcache_not_cached | 2 | 没有被 Cache 的 SQL 数,包括无法被 Cache 的 SQL 以及由于 | Qcache_queries_in_cache | 0 | 在 Query Cache 中的 SQL 数量 | Qcache_total_blocks | 1 | 总块 +-------------------------+-----------+ 8 rows in set (0.001 sec)

四、MySQL日志各类总结。 MySQL 支持丰富的日志类型,如下: 事务日志:transaction log 事务日志的写入类型为“追加”,因此其操作为“顺序IO”;通常也被称为:预写式日志 write ahead logging 事务日志文件: ib_logfile0, ib_logfile1 错误日志 error log 通用日志 general log 慢查询日志 slow query log 二进制日志 binary log 中继日志 reley log,在主从复制架构中,从服务器用于保存从主服务器的二进制日志中读取的事 件

事务日志 事务日志:transaction log 事务型存储引擎自行管理和使用,建议和数据文件分开存放,redo log和undo log Innodb事务日志相关配置: show variables like '%innodb_log%'; innodb_log_file_size  50331648 每个日志文件大小 innodb_log_files_in_group  2   日志组成员个数 innodb_log_group_home_dir ./ 事务文件路径 innodb_flush_log_at_trx_commit 默认为1

错误日志 mysqld启动和关闭过程中输出的事件信息 mysqld运行中产生的错误信息 event scheduler运行一个event时产生的日志信息 在主从复制架构中的从服务器上启动从服务器线程时产生的信息 错误文件路径 MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE 'log_error';

慢查询日志 慢查询日志:记录执行查询时长超出指定时长的操作

二进制日志(备份) 记录导致数据改变或潜在导致数据改变的SQL语句 记录已提交的日志 不依赖于存储引擎类型 功能:通过“重放”日志文件中的事件来生成数据副本 注意:建议二进制日志和数据文件分开存放