给innodb表空间添加数据文件

May 4th, 2008 | Categories: Boring | Tags:

给mysql innodb的表空间添加新数据文件太麻烦了。

需要编辑my.ini文件中innodb_data_file_path条目。且需要调整已有数据文件的大小,比方说现在autoextend 的/ibdata/ibdata1为18.5M,而在旧的my.ini中为10M,则需要修改为innodb_data_file_path = /ibdata/ibdata1:19M; 且必须是19M,如果指定20M,就会报错。

然后添加新文件到innodb_data_file_path ,”/ibdata/ibdata1:19M;/disk2/ibdata2:50M”.这个ibdata2先不能在文件系统存在,重新启动后mysql将会自动创建并识别这个新增加的这个ibdata2。


重新启动mysql,会有纪录增加数据文件的日志。

InnoDB: Error: data file C:\MySQL InnoDB Datafiles\ibdata1 is of a different size
InnoDB: 1152 pages (rounded down to MB)
InnoDB: than specified in the .cnf file 1280 pages!
InnoDB: Could not open or create data files.
InnoDB: If you tried to add new data files, and it failed here,
InnoDB: you should now edit innodb_data_file_path in my.cnf back
InnoDB: to what it was, and remove the new ibdata files InnoDB created
InnoDB: in this failed attempt. InnoDB only wrote those files full of
InnoDB: zeros, but did not yet use them in any way. But be careful: do not
InnoDB: remove old data files which contain your precious data!
080504 13:34:42 [ERROR] Default storage engine (InnoDB) is not available
080504 13:34:42 [ERROR] Aborting

080504 13:34:42 [Note] C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt: Shutdown complete

080504 13:36:25 InnoDB: Data file C:\MySQL InnoDB Datafiles\ibdata2 did not exist: new to be created
080504 13:36:25 InnoDB: Setting file C:\MySQL InnoDB Datafiles\ibdata2 size to 10 MB
InnoDB: Database physically writes the file full: wait…
080504 13:36:25 InnoDB: Data file C:\MySQL InnoDB Datafiles\ibdata3 did not exist: new to be created
080504 13:36:25 InnoDB: Setting file C:\MySQL InnoDB Datafiles\ibdata3 size to 10 MB
InnoDB: Database physically writes the file full: wait…
080504 13:36:27 InnoDB: Started; log sequence number 0 1134722
080504 13:36:27 [Note] C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt: ready for connections.
Version: ‘5.0.27-community-nt-log’ socket: ” port: 3306 MySQL Community Edition (GPL)

但这个重起操作,实在是影响了存储引擎innodb的高可用效果。

添加与移除 InnoDB 数据和日志文件

为了添加一个数据文件到表空间中,首先要关闭 MySQL 数据库,编辑 my.cnf 文件,在 innodb_data_file_path 中添加一个新文件,然后再重新启动服务。

如果,最后一个文件以关键字 autoextend 来描述,那么编辑 my.cnf 的过程如下所示。必须检查最后一个文件的尺寸,并使它向下接近于 1024 * 1024 bytes (= 1 MB) 的倍数,并在 innodb_data_file_path 中明确指定它的尺寸。然后你可以添加另一个数据文件。记住只有 innodb_data_file_path 中的最后一个文件可以被指定为 auto-extending。

一个例子:假设起先仅仅只有一个 auto-extending 数据文件 ibdata1 ,这个文件越越接近于 988 MB。下面是添加了另一个 auto-extending 数据文件后的可能示例 。

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

通常不能移除 InnoDB 的数据文件。为了减小数据文件的大小,你必须使用 mysqldump 来转储(dump)所有的数据表,再重新建立一个新的数据库,并将数据导入新的数据库中。

如果希望改变 InnoDB 的日志文件数目,必须先关闭 MySQL 并确定完全关闭而没有发生任何错误。将旧的日志文件复制到其它安全的地方,以防在关闭服务时发生了错误而需要恢复数据库。删除所有日志文件,编辑 my.cnf,再重新启动 MySQL。InnoDB 在启动时将会提示它在建立新的日志文件。

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
  1. NinGoo
    May 4th, 2008 at 18:40
    Quote | #1

    也开始整MySQL了?

    我都是一口气加上一两百G的文件先,不开autoextend。等不行了再找时间关机加一次:)