• Как починить InnoDB таблицу?

    @nopld Автор вопроса
    Axian Ltd.:
    innodb_data_home_dir=
    Странный ИМХО выбор

    Не могу прокомментировать, взял из какого-то рецепта "как исправить битую таблицу".

    innodb_data_file_path=ibdata1:512M;ibdata2:256M;ibdata3:256M:autoextend
    С какой целью размеры заданы явно?

    Я выше писал, потому что по какой-то причине 1 файл с autoextend не разрастается, а просто постоянно висит одного размера.

    И почему всего три?

    Всего — о есть должно быть больше?

    innodb_flush_log_at_trx_commit = 2
    innodb_flush_method = O_DIRECT
    transaction-isolation = READ-COMMITTED
    как заданы?

    По умолчанию, их я не трогал.
  • Как починить InnoDB таблицу?

    @nopld Автор вопроса
    Axian Ltd.:
    [mysqld]
    sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
    innodb_buffer_pool_size=64M
    innodb_file_per_table=1
    innodb_data_home_dir=
    innodb_data_file_path=ibdata1:512M;ibdata2:256M;ibdata3:256M:autoextend
    innodb_log_file_size=256M
    tmp_table_size=256M
    max_heap_table_size=256M
    
    !includedir /etc/mysql/conf.d/
    !includedir /etc/mysql/mysql.conf.d/


    Даже с полностью выключенными транзакциями в скрипте, таблица снова свалилась с теми же симптомами:

    2017-07-16T09:48:52.611852Z 292262 [ERROR] /usr/sbin/mysqld: The table 'documents' is full
    ...
    2017-07-16T09:53:34.385128Z 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 14571730991
    ...
    2017-07-16T09:53:34.385769Z 0 [Note] InnoDB: Database was not shutdown normally!
    2017-07-16T09:53:34.385861Z 0 [Note] InnoDB: Starting crash recovery.
    2017-07-16T09:53:34.396534Z 0 [Warning] InnoDB: Page 37 in the doublewrite buffer is not within space bounds: page [page id: space=83, page number=49152]
    ...
  • Как починить InnoDB таблицу?

    @nopld Автор вопроса
    Axian Ltd.: Вот это хороший совет, спасибо, проверю.

    UPD: а можно ли как-то по логам MySQL проверить, есть ли у меня незавершенные транзакции? Потому что
    а) у меня в коде есть только одно место, где они используются, и там есть COMMIT;
    б) насколько я понимаю, даже если коммита нет, транзакция всё равно завершиться по выходу из скрипта.

    UPD2:
    It contains several classes for information vital for InnoDB

    Table Data Pages
    Table Index Pages
    Data Dictionary
    MVCC Control Data
    Undo Space
    Rollback Segments
    Double Write Buffer (Pages Written in the Background to avoid OS caching)
    Insert Buffer (Changes to Secondary Indexes)


    Не заметил в этом списке транзакций, да и судя по логу у меня проблема с doublewrite buffer. Может, его просто выключить?
  • Как починить InnoDB таблицу?

    @nopld Автор вопроса
    nopld: нашел в документации, что autoextend может быть только у последнего файла.

    При
    innodb_data_file_path=ibdata1:64M;ibdata2:64M:autoextend
    innodb_force_recovery=6


    База запустилась. Сейчас по инструкции делаю дамп, снесу БД и восстановлю из дампа, посмотрим, что получится.

    Не получилось:
    mysqldump: Couldn't execute 'SELECT /*!40001 SQL_NO_CACHE */ * FROM `documents`': Lost connection to MySQL server during query (2013)
  • Как починить InnoDB таблицу?

    @nopld Автор вопроса
    lubezniy:
    > Общий размер базы и файла innodb какой?
    :/var/lib/mysql# ls -la
    total 176172
    drwx------  7 mysql mysql     4096 Jul 13 08:33 .
    drwxr-xr-x 34 root  root      4096 Jul 11 09:43 ..
    -rw-r-----  1 mysql mysql       56 Jul  8 03:24 auto.cnf
    drwxr-x---  2 mysql mysql     4096 Jul 11 10:12 clarity
    -rw-r--r--  1 root  root         0 Jul  8 03:24 debian-5.7.flag
    -rw-r-----  1 mysql mysql      723 Jul  8 03:55 ib_buffer_pool
    -rw-r-----  1 mysql mysql 67108864 Jul 13 07:17 ibdata1
    -rw-r-----  1 mysql mysql 50331648 Jul 13 08:28 ib_logfile0
    -rw-r-----  1 mysql mysql 50331648 Jul 13 07:12 ib_logfile1
    -rw-r-----  1 mysql mysql 12582912 Jul 12 00:44 ibtmp1
    drwxr-x---  2 mysql mysql     4096 Jul  8 03:24 mysql
    drwxr-x---  2 mysql mysql     4096 Jul  8 03:24 performance_schema
    drwxr-x---  2 mysql mysql     4096 Jul 11 09:43 phpmyadmin
    drwxr-x---  2 mysql mysql    12288 Jul  8 03:24 sys


    Я правильно понял вопрос?

    > Возможно, случилось переполнение целого из-за ограничений архитектуры. Во всяком случае, на stackoverflow описывали такую проблемы, решили переходом с x86 на x64.
    Переход на x64 мне не особо нравится, это единственный вариант?

    Axian Ltd.:
    > Если можно снести таблицу, так снесите, чего ее ждать
    Снес, снова заполнил данными, она снова упала.

    Покопался в конфиге, сделал
    innodb_file_per_table=1
    innodb_data_file_path=ibdata1:64M:autoextend


    ibdata1 так и висит размером в 64 мегабайта и не увеличивается.

    Если дописать
    innodb_data_file_path=ibdata1:64M:autoextend:max:512M;ibdata2:64M:autoextend
    , то файл ibdata2 не появляется (хотя я так понимаю, что должен).
  • Как починить InnoDB таблицу?

    @nopld Автор вопроса
    lubezniy: свободно ~30 гигов, занято БД ~10. То есть, проблема не в месте.

    И ещё. Версия MySQL случайно не 32-битная?

    Вот тут мне сложно ответить:

    # mysql --version
    mysql  Ver 14.14 Distrib 5.7.18, for Linux (armv7l) using  EditLine wrapper