如何创建innodb数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建innodb数据库相关的知识,希望对你有一定的参考价值。
1. 建立InnoDB数据库:运行环境:RHEL4U5 + mysql5.0
默认情况下mysql自动安装InnoDB数据引擎,InnoDB的数据库文件和日志文件在默认的数据库数据库目录(/var/lib/mysql 或者/usr/local/mysql/var),现在由于我们要重新建立InnoDB数据库,所以将原来的InnoDB数据库备份好后,删除即可,建立InnoDB数据库的操作步骤:
默认的数据库数据目录:/var/lib/mysql
1) shell> service mysqld stop # 停止mysql进程
2) shell> mv /var/lib/mysql/ib* /var/lib/mysql/InnoDB-old # 备份好原来的InnoDB的数据库文件
3) shell> mkdir /var/lib/mysql/InnoDB #建立存放新InnoDB数据库文件的目录,默认不自动创建目录
4) shell> vi /etc/my.cnf #编辑InnoDB数据库的相关的配置选项
[mysqld]
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql/InnoDB/ #innodb数据库数据文件目录
innodb_data_file_path = ibdata2:100M:autoextend:max:2000M #数据文件名称及大小
innodb_log_group_home_dir = /var/lib/mysql/InnoDB/
innodb_log_arch_dir = /var/lib/mysql/InnoDB/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M #缓冲池的大小,一般设置为主存的50%-80%
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M #日志文件的大小,一般设置为主存的25%
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1 #事务
innodb_lock_wait_timeout = 50
5) shell> chown mysql:mysql /var/lib/mysql/InnoDB/ #设置InnoDB数据库目录的权限,否则无法启动mysql
6) shell> service mysqld start # 启动mysqld进程
这时在/var/lib/mysql/InnoDB 目录中应该可以看到新生成的InnoDB文件,那么InnoDB数据库就生成了。
2. 使用InnoDB数据库:
1)在配置文件中的[mysqld]字段添加 default-storage-engine=INNODB ,将默认的数据库引擎修改为InnoDB
2 在创建表的时候,手动指定表的类型:
CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB
注意:修改mysql配置文件需要重启启动mysqld进程 参考技术A ALTER TABLE `tablename` ENGINE = MYISAM
InnoDB存储引擎4(表)
本章将从InnoDB存储引擎表的逻辑存储及实验开始进行介绍,然后将重点分析表的物理存储特征,即数据在表中是如何组织和存放的。简单的来说,表就是关于特定实体的数据集合,这也是关系型数据库的核心。
4.1索引组织表
在创建表时没有显式地定义主键,会按照如下进行创建主键:
1.首先判断表中是否有非空的索引的唯一索引。如果有,则该列为主键
2.如果不符合以上条件就会,自动创建一个6字节大小的指针
3.如果存在多个非空唯一索引(UNIQUE KEY(X)),就会根据定义的第一个索引为主键
4.2InnoDB逻辑存储结构
所有带数据都被逻辑的存放在一个空间里,称为表空间,表空间:表空间--->段--->区--->块--->行
表空间可以看做是InnoDB中最高层,所有的数据都存放在表空间中。默认情况下InnoDB有一个共享表空间ibdatal,所有数据都存放在这个表空间里面,如果开启了参数innode_file_per_table这个参数就会将数据存放在单独的一个空间里面。
表空间是由各个段组成的,常见的段有数据段(索引),索引段,回滚段等,InnoDB存储引擎是由索引组织的,因此数据就是索引,对段的管理都是由InnoDB自己完成的
区是由连续页组成的空间,在任何情况下每一个区的大小都为1MB,为了保证区中页的连续性,InnoDB存储引擎一次从磁盘中申请4~5个区,一个区中默认有64个16KB的连续页。每个页的大小可以进行压缩,但是总数为1MB是不变的。
如果是开启了innode_file_per_table参数就会先使用碎片页。
页是InnoDB中最小的单位,常见的页有以下:
行:数据是按照行进行存放的,默认最多放到7992条记录,InnoDB提供了两种记录行的方法:Compact和Redundant。其中Compact
compace行记录格式的首部是一个非NULL变长字段长度列表,而且是按照列的顺序逆序放置的。若列的长度小于255字节,用1字节表示。如果大于255就用2字节表示(因为VARCHAR的最大长度限制为65535)。
NULL标志位是为了指示是否有NULL值,如果有则为1.
记录头信息:固定占用5字节(40位):
最后的部分就是实际存储每一行中列的数据,NULL不占任何空间。
按照书上的分析一段:
从0000c078开始看
可以看出03 02 01是逆序的 03 02 01代表的是63 62 61
固定长度Char没有沾满的时候会使用0x20来进行填充
0x2c表示下一个记录的偏移量,是使用链表的结构来串联各个行记录的
4.4数据页结构
页类型为B-tree-Node的页存放的就是表中行的实际数据了。
文件头记录了有关页的信息
而页头记录了大部分数据的信息
File Header 字段用于记录 Page 的头信息,其中比较重要的是 FIL_PAGE_PREV 和 FIL_PAGE_NEXT 字段,通过这两个字段,我们可以找到该页的上一页和下一页,实际上所有页通过两个字段可以形成一条双向链表。Page Header 字段用于记录 Page 的状态信息。接下来的 Infimum 和 Supremum 是两个伪行记录,Infimum(下确界)记录比该页中任何主键值都要小的值,Supremum (上确界)记录比该页中任何主键值都要大的值,这个伪记录分别构成了页中记录的边界。
页头里面包含了大部分的页信息。
以上是关于如何创建innodb数据库的主要内容,如果未能解决你的问题,请参考以下文章
Zabbix DB历史表由Innodb转换成Tokudb引擎总结