免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21391 | 回复: 4
打印 上一主题 下一主题

innodb_autoextend_increment':问题解决方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-14 19:59 |只看该作者 |倒序浏览
问题
0514 10:24:50  mysqld started
100514 10:24:50 [Warning] option 'innodb_autoextend_increment':
unsigned value 26214400 adjusted to 1000
InnoDB: Error: auto-extending *data file /data/mysql/ibdata1 is of a
different size *
InnoDB: 109696 pages (rounded down to MB) than specified in the .cnf
file:
InnoDB: initial 196608 pages, max 0 (relevant if non-zero) 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!
100514 10:24:50 [ERROR] Default storage engine (InnoDB) is not available
100514 10:24:50 [ERROR] Aborting


*these are part of my-secc-small.cnf's content:*
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
.......
innodb_data_home_dir=/data/mysql/
innodb_data_file_path=*ibdata1:3072M:autoextend *
default-table-type=INNODB



解决方法 【搞得一下午不安宁】
. mysqldump - save all databases
2. stop mysql
3. remove ibdata , iblog
4. start mysql
5. reimport from backup



mysql配置文件_my.cnf_中文详解

    管理提醒: 本帖被 tiger 设置为精华(2010-04-15)

MYSQL--my.cnf配置中文详解 ZZ2007年08月16日 星期四 15:53mysqld程序--目录和文件
引用
basedir = path   使用给定目录作为根目录(安装目录)。
character-sets-dir = path   给出存放着字符集的目录。
datadir = path   从给定目录读取数据库文件。
pid-file = filename   为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程。
socket = filename   为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置一般是/var/lib/mysql/mysql.sock文件)。在Windows环境下,如果MySQL客户与服务器是通过命名管道进行通信的,--sock选项给出的将是该命名管道的名字(默认设置是MySQL)。
lower_case_table_name = 1/0   新目录和数据表的名字是否只允许使用小写字母; 这个选项在Windows环境下的默认设置是1(只允许使用小写字母)。

mysqld程序--语言设置
引用
character-sets-server = name   新数据库或数据表的默认字符集。为了与MySQL的早期版本保持兼容,这个字符集也可以用--default-character-set选项给出; 但这个选项已经显得有点过时了。
collation-server = name   新数据库或数据表的默认排序方式。
lanuage = name   用指定的语言显示出错信息。

mysqld程序--通信、网络、信息安全
引用
enable-named-pipes   允许Windows 2000/XP环境下的客户和服务器使用命名管道(named pipe)进行通信。这个命名管道的默认名字是MySQL,但可以用--socket选项来改变。
local-infile [=0]   允许/禁止使用LOAD DATA LOCAL语句来处理本地文件。
myisam-recover [=opt1, opt2, ...]   在启动时自动修复所有受损的MyISAM数据表。这个选项的可取值有4种EFAULT、BACKUP、QUICK和FORCE; 它们与myisamchk程序的同名选项作用相同。
old-passwords   使用MySQL 3.23和4.0版本中的老算法来加密mysql数据库里的密码(默认使用MySQL 4.1版本开始引入的新加密算法)。
port = n   为MySQL程序指定一个TCP/IP通信端口(通常是3306端口)。
safe-user-create   只有在mysql.user数据库表上拥有INSERT权限的用户才能使用GRANT命令; 这是一种双保险机制(此用户还必须具备GRANT权限才能执行GRANT命令)。
shared-memory   允许使用内存(shared memory)进行通信(仅适用于Windows)。
shared-memory-base-name = name   给共享内存块起一个名字(默认的名字是MySQL)。
skip-grant-tables   不使用mysql数据库里的信息来进行访问控制(警告:这将允许用户任何用户去修改任何数据库)。
skip-host-cache   不使用高速缓存区来存放主机名和IP地址的对应关系。
skip-name-resovle   不把IP地址解析为主机名; 与访问控制(mysql.user数据表)有关的检查全部通过IP地址行进。
skip-networking   只允许通过一个套接字文件(Unix/Linux系统)或通过命名管道(Windows系统)进行本地连接,不允许ICP/IP连接; 这提高了安全性,但阻断了来自网络的外部连接和所有的Java客户程序(Java客户即使在本地连接里也使用TCP/IP)。
user = name   mysqld程序在启动后将在给定UNIX/Linux账户下执行; mysqld必须从root账户启动才能在启动后切换到另一个账户下执行; mysqld_safe脚本将默认使用--user=mysql选项来启动mysqld程序。

