Techyou labs - InnoDB
type: channel
link: https://blog.37hi.com/tag/InnoDB/
items: mysql使用裸设备
items: mysql数据据存储引擎InnoDB和MyISAM的优势及区别

mysql使用裸设备
type: item
date: 2010-12-22T21:04:00+08:00
description: 1.名词注释： a.裸设备：是一种没有经过格式化，不被Unix/Linux通过文件系统来读取的特殊类型的块设备文件，允许以直接访问硬盘的方式访问一个存储设备，而不经过操作系统的高速缓存和缓冲器。裸设备可以绑定一个分区，也可以绑定一个磁盘。 应用程序如数据库可以直接使用裸设备，来管理数据的缓存方式，而不将这些任务推给操作系统。 b.字符设备：对字符设备的读写不需要通过系统的buffer。不可被文件系统mount。 c.块设备：对块设备的读写需要通过系统的buffer。可以被mount到文件系统中。 2.linux下创建裸设备 a.创建pv # pvcreate /dev/sda b.创建vg # vgcreate VolGroup00 /dev/sda c.创建lv # lvcreate –L 2G –n lv_mydata VolGroup00 3.linux下绑定裸设备 a.方式一： raw /dev/raw/raw[n] /dev/ n的范围是0-8191。执行完会在/dev/raw/目录下生成一个对应的raw[n]文件。通过raw命令绑定的裸设备在系统重启后会失效。 # raw /dev/raw/raw1 /dev/VolGroup00/lv_mydata /dev/raw/raw1: bound to major 253, minor 2 /dev/raw/raw1是裸设备名称，这个名不能随便改变的，否则会出错。如需要改动使用ln来创建链接。 b.方式二： 修改/etc/sysconfig/rawdevices配置文件，在文件中加入以下内容，每个裸设备一行。 /dev/raw/raw1 /dev/VolGroup00/lv_mydata 或/dev/raw/raw1 253 2 # service rawdevices start Assigning devices: /dev/raw/raw1 –> /dev/VolGroup00/lv_mydata /dev/raw/raw1: bound to major 253, minor 2 done # chkconfig rawdevices on 4.更改权限 # chown mysql.mysql /dev/mapper/VolGroup00-lv_mydata 权限不对会报错： 110325 12:54:13 InnoDB: Operating system error number 13 in a file operation. InnoDB: The error means mysqld does not have the access rights to InnoDB: the directory. InnoDB: File name /dev/mapper/VolGroup00-lv_mydata 5.MySQL使用裸设备 MyISAM存储引擎只能缓存索引，不能缓存数据文件，因此操作系统的IO性能对MyISAM表的存取速率至关重要。InnoDB存储引擎不仅可以缓存索引还可以缓存数据。因此可以使用裸设备来存储InnoDB的共享表空间，这样就不再需要文件系统的开销，从而提高性能。 InnoDB的表空间分为两种：一种是共享表空间，使用ibdata文件来存放数据，所有表和索引数据被存放在同一个表空间，通过 innodb_data_file_path来指定；另一种是独享表空间，每个表的数据和索引被存放在一个单独的.ibd文件中。共享表空间是必须存在的，Innodb的undo信息和其他一些元数据信息是存放在共享表空间里面的。 如果将独享表空间存储在裸设备上，那么每个表是一个裸设备，这样裸设备的数量将会是很大的。共享表空间不会出现这个问题的。下面是把共享表空间存储在裸设备上： a.在mysql配置文件中，增加裸设备文件名并指定newraw属性 [mysqld] innodb_data_home_dir = innodb_data_file_path = /dev/mapper/VolGroup00-lv_mydata:2Gnewraw b.初始化裸设备 重启mysql服务，待其完成分区初始化工作后，再关闭mysql服务。此阶段不能创建更改InnoDB表，否则再重启服务时更改的内容丢失。当用newraw指定任何分区时，InnoDB会阻止用户修改数据。 c.修改newraw属性 [mysqld] innodb_data_home_dir = innodb_data_file_path = /dev/mapper/VolGroup00-lv_mydata:2Graw d.再重启mysql服务 服务正常启动后，就可以正常使用了。 参考： http://ftp.nchu.edu.…

mysql数据据存储引擎InnoDB和MyISAM的优势及区别
type: item
date: 2010-09-12T06:42:00+08:00
description: [...]