我发生了一次硬盘崩溃,导致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
答案 0 :(得分:0)
这是我认为与您的情况类似的博客:https://eric.lubow.org/2010/mysql-error-1033-incorrect-information-in-file/
在这种情况下,用户启动了MySQL Server,但是InnoDB存储引擎无法初始化。在旧版本的MySQL中,如果无法启动InnoDB引擎,这不是致命错误,但是您可能会猜到,没有该引擎,您将无法读取或写入InnoDB表。如果无法初始化InnoDB,则有一个强制服务器停止的选项,但是在那几天默认情况下未启用此选项。
如博客中所示,您可以确认引擎列表中是否禁用了InnoDB:
mysql> SHOW ENGINES;
.FRM文件是与表无关的元数据文件,与存储引擎无关,因此,查询表时,它首先打开.FRM文件以获取表定义。很好,但是如果由于InnoDB引擎未运行而无法读取表 data ,则会感到困惑。 “ 有表元数据,但没有表?”
您需要弄清楚为什么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_logfile0
和ib_logfile1
存在严重问题。它们可能已损坏或无法使用。当您尝试在mysqld运行时移动日志文件时,有时会发生这种情况。
您已使MySQL实例处于危险状态,并且可能会丢失所有数据。我真的建议您找一些合格的数据恢复专家。我也在最后一个答案中提出了此建议。
另一种选择是尝试一下。删除所有InnoDB文件,重新启动MySQL Server,并使其初始化一个新表空间(该表空间将为空)。