mysqld程序--内存管理、优化、查询缓存区
引用
bulk_insert_buffer_size = n   为一次插入多条新记录的INSERT命令分配的缓存区长度(默认设置是8M)。
key_buffer_size = n   用来存放索引区块的RMA值(默认设置是8M)。
join_buffer_size = n   在参加JOIN操作的数据列没有索引时为JOIN操作分配的缓存区长度(默认设置是128K)。
max_heap_table_size = n   HEAP数据表的最大长度(默认设置是16M); 超过这个长度的HEAP数据表将被存入一个临时文件而不是驻留在内存里。
max_connecti***** = n   MySQL服务器同时处理的数据库连接的最大数量(默认设置是100)。
query_cache_limit = n   允许临时存放在查询缓存区里的查询结果的最大长度(默认设置是1M)。
query_cache_size = n   查询缓存区的最大长度(默认设置是0,不开辟查询缓存区)。
query_cache_type = 0/1/2   查询缓存区的工作模式:0, 禁用查询缓存区; 1,启用查询缓存区(默认设置); 2,"按需分配"模式,只响应SELECT SQL_CACHE命令。
read_buffer_size = n   为从数据表顺序读取数据的读操作保留的缓存区的长度(默认设置是128KB); 这个选项的设置值在必要时可以用SQL命令SET SESSION read_buffer_size = n命令加以改变。
read_rnd_buffer_size = n   类似于read_buffer_size选项,但针对的是按某种特定顺序(比如使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K)。
sore_buffer = n   为排序操作分配的缓存区的长度(默认设置是2M); 如果这个缓存区太小,则必须创建一个临时文件来进行排序。
table_cache = n   同时打开的数据表的数量(默认设置是64)。
tmp_table_size = n   临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。

mysqld程序--日志
引用
log [= file]   把所有的连接以及所有的SQL命令记入日志(通用查询日志); 如果没有给出file参数,MySQL将在数据库目录里创建一个hostname.log文件作为这种日志文件(hostname是服务器的主机名)。
log-slow-queries [= file]   把执行用时超过long_query_time变量值的查询命令记入日志(慢查询日志); 如果没有给出file参数,MySQL将在数据库目录里创建一个hostname-slow.log文件作为这种日志文件(hostname是服务器主机名)。
long_query_time = n   慢查询的执行用时上限(默认设置是10s)。
long_queries_not_using_indexs   把慢查询以及执行时没有使用索引的查询命令全都记入日志(其余同--log-slow-queries选项)。
log-bin [= filename]   把对数据进行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二进制格式记入日志(二进制变更日志,binary update log)。这种日志的文件名是filename.n或默认的hostname.n,其中n是一个6位数字的整数(日志文件按顺序编号)。
log-bin-index = filename   二进制日志功能的索引文件名。在默认情况下,这个索引文件与二进制日志文件的名字相同,但后缀名是.index而不是.nnnnnn。
max_binlog_size = n   二进制日志文件的最大长度(默认设置是1GB)。在前一个二进制日志文件里的信息量超过这个最大长度之前,MySQL服务器会自动提供一个新的二进制日志文件接续上。
binlog-do-db = dbname   只把给定数据库里的变化情况记入二进制日志文件,其他数据库里的变化情况不记载。如果需要记载多个数据库里的变化情况,就必须在配置文件使用多个本选项来设置,每个数据库一行。
binlog-ignore-db = dbname   不把给定数据库里的变化情况记入二进制日志文件。
sync_binlog = n   每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0,意思是由操作系统来负责二进制日志文件的同步工作。
log-update [= file]   记载出错情况的日志文件名(出错日志)。这种日志功能无法禁用。如果没有给出file参数,MySQL会使用hostname.err作为种日志文件的名字。

mysqld程序--镜像(主控镜像服务器)
引用
server-id = n   给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。
log-bin = name   启用二进制日志功能。这种日志的文件名是filename.n或默认的hostname.n,其中的n是一个6位数字的整数(日志文件顺序编号)。
binlog-do/ignore-db = dbname   只把给定数据库里的变化情况记入二进制日志文件/不把给定的数据库里的变化记入二进制日志文件。

