mysql 如何启用InnoDB引擎?

时间:2022-04-08 07:34:20
如题:
mysql> show engines;
+------------+----------+----------------------------------------------------------------+
| Engine     | Support  | Comment                                                        |
+------------+----------+----------------------------------------------------------------+
| MyISAM     | DEFAULT  | Default engine as of MySQL 3.23 with great performance         | 
| MEMORY     | YES      | Hash based, stored in memory, useful for temporary tables      | 
| InnoDB     | DISABLED | Supports transactions, row-level locking, and foreign keys     | 
| BerkeleyDB | YES      | Supports transactions and page-level locking                   | 
| BLACKHOLE  | NO       | /dev/null storage engine (anything you write to it disappears) | 
| EXAMPLE    | NO       | Example storage engine                                         | 
| ARCHIVE    | NO       | Archive storage engine                                         | 
| CSV        | NO       | CSV storage engine                                             | 
| ndbcluster | NO       | Clustered, fault-tolerant, memory-based tables                 | 
| FEDERATED  | NO       | Federated MySQL storage engine                                 | 
| MRG_MYISAM | YES      | Collection of identical MyISAM tables                          | 
| ISAM       | NO       | Obsolete storage engine                                        | 
+------------+----------+----------------------------------------------------------------+

15 个解决方案

#1


1)关闭mysqld服务
2)修改my.ini(linux下是my.cnf)将skip-innodb这行注释掉或删掉
3) 保存后重启mysqld服务

#2


引用 1 楼 nicenight 的回复:
1)关闭mysqld服务
2)修改my.ini(linux下是my.cnf)将skip-innodb这行注释掉或删掉
3) 保存后重启mysqld服务
1

#3


我的环境是linux

在my.cnf没有skip-innodb这个选项啊?

#4


你是如何安装的?

#5


引用 3 楼 shrimpma 的回复:
我的环境是linux

在my.cnf没有skip-innodb这个选项啊?

从你的 show 里看应该是安装了引擎的,只是被禁用了。
你可以用 ps awux 来看看 mysqld/mysqld_safe 的命令行用的是哪一个 my.cnf,如果没有指定会是使用的默认的 /etc/my.cnf,否则可能在启动参数中指定另外的 my.cnf 路径及文件名,或者在命令行参数里就指定了 skip 选项等。所以建议看看命令行的参数先。

#6


引用楼主 shrimpma 的回复:
如题:
mysql> show engines;
+------------+----------+----------------------------------------------------------------+
| Engine | Support | Comment |
+------------+----------+------------------------……


能show 出来,表示 InnoDB 已经被安装好了,只是被禁用了吧!
看看my.cnf里面有没有skip类似的设置!

#7


引用 5 楼 nicenight 的回复:
引用 3 楼 shrimpma 的回复:

我的环境是linux

在my.cnf没有skip-innodb这个选项啊?

从你的 show 里看应该是安装了引擎的,只是被禁用了。
你可以用 ps awux 来看看 mysqld/mysqld_safe 的命令行用的是哪一个 my.cnf,如果没有指定会是使用的默认的 /etc/my.cnf,否则可能在启动参数中指定另外的 my.c……


ps aux| grep mysqld
 
root      1895  0.0  0.1   2584  1304 ?        S    Oct17   0:00 /bin/sh /usr/bin/mysqld_safe --user=mysql --datadir=/log/mysql --nice=-1 --myisam-recover=BACKUP,FORCE
mysql     1939  0.5  5.0 138368 34636 ?        S<l  Oct17  14:45 /usr/sbin/mysqld --basedir=/usr --datadir=/log/mysql --user=mysql --pid-file=/log/mysql/ID-200.pid --skip-locking --port=3306 --socket=/var/run/mysql/mysql.sock --myisam-recover=BACKUP,FORCE
root      7928  0.0  0.0   3604   556 pts/0    SN+  10:06   0:00 grep mysqld

没有配置文件

#8


检查你的 /etc/my.cnf

#9


mysql 能够正常使用,mysql 配置没有问题。
从mysql> show engines;显示的信息可以确认innnodDB已经安装 ,只是被禁用了。

就想问问如何开启?

#10


# Example MySQL config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /srv/mysql) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password = testpassword
port = 3306
socket = /var/run/mysql/mysql.sock

# Here follows entries for some specific programs
default-character-set=gbk

# The MySQL server
[mysqld]
port = 3306
socket = /var/run/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
#tmp_table_size = 1M
#key_buffer_size = 1024

default-character-set=gbk
init-connect='SET NAMES gbk' 
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!

#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
#log-bin=mysql-bin
log-slow-queries
long_query_time = 2

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin

# Point the following paths to different dedicated disks
#tmpdir = /tmp/
#log-update  = /path-to-dedicated-directory/hostname

# Uncomment the following if you are using BDB tables
#bdb_cache_size = 4M
#bdb_max_lock = 10000

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /srv/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /log
#innodb_log_arch_dir = /srv/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 32M
innodb_additional_mem_pool_size = 4M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 8M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

#11


引用 1 楼 nicenight 的回复:
1)关闭mysqld服务
2)修改my.ini(linux下是my.cnf)将skip-innodb这行注释掉或删掉
3) 保存后重启mysqld服务


留个记号!

#12


看看错误日志在启动的时候是否有报错

#13


111020  9:56:07 [Note] /usr/sbin/mysqld: Normal shutdown

111020  9:56:07 [Note] /usr/sbin/mysqld: Shutdown complete

111020 09:56:07  mysqld ended

111020 09:56:25  mysqld started
InnoDB: No valid checkpoint found.
InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.
InnoDB: If that is the case, please refer to
InnoDB: http://dev.mysql.com/doc/mysql/en/Error_creating_InnoDB.html
111020  9:56:25 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.0.21-log'  socket: '/var/run/mysql/mysql.sock'  port: 3306  Source distribution

#14


http://dev.mysql.com/doc/mysql/en/Error_creating_InnoDB.html 打开此连接 找不匹配记录。
估计这个就是Innodb没有开启的问题。

#15


InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.


检查一下你的目录中
ibdata1
ib_logfile0
ib_logfile1

这些文件情况,不行就把这三个文件删除(先备份一下)

#1


1)关闭mysqld服务
2)修改my.ini(linux下是my.cnf)将skip-innodb这行注释掉或删掉
3) 保存后重启mysqld服务

#2


引用 1 楼 nicenight 的回复:
1)关闭mysqld服务
2)修改my.ini(linux下是my.cnf)将skip-innodb这行注释掉或删掉
3) 保存后重启mysqld服务
1

#3


我的环境是linux

在my.cnf没有skip-innodb这个选项啊?

#4


你是如何安装的?

#5


引用 3 楼 shrimpma 的回复:
我的环境是linux

在my.cnf没有skip-innodb这个选项啊?

从你的 show 里看应该是安装了引擎的,只是被禁用了。
你可以用 ps awux 来看看 mysqld/mysqld_safe 的命令行用的是哪一个 my.cnf,如果没有指定会是使用的默认的 /etc/my.cnf,否则可能在启动参数中指定另外的 my.cnf 路径及文件名,或者在命令行参数里就指定了 skip 选项等。所以建议看看命令行的参数先。

#6


引用楼主 shrimpma 的回复:
如题:
mysql> show engines;
+------------+----------+----------------------------------------------------------------+
| Engine | Support | Comment |
+------------+----------+------------------------……


能show 出来,表示 InnoDB 已经被安装好了,只是被禁用了吧!
看看my.cnf里面有没有skip类似的设置!

#7


引用 5 楼 nicenight 的回复:
引用 3 楼 shrimpma 的回复:

我的环境是linux

在my.cnf没有skip-innodb这个选项啊?

从你的 show 里看应该是安装了引擎的,只是被禁用了。
你可以用 ps awux 来看看 mysqld/mysqld_safe 的命令行用的是哪一个 my.cnf,如果没有指定会是使用的默认的 /etc/my.cnf,否则可能在启动参数中指定另外的 my.c……


ps aux| grep mysqld
 
root      1895  0.0  0.1   2584  1304 ?        S    Oct17   0:00 /bin/sh /usr/bin/mysqld_safe --user=mysql --datadir=/log/mysql --nice=-1 --myisam-recover=BACKUP,FORCE
mysql     1939  0.5  5.0 138368 34636 ?        S<l  Oct17  14:45 /usr/sbin/mysqld --basedir=/usr --datadir=/log/mysql --user=mysql --pid-file=/log/mysql/ID-200.pid --skip-locking --port=3306 --socket=/var/run/mysql/mysql.sock --myisam-recover=BACKUP,FORCE
root      7928  0.0  0.0   3604   556 pts/0    SN+  10:06   0:00 grep mysqld

没有配置文件

#8


检查你的 /etc/my.cnf

#9


mysql 能够正常使用,mysql 配置没有问题。
从mysql> show engines;显示的信息可以确认innnodDB已经安装 ,只是被禁用了。

就想问问如何开启?

#10


# Example MySQL config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /srv/mysql) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password = testpassword
port = 3306
socket = /var/run/mysql/mysql.sock

# Here follows entries for some specific programs
default-character-set=gbk

# The MySQL server
[mysqld]
port = 3306
socket = /var/run/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
#tmp_table_size = 1M
#key_buffer_size = 1024

default-character-set=gbk
init-connect='SET NAMES gbk' 
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!

#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
#log-bin=mysql-bin
log-slow-queries
long_query_time = 2

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin

# Point the following paths to different dedicated disks
#tmpdir = /tmp/
#log-update  = /path-to-dedicated-directory/hostname

# Uncomment the following if you are using BDB tables
#bdb_cache_size = 4M
#bdb_max_lock = 10000

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /srv/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /log
#innodb_log_arch_dir = /srv/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 32M
innodb_additional_mem_pool_size = 4M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 8M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

#11


引用 1 楼 nicenight 的回复:
1)关闭mysqld服务
2)修改my.ini(linux下是my.cnf)将skip-innodb这行注释掉或删掉
3) 保存后重启mysqld服务


留个记号!

#12


看看错误日志在启动的时候是否有报错

#13


111020  9:56:07 [Note] /usr/sbin/mysqld: Normal shutdown

111020  9:56:07 [Note] /usr/sbin/mysqld: Shutdown complete

111020 09:56:07  mysqld ended

111020 09:56:25  mysqld started
InnoDB: No valid checkpoint found.
InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.
InnoDB: If that is the case, please refer to
InnoDB: http://dev.mysql.com/doc/mysql/en/Error_creating_InnoDB.html
111020  9:56:25 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.0.21-log'  socket: '/var/run/mysql/mysql.sock'  port: 3306  Source distribution

#14


http://dev.mysql.com/doc/mysql/en/Error_creating_InnoDB.html 打开此连接 找不匹配记录。
估计这个就是Innodb没有开启的问题。

#15


InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.


检查一下你的目录中
ibdata1
ib_logfile0
ib_logfile1

这些文件情况,不行就把这三个文件删除(先备份一下)