1、mysql数据库实例在系统上表现就是一个进程,被设计为一个单进程多线程架构。
mysql的my.cnf中datadir,该参数指定了数据库所在路径
mysql> show variables like 'datadir'
-> ;
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.02 sec)
2、mysql由以下几个部分组成:存储引擎基于表,而不是基于数据库。
#连接池组件
#管理服务和工具组件
#sql接口组件
#查询分析器组件
#优化器组件
#缓冲组件
#插件式存储引擎
#物理文件
3、innodb存储引擎支持事务,其设计目标主要面向在线事务处理的应用,其特点是行锁设计、支持外键、并支持类似于oracle的非锁定读,即默认操作不产生锁。
4、连接mysql的方式:
1):tcp/ip方式
root@anLA7856:/home/anla7856# mysql -h127.0.0.1 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
2):命名管道与共享内存。
3):unix域套接字:但是我这里连接失败
mysql> show variables like 'socket'
-> ;
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| socket | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+
1 row in set (0.01 sec)
mysql> exit
Bye
root@anLA7856:/home/anla7856# mysql -u root -S /var/run/mysqld/mysqld.sock
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
5、mysql的后台线程:
1):master thread
2):io thread
3):purge thread
4):page cleaner thread
6、mysql是基于磁盘存储的,并将其中的记录按照页的方式进行管理,因此可视为磁盘数据库系统,这就需要缓冲池来处理与cpu速度的差别,
mysql> show variables like 'innodb_buffer_pool_size'
-> ;
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.01 sec)
除此之外,如何来管理缓冲区呢?innodb是通过LRU算法来进行管理的。
7、数据库ACID:
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
8、dba可以通过蛮查询日志来找出有问题的sql,对其进行优化。或者可以用过mysqldumpslow这个命令来进行查询。
9、当mysql实例启动时,会将自己的进程id写入一个pid文件,该文件由pid_file控制,默认位于数据库目录下,文件名为主机名.pid。
mysql> show variables like 'pid_file';
+---------------+----------------------------+
| Variable_name | Value |
+---------------+----------------------------+
| pid_file | /var/run/mysqld/mysqld.pid |
+---------------+----------------------------+
1 row in set (0.00 sec)
mysql数据的存储是根据表进行的,每个表都会有与之对应的文件,每个表的表结构都会存入一个后缀名为.frm的文件
10、在innodb存储引擎表中,每个表都有主键,如果某一个表没有显示定义主键:这个时候会有一个_rowid的隐藏式主键列,如果是联合主键,就不能用_rowid查看了。
1):有非空唯一索引,那么这一列就是主键
2):如果没有非空唯一索引,那么innodb就会自动创建一个6字节大小的指针
3):如果有多个唯一索引,就会自动选择第一个定义的非空唯一索引
11、在innodb存储引擎中,所有有数据都被逻辑地存放在一个空间里,成为表空间(tablespace),表空间又由端(segment),区(extend),页(page)组成,页有时候又
称为块(block)。
#默认情况下innodb存储引擎会有一个共享表空间ibdata1,所有数据都存在这里,如果用户启用了参数innodb_file_per_table,则没张表数据可以单独放到一个表空间里
面,但是也只是数据、索引和插入缓冲的Bitmap页,而其他类的数据如回滚,系统事务信息等还是在共享表内。
#在innodb中页的默认大小为16kb,而从innodb1.2开始,可以将页的大小设置为4k,8k,16k。
#innodb存储引擎是面向列的,也就是说数据是按行进行存放的,每个页最多存放16kb/2 -200行的记录,即7992行。
#compact行记录格式:设计目标就是高校的存储数据,简单来说,一个页中存放的行数据越多,其性能就越高。
#在compact格式下,不管是char还是varchar类型,只要是null,就不占任何存储空间。
#oracle的varchar2对大存放4000字节,sqlserver的最大存放8000字节,而mysql最大存放65535-3(其他开销)字节。
12、innodb存储引擎支持一下几种常见索引:
#b+数索引
#全文索引
#hash索引
#innodb存储引擎支持的hash索引是自适应的,innodb存储引擎会根据表的使用情况自动为表生成hash索引,不能呢个人为干预是否在一张表中生成hash索引。
#b+树索引并不能找到一个给定键值的具体行,b+树索引能够找到数据行所在的页,然后数据库通过页读入内存,再在内存中进行查找,最后得到查找的数据。
#b+树是为磁盘或者其他直接存取辅助设备设计的一种平衡查找树,所有记录节点都是按键值放在同一层的叶子节点上,所有节点都是按数虚存放的。
#b+树索引在数据库中有一个特点就是高扇出性,因此在数据库中,b+树的高度一般都是在2~4层,因为一般机械磁盘每秒至少可以做100词io,2~4次io就是一次查询
只需要0.02~0.04秒。
#数据库中b+树索引可以分为聚集索引和辅助索引。
#聚集索引:由于实际的数据页只能按照一颗b+树进行排序,因此每张表只能拥有一个聚集索引,多数情况下,查询优化器倾向于采用聚集索引,因为聚集索引
能够在b+树上叶子节点直接找到数据
#辅助索引:叶子节点并不包括行记录的全部数据,一个表可以有多个辅助索引。
mysql的my.cnf中datadir,该参数指定了数据库所在路径
mysql> show variables like 'datadir'
-> ;
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.02 sec)
2、mysql由以下几个部分组成:存储引擎基于表,而不是基于数据库。
#连接池组件
#管理服务和工具组件
#sql接口组件
#查询分析器组件
#优化器组件
#缓冲组件
#插件式存储引擎
#物理文件
3、innodb存储引擎支持事务,其设计目标主要面向在线事务处理的应用,其特点是行锁设计、支持外键、并支持类似于oracle的非锁定读,即默认操作不产生锁。
4、连接mysql的方式:
1):tcp/ip方式
root@anLA7856:/home/anla7856# mysql -h127.0.0.1 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
2):命名管道与共享内存。
3):unix域套接字:但是我这里连接失败
mysql> show variables like 'socket'
-> ;
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| socket | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+
1 row in set (0.01 sec)
mysql> exit
Bye
root@anLA7856:/home/anla7856# mysql -u root -S /var/run/mysqld/mysqld.sock
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
5、mysql的后台线程:
1):master thread
2):io thread
3):purge thread
4):page cleaner thread
6、mysql是基于磁盘存储的,并将其中的记录按照页的方式进行管理,因此可视为磁盘数据库系统,这就需要缓冲池来处理与cpu速度的差别,
mysql> show variables like 'innodb_buffer_pool_size'
-> ;
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.01 sec)
除此之外,如何来管理缓冲区呢?innodb是通过LRU算法来进行管理的。
7、数据库ACID:
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
8、dba可以通过蛮查询日志来找出有问题的sql,对其进行优化。或者可以用过mysqldumpslow这个命令来进行查询。
9、当mysql实例启动时,会将自己的进程id写入一个pid文件,该文件由pid_file控制,默认位于数据库目录下,文件名为主机名.pid。
mysql> show variables like 'pid_file';
+---------------+----------------------------+
| Variable_name | Value |
+---------------+----------------------------+
| pid_file | /var/run/mysqld/mysqld.pid |
+---------------+----------------------------+
1 row in set (0.00 sec)
mysql数据的存储是根据表进行的,每个表都会有与之对应的文件,每个表的表结构都会存入一个后缀名为.frm的文件
10、在innodb存储引擎表中,每个表都有主键,如果某一个表没有显示定义主键:这个时候会有一个_rowid的隐藏式主键列,如果是联合主键,就不能用_rowid查看了。
1):有非空唯一索引,那么这一列就是主键
2):如果没有非空唯一索引,那么innodb就会自动创建一个6字节大小的指针
3):如果有多个唯一索引,就会自动选择第一个定义的非空唯一索引
11、在innodb存储引擎中,所有有数据都被逻辑地存放在一个空间里,成为表空间(tablespace),表空间又由端(segment),区(extend),页(page)组成,页有时候又
称为块(block)。
#默认情况下innodb存储引擎会有一个共享表空间ibdata1,所有数据都存在这里,如果用户启用了参数innodb_file_per_table,则没张表数据可以单独放到一个表空间里
面,但是也只是数据、索引和插入缓冲的Bitmap页,而其他类的数据如回滚,系统事务信息等还是在共享表内。
#在innodb中页的默认大小为16kb,而从innodb1.2开始,可以将页的大小设置为4k,8k,16k。
#innodb存储引擎是面向列的,也就是说数据是按行进行存放的,每个页最多存放16kb/2 -200行的记录,即7992行。
#compact行记录格式:设计目标就是高校的存储数据,简单来说,一个页中存放的行数据越多,其性能就越高。
#在compact格式下,不管是char还是varchar类型,只要是null,就不占任何存储空间。
#oracle的varchar2对大存放4000字节,sqlserver的最大存放8000字节,而mysql最大存放65535-3(其他开销)字节。
12、innodb存储引擎支持一下几种常见索引:
#b+数索引
#全文索引
#hash索引
#innodb存储引擎支持的hash索引是自适应的,innodb存储引擎会根据表的使用情况自动为表生成hash索引,不能呢个人为干预是否在一张表中生成hash索引。
#b+树索引并不能找到一个给定键值的具体行,b+树索引能够找到数据行所在的页,然后数据库通过页读入内存,再在内存中进行查找,最后得到查找的数据。
#b+树是为磁盘或者其他直接存取辅助设备设计的一种平衡查找树,所有记录节点都是按键值放在同一层的叶子节点上,所有节点都是按数虚存放的。
#b+树索引在数据库中有一个特点就是高扇出性,因此在数据库中,b+树的高度一般都是在2~4层,因为一般机械磁盘每秒至少可以做100词io,2~4次io就是一次查询
只需要0.02~0.04秒。
#数据库中b+树索引可以分为聚集索引和辅助索引。
#聚集索引:由于实际的数据页只能按照一颗b+树进行排序,因此每张表只能拥有一个聚集索引,多数情况下,查询优化器倾向于采用聚集索引,因为聚集索引
能够在b+树上叶子节点直接找到数据
#辅助索引:叶子节点并不包括行记录的全部数据,一个表可以有多个辅助索引。
火候不够,看得半懂不懂