Назад |
Перейти на главную страницу
Нестабильное поведение MySQL с внешним хранилищем
В нашем проекте мы используем сервер MySQL 5.0.90 (движок InnoDB) с внешним хранилищем. Мы храним файлы данных MySQL во внешнем хранилище. Когда внешнее хранилище не работает по какой-либо причине, мы наблюдаем нестабильное поведение. Итак, мы сделали несколько тестов.
В Windows Server 2008
Мы закрыли внешнее хранилище физически. Служба MySQL остановлена, и мы не можем связаться с сервером. Затем мы открыли хранилище и смогли запустить сервис
Журналы
- 120618 14:49:30 InnoDB: Ошибка операционной системы номер 21 в файловой операции.
- InnoDB: некоторые номера ошибок операционной системы описаны на
- InnoDB: http://dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
- InnoDB: имя файла E: \ Data \ ibdata1
- InnoDB: вызов операции с файлом: 'aio write'.
- InnoDB: невозможно продолжить работу.
Мы отключили хранилище от операционной системы. Через 3-4 минуты и несколько попыток вставки (некоторые попытки вставки завершились успешно) служба MySQL остановилась, и мы не смогли связаться с сервером.
Журналы
- 120618 14:27:21 InnoDB: ошибка операционной системы номер 21 в файловой операции.
- InnoDB: некоторые номера ошибок операционной системы описаны на
- InnoDB: http://dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
- InnoDB: имя файла E: \ Data \ ibdata1
- InnoDB: вызов операции с файлом: 'aio read'.
- InnoDB: невозможно продолжить работу.
Потом сделали хранилище онлайн и попробовали запустить сервис
Журналы
- InnoDB: первый указанный файл данных E: \ ibdata1 не существует:
- InnoDB: будет создана новая база данных!
- 120618 14:29:00 InnoDB: Установка размера файла E: \ ibdata1 на 10 МБ
- InnoDB: база данных физически записывает полный файл: подождите ...
- InnoDB: Ошибка: все файлы журналов должны создаваться одновременно.
- InnoDB: все файлы журналов должны быть созданы также при создании базы данных.
- InnoDB: если вам нужны файлы журналов большего или меньшего размера, выключите
- InnoDB: база данных и убедитесь, что при завершении работы не было ошибок.
- InnoDB: Затем удалите существующие файлы журнала. Отредактируйте файл .cnf
- InnoDB: и снова запустите базу данных.
- 120618 14:29:00 [ОШИБКА] Механизм хранения по умолчанию (InnoDB) недоступен
- 120618 14:29:00 [ERROR] Прерывание
Затем мы попытались перенастроить MySQL
Журналы
- InnoDB: конец дампа страницы
- 120618 14:34:02 InnoDB: контрольная сумма страницы 1575996416, контрольная сумма до версии 4.0.14 1371122432
- InnoDB: сохраненная контрольная сумма 0, сохраненная контрольная сумма до версии 4.0.14 0
- InnoDB: страница lsn 0 0, младшие 4 байта lsn в конце страницы 0
- InnoDB: номер страницы (если уже сохранен на странице) 0,
- InnoDB: идентификатор пространства (если создан с помощью> = MySQL-4.1.1 и уже сохранен) 0
- 120618 14:34:02 - mysqld получил исключение 0xc0000005;
Это могло быть потому, что вы обнаружили ошибку. Также возможно, что этот двоичный файл или одна из библиотек, с которой он был связан, повреждены, неправильно построены или неправильно настроены. Эта ошибка также может быть вызвана неисправностью оборудования. Мы сделаем все возможное, чтобы собрать некоторую информацию, которая, надеюсь, поможет диагностировать проблему, но, поскольку мы уже вышли из строя, что-то определенно не так, и это может привести к сбою.
key_buffer_size = 0
- read_buffer_size = 65536
- max_used_connections = 0
- max_connections = 100
- thread_connected = 0
Возможно, что mysqld может использовать до key_buffer_size + (read_buffer_size + sort_buffer_size) * max_connections = 32000 Кбайт памяти. Надеюсь, что все в порядке; если нет, уменьшите некоторые переменные в уравнении.
thd = 00000000
- Попытка трассировки. Вы можете использовать следующую информацию, чтобы узнать, где умер mysqld. Если после этого вы не видите никаких сообщений, что-то пошло не так ...
- 006D2DB6 mysqld-nt.exe! Page_cur_search_with_match () [page0cur.c: 347]
- 0067A777 mysqld-nt.exe! Btr_cur_search_to_nth_level () [btr0cur.c: 500]
- 006B2E0E mysqld-nt.exe! Btr_pcur_open_on_user_rec () [btr0pcur.c: 549]
- 006A5615 mysqld-nt.exe! Dict_load_indexes () [dict0load.c: 604]
- 006A6424 mysqld-nt.exe! Dict_load_sys_table () [dict0load.c: 1023]
- 006BBB20 mysqld-nt.exe! Dict_boot () [dict0boot.c: 378]
- 00668A79 mysqld-nt.exe! Innobase_start_or_create_for_mysql () [srv0start.c: 1462]
- 00444462 mysqld-nt.exe! Innobase_init () [ha_innodb.cc:1427]
- 0044B30D mysqld-nt.exe! Ha_init () [handler.cc:483]
- 004B923E mysqld-nt.exe! Init_server_components () [mysqld.cc:3431]
- 004BD070 mysqld-nt.exe! Win_main () [mysqld.cc:3806]
- c004BD43B mysqld-nt.exe! mysql_service () [mysqld.cc:3967]
- 006E28EF mysqld-nt.exe! _Threadstart () [thread.c: 196]
- 75583677 kernel32.dll! BaseThreadInitThunk ()
- 77359D72 ntdll.dll! RtlInitializeExceptionChain ()
- 77359D45 ntdll.dll! RtlInitializeExceptionChain ()
- Страница руководства по адресу http://dev.mysql.com/doc/mysql/en/crashing.html содержит информацию, которая должна помочь вам выяснить причину сбоя. 120618 14:29:00 [Примечание] C: \ Program Files (x86) \ MySQL \ MySQL Server 5.0 \ bin \ mysqld-nt: завершение работы
В Windows Server 2003
Сделали хранилище офлайн. Через 3-4 минуты и несколько попыток вставки (некоторые попытки вставки завершились успешно) служба MySQL остановилась, и мы не смогли связаться с сервером.
Журналы
- InnoDB: сканирование журнала прошло мимо контрольной точки lsn 0 9834427 120618 14:09:59 InnoDB: База данных не была завершена нормально!
- InnoDB: запуск восстановления после сбоя.
- InnoDB: чтение информации о табличном пространстве из файлов .ibd ...
- InnoDB: восстановление возможных наполовину записанных страниц данных из двойной записи
- InnoDB: буфер ...
- InnoDB: Выполнение восстановления: сканировано до порядкового номера журнала 0 9834574
- 120618 14:09:59 InnoDB: запуск пакета применения записей журнала к базе данных ...
- InnoDB: Прогресс в процентах: 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69. 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
- InnoDB: Применить пакет завершен
- 120618 14:10:00 InnoDB: запущен; порядковый номер журнала 0 9834574
- 120618 14:10:00 [Примечание] C: \ Program Files (x86) \ MySQL \ MySQL Server 5.0 \ bin \ mysqld-nt: готов к подключению.
- Версия: '5.0.90-community-nt' socket: '' порт: 3306 MySQL Community Edition (GPL)
- 120618 14:12:36 InnoDB: Ошибка операционной системы номер 21 в файловой операции.
- InnoDB: некоторые номера ошибок операционной системы описаны на
- InnoDB: http://dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
- InnoDB: имя файла E: \ Data \ ibdata1
- InnoDB: вызов операции с файлом: 'aio read'.
- InnoDB: невозможно продолжить работу.
Затем мы подключили хранилище к сети и не смогли запустить службу, пока не переустановим MySQL. Перед переустановкой мы попытались перенастроить, но это не помогло.
Журналы
- 120618 14:16:53 InnoDB: ошибка операционной системы номер 3 в файловой операции.
- InnoDB: ошибка означает, что система не может найти указанный путь.
- InnoDB: если вы устанавливаете InnoDB, помните, что вы должны создать
- InnoDB: каталоги сами, InnoDB их не создает.
- InnoDB: имя файла E: \ Data \ ibdata1
- InnoDB: вызов операции с файлом: 'create'.
- InnoDB: невозможно продолжить работу.
Не удалось запустить службу MySQL на локальном компьютере. Ошибка 1067: процесс неожиданно завершился. (СООБЩЕНИЕ ОБ ОШИБКЕ)
Мы закрыли внешнее хранилище физически. Служба MySQL остановлена, и мы не можем связаться с сервером. После этого мы открыли блок хранения и смогли запустить сервис (не автоматически)
Журналы
- 120618 14:01:26 InnoDB: ошибка операционной системы номер 21 в файловой операции.
- InnoDB: некоторые номера ошибок операционной системы описаны на
- InnoDB: http://dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
- InnoDB: имя файла E: \ Data \ ibdata1
- InnoDB: вызов операции с файлом: 'aio write'.
- InnoDB: невозможно продолжить работу.
Мы ожидаем, что сервис будет запускаться автоматически после того, как хранилище будет подключено / открыто. Но эти тесты показывают нестабильное поведение. Есть ли какие-то решения для этого.
Мне кажется, что ваши ошибки коренятся в основном устройстве. Я бы провел тесты с вводом-выводом, используя другие приложения для устройства, и посмотрел, сможете ли вы отладить свою ошибку с помощью этого. Ошибки «Устройство не готово» и «путь не найден», по всей видимости, являются основной причиной, предполагая, что ваша внешняя ссылка на хранилище работает некорректно.
iSCSI - это просто протокол, который позволяет серверу получать доступ к удаленно эмулированному SCSI-диску. Не зная больше о фактическом хранилище (сколько контроллеров, есть ли кеш записи, зеркалируется ли он), я не могу быть уверен в своем ответе. Тем не менее, проблема может заключаться в последовательности.
Если вы отключите хранилище, подключенное к работающей базе данных, придется обрабатывать все операции ввода-вывода, иначе вы рискуете получить несогласованные данные. Когда вы выполняете запись во внешнее хранилище, это обычно заканчивается сразу же, как только она находится в кеше. Как только это происходит, данные из кеша удаляются на диск, но не в том порядке, в котором они были получены. Любая потеря питания, из-за которой вы потеряете кэшированный ввод-вывод в полете, приведет к отсутствию записи на диски.