mysqld程序--镜像(从属镜像服务器)
引用
server-id = n   给服务器分配一个唯一的ID编号
log-slave-updates   启用从属服务器上的日志功能,使这台计算机可以用来构成一个镜像链(A->B->C)。
master-host = hostname   主控服务器的主机名或IP地址。如果从属服务器上存在mater.info文件(镜像关系定义文件),它将忽略此选项。
master-user = replicusername   从属服务器用来连接主控服务器的用户名。如果从属服务器上存在mater.info文件,它将忽略此选项。
master-password = passwd   从属服务器用来连接主控服务器的密码。如果从属服务器上存在mater.info文件,它将忽略此选项。
master-port = n   从属服务器用来连接主控服务器的TCP/IP端口(默认设置是3306端口)。
master-connect-retry = n   如果与主控服务器的连接没有成功,则等待n秒(s)后再进行管理方式(默认设置是60s)。如果从属服务器存在mater.info文件,它将忽略此选项。
master-ssl-xxx = xxx   对主、从服务器之间的SSL通信进行配置。
read-only = 0/1   0: 允许从属服务器独立地执行SQL命令(默认设置); 1: 从属服务器只能执行来自主控服务器的SQL命令。
read-log-purge = 0/1   1: 把处理完的SQL命令立刻从中继日志文件里删除(默认设置); 0: 不把处理完的SQL命令立刻从中继日志文件里删除。
replicate-do-table = dbname.tablename   与--replicate-do-table选项的含义和用法相同,但数据库和数据库表名字里允许出现通配符"%" (例如: test%.%--对名字以"test"开头的所有数据库里的所以数据库表进行镜像处理)。
replicate-do-db = name   只对这个数据库进行镜像处理。
replicate-ignore-table = dbname.tablename   不对这个数据表进行镜像处理。
replicate-wild-ignore-table = dbn.tablen   不对这些数据表进行镜像处理。
replicate-ignore-db = dbname   不对这个数据库进行镜像处理。
replicate-rewrite-db = db1name > db2name   把主控数据库上的db1name数据库镜像处理为从属服务器上的db2name数据库。
report-host = hostname   从属服务器的主机名; 这项信息只与SHOW SLAVE HOSTS命令有关--主控服务器可以用这条命令生成一份从属服务器的名单。
slave-compressed-protocol = 1   主、从服务器使用压缩格式进行通信--如果它们都支持这么做的话。
slave-skip-errors = n1, n2, ...或all   即使发生出错代码为n1、n2等的错误,镜像处理工作也继续进行(即不管发生什么错误,镜像处理工作也继续进行)。如果配置得当,从属服务器不应该在执行 SQL命令时发生错误(在主控服务器上执行出错的SQL命令不会被发送到从属服务器上做镜像处理); 如果不使用slave-skip-errors选项,从属服务器上的镜像工作就可能因为发生错误而中断,中断后需要有人工参与才能继续进行。

