蒙面人生蒙面人生

用my-innodb-heavy-4g.cnf 并启用InnoDB报错的解决办法

mysql已经编译支持InnoDB,并运行一段时间,优化服务器时,用my-innodb-heavy-4g.cnf代替my.cnf,并启用InnoDB,结果报错。
141002  3:42:52 [Note] Plugin 'InnoDB' is disabled.
141002  3:42:52 [ERROR] Function 'innodb' already exists
141002  3:42:52 [Warning] Couldn't load plugin named 'innodb' with soname 'ha_innodb.so'.
141002  3:42:52 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
141002  3:42:52 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
141002  3:42:52 [Note] Server socket created on IP: '0.0.0.0'.
141002  3:42:52 [Note] Event Scheduler: Loaded 0 events
141002  3:42:52 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.5.37-log'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution
141002  3:45:36 [Note] /usr/local/mysql/bin/mysqld: Normal shutdown

141002  3:45:36 [Note] Event Scheduler: Purging the queue. 0 events
141002  3:45:38 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 445  user: 'aiqu'

141002  3:45:38 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete

141002 03:45:38 mysqld_safe mysqld from pid file /usr/local/mysql/var/li759-91.pid ended
141002 03:45:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
141002  3:45:40 [ERROR] Function 'innodb' already exists
141002  3:45:40 [Warning] Couldn't load plugin named 'innodb' with soname 'ha_innodb.so'.
141002  3:45:40 InnoDB: The InnoDB memory heap is disabled
141002  3:45:40 InnoDB: Mutexes and rw_locks use GCC atomic builtins
141002  3:45:40 InnoDB: Compressed tables use zlib 1.2.3
141002  3:45:40 InnoDB: Initializing buffer pool, size = 16.0M
141002  3:45:40 InnoDB: Completed initialization of buffer pool
141002  3:45:40 InnoDB: highest supported file format is Barracuda.
141002  3:45:40  InnoDB: Waiting for the background threads to start
141002  3:45:41 InnoDB: 5.5.37 started; log sequence number 32582219
141002  3:45:41 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
141002  3:45:41 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
141002  3:45:41 [Note] Server socket created on IP: '0.0.0.0'.
141002  3:45:41 [Note] Event Scheduler: Loaded 0 events
141002  3:45:41 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.5.37'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution
141002  3:51:34 [Note] /usr/local/mysql/bin/mysqld: Normal shutdown

141002  3:51:34 [Note] Event Scheduler: Purging the queue. 0 events
141002  3:51:36 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1046  user: 'aiqu'

141002  3:51:36  InnoDB: Starting shutdown...
141002  3:51:36  InnoDB: Shutdown completed; log sequence number 32582219
141002  3:51:36 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete

141002 03:51:36 mysqld_safe mysqld from pid file /usr/local/mysql/var/li759-91.pid ended
141002 03:51:38 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
141002  3:51:38 [Warning] Using unique option prefix myisam_recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
141002  3:51:38 [Note] Plugin 'InnoDB' is disabled.
141002  3:51:38 [ERROR] Function 'innodb' already exists
141002  3:51:38 [Warning] Couldn't load plugin named 'innodb' with soname 'ha_innodb.so'.

原因如下,因为刚开始都开启了innod,my.cnf 默认设置的innodb_log_file_size =8M,文件在Mysql第一次启动时候已经创建,大小为设置的8M,
而4G的my.cnf,他这个设置为innodb_log_file_size =256M,这两个大小不同就会出这个问题,ibdata1文件也是设置大小不同
解决办法:
把ib_logfile0 ,ib_logfile1 ,ibdata1 ,都重命名或者删掉,然后启动mysql就好了。
PS:default-storage-engine = InnoDB
并注释掉#loose-skip-innodb 或者你的默认是#skip-innodb

关于InnoDB的启动选项,网上还查到如下信息:
为了得到更好的性能你必须所示的例子明确地设定 InnoDB 启动参数。

从 3.23.50 版和 4.0.2 版开始,InnoDB 允许在 innodb_data_file_path 中设置的最一个数据文件描述为 auto-extending。 innodb_data_file_path 语法如下所示:

pathtodatafile:sizespecification;pathtodatafile:sizespec;...
...;pathtodatafile:sizespec[:autoextend[:max:sizespecification]]
如果用 autoextend 选项描述最后一个数据文件,当 InnoDB 用尽所有表自由空间后将会自动扩充最后一个数据文件,每次增量为 8 MB。示例:
innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:100M:autoextend
指定 InnoDB 只建立一个最初大小为 100 MB 并且当表空间被用尽时以 8MB 每块增加的数据文件。如果硬盘空间不足,可以再添加一个数据文件并将其放在其它的硬盘中。 举例来说:先检查硬盘空间的大小,设定 ibdata1 文件使它接近于硬盘空余空间大小并为 1024 * 1024 bytes (= 1 MB)的倍数, 将 ibdata1 明确地指定在 innodb_data_file_path 中。在此之后可以添加另一个数据文件:
innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend
注意:设定文件大小时一定要注意你的OS是否有最大文件尺寸为2GB的限制!InnoDB是不会注意你的OS文件尺寸限制的, 在一些文件系统中你可能要设定最大容量限制:
innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:100M:autoextend:max:2000M

一个简单的 my.cnf 例子。 假设你的计算机有 128 MB RAM 和一个硬盘。下面的例子是为了使用 InnoDB 而在 my.cnf 或 my.ini 文件中可能所作的一些配置。我们假设你运行的是 MySQL-Max-3.23.50 及以上版本,或 MySQL-4.0.2 及以上版本。

这个示例适合大部分不需要将 InnoDB 数据文件和日志文件放在几个盘上的 Unix 和 Windows 用户。这个例子在 MySQL 的datadir 目录(典型的为 /mysql/data)中创建一个自扩充(auto-extending)的数据文件 ibdata1 和两个 InnoDB 运行日志文件ib_logfile0 和 ib_logfile1 以及 ib_arch_log_0000000000 档案文件。

[mysqld]
#在这里加入其它 的 MySQL 服务器配置
#...
# 数据文件必须
# 能够容下数据与索引
# 确定有足够的
# 磁盘空间
innodb_data_file_path = ibdata1:10M:autoextend
# 设置缓冲池的大小为
# 你的主内存大小的
# 50 - 80 %
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
# 设置日志文件的大小约为
# 缓冲池(buffer pool)
# 大小的 25 %
set-variable = innodb_log_file_size=20M
set-variable = innodb_log_buffer_size=8M
# 如果丢失最近几个事务影响
# 不大的话可以设置
# .._flush_log_at_trx_commit = 0
innodb_flush_log_at_trx_commit=1
InnoDB 不会自己建立目录,必须自己使用操作系统命令建立相应的目录。检查你的 MySQL 服务程序在 datadir 目录里 有足够的权限建立文件。

注意:在某些文件系统中 数据文件大小必须小于2G! 所有运行日志文件的大小总和必须小于 2G 或 4G,这依赖于具体的 MySQL 系统版本。 数据文件的总和必须大于等于 10 MB.

当第一次建立 InnoDB 数据库时,建议最好以命令行方式启动 MySQL 服务。这样 InnoDB 数据库建立时的提示信息将在屏幕上显示,从而可以看到建立过程。 下面第 3 节所示就是 InnoDB 数据库建立时的屏幕显示。例如,在 Windows 下使用下列指令启动 mysqld-max.exe :

your-path-to-mysqld>mysqld-max --console

本原创文章未经允许不得转载 | 当前页面:蒙面人生 » 用my-innodb-heavy-4g.cnf 并启用InnoDB报错的解决办法

评论