Проблема с таблицами Innodb и MyISAM

У меня произошел сбой жесткого диска, который привел к некоторым проблемам в базе данных 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 '[email protected]' ignored in --skip-name-resolve mode.
190122 12:45:03 [Warning] 'db' entry 'leadtraffic [email protected]' 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

32-битная MySQL и/или ОС?

Rick James 24.01.2019 05:43
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
169
1

Ответы 1

Вот блог, который, я думаю, похож на ваш случай: 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 не работает, он запутается. "Есть метаданные таблицы, но нет таблицы??"

Вам нужно выяснить, почему InnoDB не может запуститься, и исправить эту проблему. Подсказки, скорее всего, будут в журнале ошибок MySQL. См., например, случай, описанный в этом блоге.

В блоге пользователь обнаружил, что другой процесс mysqld уже запущен и удерживает блокировку файла в табличном пространстве InnoDB ibdata1. Итак, во втором случае запуск MySQL Server не смог заблокировать этот файл и сдался.

В вашем случае, как вы сообщили в своем вопросе пару недель назад (ОШИБКА /usr/libexec/mysqld: Неверная информация в файле), был какой-то признак того, что у вас запущен еще один экземпляр 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 и дайте ему инициализировать новое табличное пространство (которое будет пустым).

Привет Билл-Спасибо за ответ. Я исправил исходную проблему с TCP/IP. Журнал mysqld показывает то, что я добавил выше.

John Misak 22.01.2019 23:49

Синтаксис set-variable устарел, но все еще работает в версии 5.0.

Bill Karwin 26.01.2019 03:46

Другие вопросы по теме