gpt4 book ai didi

mysql - Innodb 和 MyISAM 表问题

转载 作者:行者123 更新时间:2023-11-29 16:24:39 25 4
gpt4 key购买 nike

我遇到了硬盘崩溃,导致 SQL 数据库出现一些问题。从那时起,我从备份中进行了重建,但一个问题不断出现,这对我来说毫无意义。希望它对这里的某人有用。我真的只是在寻求帮助以找到问题的根源。我可以从那里修复。我已经阅读了数百篇帖子,并在网上无休止地搜索了这一篇。当然,有人可能会发布一个包含我错过的答案的链接。

服务器很旧,运行 CentOS 5 和 MySQL 5.0.77。我打算解决这个问题后升级。

数据库同时具有 MyISAM 和 InnoDB 表。通过phpmyadmin,我看到InnoDB没有运行。我检查了 my.cnf,没有任何迹象表明它没有运行,除非我遗漏了一些东西。

    [mysqld]
innodb_file_per_table = 1
log-bin=/var/lib/mysql/

binlog-ignore-db=supp
server-id=5
#master-host=
#master-user=
#master-password=
#master-connect-retry=60
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
skip-name-resolve
relay-log=/data1/mysqld/mysqld-relay-bin
skip-slave
#set-variable = join_buffer_size=60M
set-variable = key_buffer=128M
set-variable = max_allowed_packet=30M
set-variable = table_cache=64
set-variable = sort_buffer=8M
set-variable = record_buffer=2M
set-variable = myisam_sort_buffer_size=8M
set-variable = thread_cache=4
set-variable = thread_concurrency=2
set-variable = max_connections=500
set-variable = wait_timeout=3600

#


# Uncomment the following if you are using BDB tables
#set-variable = bdb_cache_size=64M

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

innodb_data_home_dir=
innodb_data_file_path = /data1/ibdata/ibdata1:5000M;/data1/ibdata/ibdata2:5000M;/data1/ibdata/ibdata3:5000M;/data1/ibdata/ibdata4:5000M:autoextend
set-variable = innodb_buffer_pool_size=1G
set-variable = innodb_additional_mem_pool_size=5M
innodb_log_group_home_dir= /data1/iblogs
innodb_log_arch_dir = /data1/iblogs
set-variable = innodb_log_files_in_group=3
##
set-variable = innodb_log_file_size=100M
set-variable = innodb_log_buffer_size=16M
set-variable = innodb_file_io_threads=8
set-variable = innodb_lock_wait_timeout=100
set-variable = innodb_autoextend_increment=200
#
innodb_flush_log_at_trx_commit=0
innodb_log_archive=0

set-variable = innodb_lock_wait_timeout=100
#innodb_flush_method = O_DSYNC

[mysqldump]
quick
set-variable = max_allowed_packet=16M

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

[isamchk]
set-variable = key_buffer=2M
set-variable = sort_buffer=1M
set-variable = read_buffer=1M
set-variable = write_buffer=1M

[myisamchk]
set-variable = key_buffer=20M
set-variable = sort_buffer=20M
set-variable = read_buffer=2M
set-variable = write_buffer=2M

在 phpmyadmin 中,所有 InnoDB 表都显示为“正在使用”并报告 1033 错误。当我创建一个新数据库并复制表时,会发生同样的事情。唯一有效的方法是从 sql 转储文件创建数据库,但这会创建旧数据,因为备份有点旧。新数据库包含所有 MyISAM 表并且它们可以正常工作,但减去了从其中查找数据的 CGI 文件中的一些语法错误。我现在可以解决这个问题。

我没有创建此服务器,也从未管理过该服务器。我已经解决了很多问题,并正在努力找人帮忙,但这很困难。我只要求有人为我指明正确的方向。

什么会导致只有 InnoDB 表出现信息不正确的问题?我搜索了错误日志,它们报告的内容大致相同,都是“table.frm 中的信息不正确”错误。

为了尽可能简短,我将在此停止,但如果有必要,我很乐意解释更多内容。

mysqld 日志:

    190122 12:45:02  mysqld started
190122 12:45:02 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
190122 12:45:02 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
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/refman/5.0/en/error-creating-innodb.html
190122 12:45:03 [Warning] 'user' entry 'root@fmdb2' ignored in --skip-name-resolve mode.
190122 12:45:03 [Warning] 'user' entry 'leadtraffic@www.bravelcon.com' ignored in --skip-name-resolve mode.
190122 12:45:03 [Warning] 'db' entry 'leadtraffic leadtraffic@www.bravelcon.com' ignored in --skip-name-resolve mode.
190122 12:45:03 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution

最佳答案

这是一个我认为与您的情况类似的博客:https://eric.lubow.org/2010/mysql-error-1033-incorrect-information-in-file/

在这种情况下,用户启动了MySQL Server,但InnoDB存储引擎无法初始化。在旧版本的 MySQL 中,如果 InnoDB 引擎无法启动,这并不是 fatal error ,但正如您可能猜到的那样,如果没有该引擎,您将无法读取或写入 InnoDB 表。有一个选项可以强制服务器在无法初始化 InnoDB 时停止,但当时默认情况下没有启用此选项。

如博客中所示,您可以确认 InnoDB 是否已禁用或不存在于引擎列表中:

mysql> SHOW ENGINES;

.FRM 文件是表的元数据文件,无论存储引擎如何,因此当您查询表时,它首先打开 .FRM 文件以获取表定义。这很好,但是如果由于 InnoDB 引擎未运行而无法读取表数据,它就会感到困惑。 “有表元数据但没有表?

您需要找出 InnoDB 无法启动的原因,并纠正该问题。线索可能在 MySQL 错误日志中。例如,请参阅该博客中报道的案例。

在博客中,用户发现另一个 mysqld 进程已经在运行,并且持有 InnoDB 表空间 ibdata1 上的文件锁。所以在第二个实例中,MySQL Server 的启动无法获得该文件的锁定并放弃。

就您而言,正如您几周前在问题中所报告的那样( ERROR /usr/libexec/mysqld: Incorrect information in file ),有一些迹象表明您正在运行另一个 mysqld 实例:

190105 17:11:09 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
190105 17:11:09 [ERROR] Do you already have another mysqld server running on port: 3306 ?
<小时/>

您在错误日志中显示的错误:

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 日志文件 ib_logfile0ib_logfile1 存在严重错误。它们可能已损坏或无法使用。当您尝试在 mysqld 运行时移动日志文件时,有时会发生这种情况。

您的 MySQL 实例已进入危险状态,您可能会丢失所有数据。我真的建议您找一些合格的数据恢复专家。我在上一个答案中也提出了这个建议。

另一种选择是将其归结为经验。删除所有 InnoDB 文件,重新启动 MySQL 服务器,并让它初始化一个新的表空间(该表空间将为空)。

关于mysql - Innodb 和 MyISAM 表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54311004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com