【问题标题】:ERROR /usr/libexec/mysqld: Incorrect information in file错误 /usr/libexec/mysqld:文件中的信息不正确
【发布时间】:2023-03-12 21:52:03
【问题描述】:

我在重新启动后看到此错误以及其他一些减速问题。 MYSQL 不断重启,我认为这意味着 InnoDB 正在恢复,尽管我对这个过程还不够熟悉,无法确定。我正在运行 CentOS 6 并看到了这个:

InnoDB: Apply batch completed
InnoDB: In a MySQL replication slave the last master binlog file
InnoDB: position 0 256214410, file name mysqld-bin.000003
InnoDB: Last MySQL binlog file position 0 390069474, file name /var/lib/mysql/.000105
190105 17:11:09  InnoDB: Started; log sequence number 91 3960852448
InnoDB: Starting in background the rollback of uncommitted transactions
190105 17:11:09  InnoDB: Rolling back trx with id 0 3103647860, 655 rows to undo
190105 17:11:09 [ERROR] /usr/libexec/mysqld: Incorrect information in file: './empire/member_list.frm'
190105 17:11:09 [ERROR] /usr/libexec/mysqld: Incorrect information in file: './empire/member_list.frm'
190105 17:11:09 [Note] Recovering after a crash using /var/lib/mysql/
190105 17:11:09 [Note] Starting crash recovery...
190105 17:11:09 [Note] Crash recovery finished.
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 ?
190105 17:11:09 [ERROR] Aborting

190105 17:11:09  InnoDB: Starting shutdown...
190105 17:11:09 [ERROR] /usr/libexec/mysqld: Incorrect information in file:

my.cnf 文件如下所示:

 The MySQL server
[mysqld]
innodb_file_per_table = 1
log-bin=/var/lib/mysql/
#binlog-do-db=leadtraffic
#binlog-do-db=fullemedia
binlog-ignore-db=supp
server-id=5
#master-host=XXX
#master-user=XXX
#master-password=XXX
#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

#
#replicate-ignore-table=dreamdirect.member_list_old
#replicate-ignore-table=dreamdirect.realtime_info
#replicate-ignore-table=dreamdirect.realtime_info1
#replicate-ignore-table=dreamdirect.realtime_info2
#replicate-ignore-table=dreamdirect.camp_realtime_info
#replicate-ignore-table=fullemedia.realtime_info
#replicate-ignore-table=fullemedia.realtime_info1
#replicate-ignore-table=fullemedia.realtime_info2
#replicate-ignore-table=test.*
#replicate-ignore-table=test.md5supp

# 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

这可能是缓冲区问题,它一直从数据文件中获取旧数据吗?这是新手的猜测。

【问题讨论】:

  • 错误日志解释了它无法启动的原因并提出了一个非常具体的潜在原因。您是否检查过端口 3306 上是否有任何东西在监听?试试netstat -nap | grep ::3306
  • 我运行它时什么也没发生。刚刚回到命令提示符。

标签: mysql innodb


【解决方案1】:

这是最相关的线索:

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 ?
190105 17:11:09 [ERROR] Aborting

它告诉你另一个守护进程已经在使用端口 3306。一次只有一个进程可以监听给定端口,所以当你尝试启动 mysqld 时,它无法绑定到该端口,它会关闭.

很可能是另一个已经在运行的 mysqld 实例。您可以使用ps -elw | grep mysqld 进行确认。

在您可以按照您尝试的方式启动 mysql 服务器之前,您需要确保所有其他实例都已关闭。如果一切都失败了,您可能必须使用kill -9 来执行此操作,并确保也关闭启动器mysqld_safe(如果有一个正在运行),否则它只会重新启动 mysqld 进程。


您看到的另一个关于“文件中的信息不正确”的错误表明您的一个表定义已损坏——empire.member_list 的那个。这不足以阻止 mysqld 启动,但您将无法使用该表。

如果您的表格使用 MyISAM、ARCHIVE 或 CSV 引擎,您可以尝试REPAIR TABLE(请阅读文档,我不是在这里输入已经存在的文档)。

如果您的表是 InnoDB,或者由于某种原因无法修复,请从您最近的备份中恢复您的表。

如果您没有备份,请将其视为学习经验。你应该养成备份的习惯。

【讨论】:

  • 谢谢,比尔。我认为 TCP/IP 错误来自尝试从命令行启动 MYSQL 的系统。服务器现在正在运行,但是它丢失了很多表数据,可能与 Empire.member.list 问题有关。那能恢复吗?现在只有mysqld和mysqld在运行。
  • 感谢您的帮助。用备份替换文件不起作用,现在它也在寻找其他损坏的文件。
  • “用备份替换文件”听起来你只是在手动移动 FRM 文件。这不是恢复备份。大多数试图修改 MySQL 内部文件的尝试都会导致更严重的损坏。
  • 感谢您的回复。我明白。在我的管理员退休并消失后,我接手了这件事,现在正试图将事情重新拼凑起来。数据库运行完成大约 85%,但缺少关键元素。我可以恢复 InnoDB 数据库吗?
  • 您应该聘请一位知道如何操作 MySQL 的新管理员。或者花时间学习如何自己做。使用 Stack Overflow 代替具有基本操作技能的员工并不是一个好的商业计划。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 2010-12-27
相关资源
最近更新 更多