我已经研究了几个小时,但毫无收获。基本上,我的服务器的 my.cnf 文件似乎根本没有被读取。
我搜索了我的服务器,上面只有一个 my.cnf 文件,位于 /etc/mysql/my.cnf。它的所有权是 root:root。
我在 Linode.com 服务器上运行 Ubuntu 10.04 64 位。我安装了最新版本的 MySQL 和 PHP。
我编辑了 my.cnf 文件,注释掉“skip-innodb”,并使用以下方法将 innodb 设置为默认存储引擎:
default-storage-engine = innodb
然后重新启动mysql。
但是当我显示引擎时,MyISAM 仍然是默认引擎。
此外 - 我添加到 my.cnf 文件中的任何 innodb 设置均未被读取。例如,我在 my.cnf 中有以下内容:
innodb_buffer_pool_size=4G
但是在 phpmyadmin 中,InnoDB 显示缓冲池大小为 8,192 KiB。
类似地,我在 my.cnf 中有这个:
innodb_data-file_path = ibdata1:500M:autoextend
但在 phpmyadmin 中,它读取为 ibdata1:10M:autoextend。
看起来也没有从 my.cnf 文件中读取 MyISAM 信息。my.cnf 文件已查询 skip-external-locking,但在 phpmyadmin 中显示为“on”。
所以 - 是的,看起来好像 my.cnf 文件中根本没有任何内容被读取。
但服务器仍然在运行。我在其上运行 Drupal 网站,它似乎运行良好。因此,mysql 似乎正在从某个神秘的秘密位置获取默认设置。
知道如何让 mysql 看到并使用这个 my.cnf 文件吗?
实际上,等一下 - 看起来它可能正在被读取,不确定。我检查了 error.log 并发现了以下内容:
101128 4:28:52 [ERROR] Cannot find or open table databasename/cache_apachesolr from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html
how you can resolve the problem.
InnoDB: Error: auto-extending data file ./ibdata1 is of a different size
InnoDB: 640 pages (rounded down to MB) than specified in the .cnf file:
InnoDB: initial 32000 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!
101128 4:28:52 [ERROR] Plugin 'InnoDB' init function returned error.
101128 4:28:52 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
101128 4:28:52 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb_lock_wait_timout=50'
101128 4:28:52 [ERROR] Aborting
101128 4:28:52 [Note] /usr/sbin/mysqld: Shutdown complete
答案1
类似于您无法在不重新创建 innodb 日志的情况下更改日志文件大小,您也无法在不重新创建 ibdata 文件的情况下重新指定它的大小。此外,由于它默认为自动扩展文件,因此无需将其调整得更大。以下是错误中告诉您这是一个问题的相关部分:
InnoDB: Error: auto-extending data file ./ibdata1 is of a different size
InnoDB: 640 pages (rounded down to MB) than specified in the .cnf file
所以我会从 my.cnf 中删除它。另外,您的配置中可能存在拼写错误,因为错误日志还指出“innodb_lock_wait_timout”是一个无效变量,但根据手册,它似乎并不无效。
但是,当 mysql 在启动过程中由于无效的 my.cnf 而明显中止时,它是如何运行的,这很神秘。
答案2
您可能需要检查 /var/lib/mysql、/etc/mysql/my.cnf(或您的 mysql 目录)中的文件
如果有 /etc/mysql/my.cnf,服务器将不遵守 ~/.my.cnf 文件
my.cnf 通常位于以下位置:
/etc/my.cnf Global options
/etc/mysql/my.cnf Global options (as of MySQL 5.1.15)
SYSCONFDIR/my.cnf Global options
$MYSQL_HOME/my.cnf Server-specific options
defaults-extra-file The file specified with --defaults-extra-file=path, if any
~/.my.cnf User-specific options
~ 代表当前用户的主目录($HOME 的值)。
SYSCONFDIR 表示在构建 MySQL 时使用 --sysconfdir 选项为 configure 指定的目录。默认情况下,这是位于编译安装目录下的 etc 目录。从 MySQL 5.1.10 开始使用此位置。(从 5.1.10 到 5.1.22,它是在 ~/.my.cnf 之后最后读取的。)
MYSQL_HOME 是一个环境变量,包含服务器特定的 my.cnf 文件所在目录的路径。
答案3
如果您要将新的数据路径添加到 my.cnf,则可能需要编辑 apparmour 配置以允许此更改。您是否在日志文件中看到任何“审计”类型的错误?
当我更改 my.cnf 中的 data_dir 时,它没有注意到更改,直到我编辑
/etc/apparmor.d/usr.sbin.mysqld
并用rw添加了数据目录的新路径。
答案4
您需要将 innodb mysql 变量放在 my.cnf 中的 [mysql] 块下,否则将无法读取