您好,我使用bacula和其中一个表是满的:
JobId 8946: Fatal error: sql_create.c:860 Fill File table Query failed: INSERT INTO File (FileIndex, JobId, PathId, FilenameId, LStat, MD5, DeltaSeq) SELECT batch.FileIndex, batch.JobId, Path.PathId, Filename.FilenameId,batch.LStat, batch.MD5, batch.DeltaSeq FROM batch JOIN Path ON (batch.Path = Path.Path) JOIN Filename ON (batch.Name = Filename.Name): ERR=The table 'File' is full
然后我运行:
mysql> show table status from current_bacula like 'File'; +------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+------------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+------------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+ | File | InnoDB | 10 | Compact | 52153488 | 142 | 7419723776 | 0 | 2593128448 | 2605711360 | 569929045 | 2013-04-15 21:03:59 | NULL | NULL | latin1_swedish_ci | NULL | | | +------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+------------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+ 1 row in set (0.31 sec)
my.cnf文件有:
innodb_data_file_path = ibdata1:128M;ibdata2:50M:autoextend:max:12800M
据我了解的命令:
ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
只为MyISAM引擎工作不? (如果我错了,请纠正我)
所以我的问题是:我可以只修改las autotextend:max例如,像这样:
innodb_data_file_path = ibdata1:128M;ibdata2:50M:autoextend:max:76800M
除了重新启动服务之外,是否应该执行其他操作? 安全吗? 我知道我可以定义另一个ibdataN文件,但是我想尽可能less地影响在服务器上运行的其他数据库资源。
你推荐我什么?
我在CentOS 6.4上有mysql-5.1.67-1.el6_3.x86_64
提前致谢!
你可以启动另一个ibdata文件
但是,在你做之前,你需要知道什么占用了ibdata1和ibdata2 。

我曾经处理了过去与我的前雇主的客户之一添加ibdata3(请参阅我的DBA StackExchange文章如何解决“表…已满”与“innodb_file_per_table”? )。 这是必要的,因为ibdata2达到了2,196,875,759,616字节的ext3上限。 你没有这种情况。
你可以和你的想法一起去
innodb_data_file_path = ibdata1:128M;ibdata2:50M:autoextend:max:76800M
但你最好完全删除最大值
innodb_data_file_path = ibdata1:128M;ibdata2:50M:autoextend
你用尽空间的原因必须做撤消日志。 ibdata文件包含1023撤消日志。 那些日志需要摆动的空间来操作。 如果没有这种内部摆动空间,MVCC信息在回滚事件中不能保存数据的快照。 你内部的摆动空间是2605711360或大约2.5G ,这显然是不够的。 与我以前的雇主的客户,他们有106G的摆动室, 这是不够的 。
如果要将所有数据保留在ibdata1和ibdata2 ,并将设置更改为
innodb_data_file_path = ibdata1:128M;ibdata2:50M:autoextend:max:76800M
你需要监视摆动室。
你可以像这样监视它
IBDATA_FILESIZE=8187281408 # # 8187281408 is 7680M + 128M # SQL="SELECT SUM(data_length+index_length)" SQL="${SQL} FROM information_schema.tables WHERE ENGINE='InnoDB'" IBDATA_DATAINDEX=`mysql -uroot -p... -ANe"${SQL}"` (( WIGGLE_ROOM = IBDATA_FILESIZE - IBDATA_DATAINDEX ))) echo ${WIGGLE_ROOM}
每次你运行这个,你都会知道有多less空闲空间。 您不需要知道涉及哪个表,因为任何InnoDB表都有可能在摆动空间(用于撤消信息的空间)不存在时抱怨它已满。