mysqld--InnoDB--基本设置、表空间文件
引用
skip-innodb   不加载InnoDB数据表驱动程序--如果用不着InnoDB数据表,可以用这个选项节省一些内存。
innodb-file-per-table   为每一个新数据表创建一个表空间文件而不是把数据表都集中保存在中央表空间里(后者是默认设置)。该选项始见于MySQL 4.1。
innodb-open-file = n   InnoDB数据表驱动程序最多可以同时打开的文件数(默认设置是300)。如果使用了
innodb-file-per-table选项并且需要同时打开很多数据表的话,这个数字很可能需要加大。
innodb_data_home_dir = p   InnoDB主目录,所有与InnoDB数据表有关的目录或文件路径都相对于这个路径。在默认的情况下,这个主目录就是MySQL的数据目录。
innodb_data_file_path = ts   用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。例如,ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空间文件ibdata1的最大长度是1GB,ibdata2的最大长度也是1G,但允许它扩充到2GB。除文件名外,还可以用硬盘分区的设置名来定义表空间,此时必须给表空间的最大初始长度值加上newraw关键字做后缀,给表空间的最大扩充长度值加上raw关键字做后缀(例如/dev/hdb1: 20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默认设置是ibdata1:10M:autoextend。
innodb_autoextend_increment = n   带有autoextend属性的表空间文件每次加大多少兆字节(默认设置是8MB

论坛徽章:
0
2 [报告]
发表于 2010-05-14 19:59 |只看该作者
mysql:innodb引擎部分参数性能调整

InnoDB做为MySQL目前最广泛的事务存储引擎,很多地方的设计和Oracle都是共通的。
下面是windows上一个MySQL默认的参数查询结果:
mysql> show variables like 'Innodb%';
+---------------------------------+------------------------+
| Variable_name                   | Value                  |
+---------------------------------+------------------------+
| innodb_additional_mem_pool_size | 2097152                |
| innodb_autoextend_increment     | 8                      |
| innodb_buffer_pool_awe_mem_mb   | 0                      |
| innodb_buffer_pool_size         | 8388608                |
| innodb_checksums                | ON                     |
| innodb_commit_concurrency       | 0                      |
| innodb_concurrency_tickets      | 500                    |
| innodb_data_file_path           | ibdata1:10M:autoextend |
| innodb_data_home_dir            |                        |
| innodb_doublewrite              | ON                     |
| innodb_fast_shutdown            | 1                      |
| innodb_file_io_threads          | 4                      |
| innodb_file_per_table           | OFF                    |
| innodb_flush_log_at_trx_commit  | 1                      |
| innodb_flush_method             |                        |
| innodb_force_recovery           | 0                      |
| innodb_lock_wait_timeout        | 50                     |
| innodb_locks_unsafe_for_binlog  | OFF                    |
| innodb_log_arch_dir             |                        |
| innodb_log_archive              | OFF                    |
| innodb_log_buffer_size          | 1048576                |
| innodb_log_file_size            | 10485760               |
| innodb_log_files_in_group       | 2                      |
| innodb_log_group_home_dir       | .\                     |
| innodb_max_dirty_pages_pct      | 90                     |
| innodb_max_purge_lag            | 0                      |
| innodb_mirrored_log_groups      | 1                      |
| innodb_open_files               | 300                    |
| innodb_rollback_on_timeout      | OFF                    |
| innodb_support_xa               | ON                     |
| innodb_sync_spin_loops          | 20                     |
| innodb_table_locks              | ON                     |
| innodb_thread_concurrency       | 8                      |
| innodb_thread_sleep_delay       | 10000                  |
+---------------------------------+------------------------+

innodb_additional_mem_pool_size
用于缓存InnoDB数据字典及其他内部结构的内存池大小,类似于Oracle的library cache。这不是一个强制参数,可以被突破。

innodb_buffer_pool_size
内存缓冲池大小,用于缓存表和索引数据等。类似于Oracle的buffer cache,如果可能,尽可能的设置大一点。

innodb_log_buffer_size
日志缓冲区大小,类似于Oracle的log buffer

innodb_log_file_size
日志文件大小。默认会创建2个5M大小的名为ib_logfile0和ib_logfile1的文件。日志文件的数目由参数innodb_log_files_in_group指定。存放位置由innodb_log_group_home_dir指定。

innodb_data_file_path
指定InnoDB表空间数据文件名,大小以及其他属性。所有文件的加起来不能少于10M。多个数据文件之间以逗号分割,属性之间以冒号分割。默认创建一个大小10MB名为ibdata1的可自动扩展的数据文件,一般在生产环境中都需要根据实际情况指定,由于往表空间中添加数据文件需要停机,尽量在规划的时候做好准备,如果可以的话最好开启最后一个数据文件的自动增长属性。数据文件的个数在规划的时候还需要考虑另外一个innodb_open_files参数。

innodb_file_per_table
取值为ON或者OFF。是否为每个table使用单独的数据文件保存。如果系统中表的个数不多,并且没有超大表,使用该参数可以使得各个表之间的维护相对独立,有一定的好处。

innodb_autoextend_increment
当自动扩展表空间被填满之时,每次扩展空间的大小,默认值是8(单位MB)。该参数可以动态修改:
mysql> set global innodb_autoextend_increment=10;
Query OK, 0 rows affected (0.01 sec)

innodb_status_file
定期将show inndb status的结果输出保存到文件中,建议开启以便分析性能。

2007 12:53] mike mike

Description:
The variable "innodb_autoextend_increment" does not seem to report the proper value. The
top value it will display is 1000; I assume that is bytes.

From the manual:
"The increment is 8MB at a time by default. It can be modified by changing the
innodb_autoextend_increment system variable."

I have it set in my my.cnf for 128M (assuming it will grow on demand by 128 meg chunks) -
however, I noticed that my database wasn't growing that large, it was always idling around
4,096KB free.

How to repeat:
Here is my configuration:

+---------------------------------+-------------------------+
| Variable_name                   | Value                   |
+---------------------------------+-------------------------+
| have_innodb                     | YES                     |
| innodb_additional_mem_pool_size | 33554432                |
| innodb_autoextend_increment     | 1000                    |
| innodb_buffer_pool_awe_mem_mb   | 0                       |
| innodb_buffer_pool_size         | 536870912               |
| innodb_checksums                | ON                      |
| innodb_commit_concurrency       | 0                       |
| innodb_concurrency_tickets      | 500                     |
| innodb_data_file_path           | ibdata:1024M:autoextend |
| innodb_data_home_dir            | /var/lib/mysql/         |
| innodb_doublewrite              | ON                      |
| innodb_fast_shutdown            | 1                       |
| innodb_file_io_threads          | 4                       |
| innodb_file_per_table           | ON                      |
| innodb_flush_log_at_trx_commit  | 0                       |
| innodb_flush_method             |                         |
| innodb_force_recovery           | 0                       |
| innodb_lock_wait_timeout        | 50                      |
| innodb_locks_unsafe_for_binlog  | OFF                     |
| innodb_log_arch_dir             |                         |
| innodb_log_archive              | OFF                     |
| innodb_log_buffer_size          | 8388608                 |
| innodb_log_file_size            | 5242880                 |
| innodb_log_files_in_group       | 2                       |
| innodb_log_group_home_dir       | ./                      |
| innodb_max_dirty_pages_pct      | 90                      |
| innodb_max_purge_lag            | 0                       |
| innodb_mirrored_log_groups      | 1                       |
| innodb_open_files               | 300                     |
| innodb_support_xa               | ON                      |
| innodb_sync_spin_loops          | 20                      |
| innodb_table_locks              | ON                      |
| innodb_thread_concurrency       | 2                       |
| innodb_thread_sleep_delay       | 10000                   |
+---------------------------------+-------------------------+

Easy to repeat:

mysql> show variables like 'innodb_autoextend_increment';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 1000  |
+-----------------------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL innodb_autoextend_increment = 15;      
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'innodb_autoextend_increment';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 15    |
+-----------------------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL innodb_autoextend_increment = 999999;  
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'innodb_autoextend_increment';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 1000  |
+-----------------------------+-------+
1 row in set (0.00 sec)

mysql>

obviously if this has no effect in the CLI it has no effect from my.cnf.

Suggested fix:
People suggest using innodb_autoextend_increment=50M in multiple places around the net.
I've done that, but obviously can't confirm that it is working (at least from the
variable itself)

From what I can tell it does not work properly either (phpMyAdmin for example reports out
how many KB free the InnoDB engine/file has) - I definately think there is an issue with
the variable not reporting the right status; or perhaps the variable isn't working
itself. Unless there is some sort of conflicting mechanism when innodb_file_per_table is
used, then there should be something in the docs about it.

[8 Jan 2007 14:30] Heikki Tuuri

The manual says:

"
innodb_autoextend_increment
The increment size (in MB) for extending the size of an auto-extending tablespace when it
becomes full. The default value is 8.
"

Thus, 1000 corresponds to 1000 MB. The default is 8 MB.

[21 Jan 2007 6:32] mike mike

okay, so is 1000MB an invalid number? does it not accept "M" as a quantifier? as in 50M is
not 50, but will ignore that value?

if so, a LOT of people's examples around the net are incorrect. it should for sanity's
sake match the syntax for any other variable.

论坛徽章:
0
3 [报告]
发表于 2010-05-17 12:11 |只看该作者
innodb_log_buffer_size这个可以稍微设置大一点

论坛徽章:
0
4 [报告]
发表于 2011-03-04 11:50 |只看该作者
路过

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
5 [报告]
发表于 2014-04-08 19:17 |只看该作者
路过
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP