最近在对开发的软件的服务器部分制作安装包,但服务器部分需要有mysql数据库的支持。因此,采用免安装版的mysql策略:将mysql数据库需要的文件在安装程序中进行设置和打包即可。但也遇到了很多问题,下面分三节进行总结。
由于我们采用的是mysql中的innodb存储引擎,故在此只对innodb作一些介绍,详细内容可以参见mysql的官网说明http://dev.mysql.com/。
InnoDB概述
InnoDB
给
MySQL
提供了具有提交,回滚和崩溃恢复能力的事务安全(
ACID
兼容)存储引擎。
InnoDB
锁定在行级并且也在
SELECT
语句提供一个
Oracle
风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在
InnoDB
中扩大锁定的需要,因为在
InnoDB
中行级锁定适合非常小的空间。
InnoDB
也支持
FOREIGN KEY
强制。在
SQL
查询中,你可以自由地将
InnoDB
类型的表与其它
MySQL
的表的类型混合起来,甚至在同一个查询中也可以混合。
InnoDB
是为处理巨大数据量时的最大性能设计。它的
CPU
效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
InnoDB
存储引擎被完全与
MySQL
服务器整合,
InnoDB
存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。
InnoDB
存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与
MyISAM
表不同,比如在
MyISAM
表中每个表被存在分离的文件中。
InnoDB
表可以是任何尺寸,即使在文件尺寸被限制为
2GB
的操作系统上。
InnoDB
默认地被包含在
MySQL
二进制分发中。
Windows Essentials installer
使
InnoDB
成为
Windows
上
MySQL
的默认表。
InnoDB
被用来在众多需要高性能的大型数据库站点上产生。著名的
Internet
新闻站点
Slashdot.org
运行在
InnoDB
上。
Mytrix, Inc.
在
InnoDB
上存储超过
1TB
的数据,还有一些其它站点在
InnoDB
上处理平均每秒
800
次插入
/
更新的负荷。
InnoDB配置
InnoDB
存储引擎是默认地被允许的。如果你不想用
InnoDB
表,你可以添加
skip-innodb
选项到
MySQL
选项文件。
被
InnoDB
存储引擎管理的两个重要的基于磁盘的资源是
InnoDB
表空间数据文件和它的日志文件。
如果你指定无
InnoDB
配置选项,
MySQL
将在
MySQL
数据目录下创建一个名为
ibdata1
的
10MB
大小的自动扩展数据文件,以及两个名为
ib_logfile0
和
ib_logfile1
的
5MB
大小的日志文件。
注释:
InnoDB
给
MySQL
提供具有提交,回滚和崩溃恢复能力的事务安全(
ACID
兼容)存储引擎。如果拟运行的操作系统和硬件不能如广告说的那样运行,
InnoDB
就不能实现如上能力。许多操作系统或磁盘子系统可能为改善性能而延迟或记录写操作。在一些操作系统上,就是系统调用(
fsync()
)
也要等着,直到所有未写入已被刷新文件的数据在被刷新到稳定内存之前可以确实返回了。因为这个,操作系统崩溃或掉电可能损坏当前提交的数据,或者在最坏的
情况,因为写操作已被记录了,甚至破坏了数据库。如果数据完整性对你很重要,你应该在用任何程序于生产中之前做一些“
pull-the-plug
”测试。
Mac OS X 10.3
及以后版本,
InnoDB
使用一个特别的
fcntl()
文件刷新方法。在
Linux
下,建议禁止回写缓存。
在
ATAPI
硬盘上,一个类似
hdparm -W0 /dev/hda
命令可能起作用。小心某些驱动器或者磁盘控制器可能不能禁止回写缓存。
注释:要获得好的性能,你应该如下面例子所讨论那样,明确提供
InnoDB
参数。自然地,你应该编辑设置来适合你的硬件和要求。
要建立
InnoDB
表空间文件,在
my.cnf
选项文件里的
[mysqld]
节里使用
innodb_data_file_path
选项。在
Windows
上,你可以替代地使用
my.ini
文件。
innodb_data_file_path
的值应该为一个或多个数据文件规格的列表。如果你命名一个以上的数据文件,用
分号
(
‘
;
’
)
分隔它们:
innodb_data_file_path=datafile_spec1[;datafile_spec2]...
例如:把明确创建的具有相同特征的表空间作为默认设置的设置操作如下:
[mysqld]innodb_data_file_path=ibdata1:10M:autoextend
这个设置配置一个可扩展大小的尺寸为
10MB
的单独文件,名为
ibdata1
。没有给出文件的位置,所以默认的是在
MySQL
的数据目录内。
尺寸大小用
M
或者
G
后缀来指定说明单位是
MB
或者
GB
。
一个表空间,它在数据目录里包含一个名为
ibdata1
的固定尺寸
50MB
的数据文件和一个名为
ibdata2
大小为
50MB
的自动扩展文件,其可以像这样被配置:
[mysqld]innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
一个指定数据文件的完全后缀包括文件名,它的尺寸和数个可选属性:
file_name:file_size[:autoextend[:max:max_file_size]]autoextend
属性和后面跟着的属性只可被用来对
innodb_data_file_path
行里最后一个数据文件。
如果你对最后的数据文件指定
autoextend
选项。如果数据文件耗尽了表空间中的自由空间,
InnoDB
就扩展数据文件。扩展的幅度是每次
8MB
。
如果磁盘已满,你可能想要把其它数据添加到另一个硬盘上。重新配置一个已存在表空间的指令见
15.2.7
节,“添加和删除
InnoDB
数据和日志文件”。
InnoDB
并不感知最大文件尺寸,所以要小心文件系统,在那上面最大的文件尺寸是
2GB
。要为一个自动扩展数据文件指定最大尺寸,请使用
max
属性。下列配置允许
ibdata1
涨到极限的
500MB
:
[mysqld]innodb_data_file_path=ibdata1:10M:autoextend:max:500MInnoDB
默认地在
MySQL
数据目录创建表空间文件。要明确指定一个位置,请使用
innodb_data_home_dir
选项。比如,要使用两个名为
ibdata1
和
ibdata2
的文件,但是要把他们创建到
/ibdata
,像如下一样配置
InnoDB
:
[mysqld]
innodb_data_home_dir=/ibdata
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
innodb_data_home_dir=/ibdata
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
注释:
InnoDB
不创建目录,所以在启动服务器之前请确认
/ibdata
目录的确存在。这对你配置的任何日志文件目录来说也是真实的。使用
Unix
或
DOS
的
mkdir
命令来创建任何必需的目录。
通过把
innodb_data_home_dir
的值原原本本地部署到数据文件名,并在需要的地方添加斜杠或反斜杠,
InnoDB
为每个数据文件形成目录路径。如果
innodb_data_home_dir
选项根本没有在
my.cnf
中提到,默认值是“
dot
”目录
./
,这意思是
MySQL
数据目录。
如果你指定
innodb_data_home_dir
为一个空字符串,你可以为列在
innodb_data_file_path
值里的数据文件指定绝对路径。下面的例子等价于前面那个例子:
[mysqld]
innodb_data_home_dir=
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend
innodb_data_home_dir=
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend
注意,在一些文件系统上,数据文件必需小于
2GB
。数据文件的合并尺寸必须至少
10MB
。
当你第一次创建一个
InnoDB
表空间,最好从命令行来启动
MySQL
服务器。
InnoDB
然后把数据库创建的信息打印到屏幕,所以你可以看见正在发生什么。比如,在
Windows
上,如果
mysqld-max
位于
C:\mysql\bin
,你可以如下来启动它:
C:\> C:\mysql\bin\mysqld-max --console
如果你不发送服务器输出到屏幕上,请检查服务器的错误日志来看在启动过程中
InnoDB
打印了什么。
本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/328955,如需转载请自行联系原作者