Ошибка Mysql: «Не удается подключиться к локальному серверу MySQL через сокет» /var/run/mysqld/mysqld.sock '(111)'

398
TheUnreal

У меня была проблема с пространством на моем сервере, поэтому я добавил больше места, и теперь MySQL не запускается.

пытаюсь запустить mysql:

root@vps:~# /etc/init.d/mysql start [....] Starting mysql (via systemctl): mysql.service Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details. 

Проверка ошибки с помощью состояния systemctl mysql.service:

root@vps412690:~# systemctl status mysql.service ● mysql.service - LSB: Start and stop the mysql database server daemon Loaded: loaded (/etc/init.d/mysql) Active: failed (Result: exit-code) since Thu 2018-11-08 09:33:42 CET; 11s ago Process: 21650 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE) Nov 08 09:33:42 vps mysql[21650]: .Warning: World-writable config file '/etc/mysql/my.cnf' is ignored Nov 08 09:33:42 vps /etc/init.d/mysql[22203]: 0 processes alive and '/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf ping' resulted in Nov 08 09:33:42 vps /etc/init.d/mysql[22203]: [61B blob data] Nov 08 09:33:42 vps /etc/init.d/mysql[22203]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)' Nov 08 09:33:42 vps /etc/init.d/mysql[22203]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists! Nov 08 09:33:42 vps /etc/init.d/mysql[22203]: Nov 08 09:33:42 vps mysql[21650]: failed! Nov 08 09:33:42 vps systemd[1]: mysql.service: control process exited, code=exited status=1 Nov 08 09:33:42 vps systemd[1]: Failed to start LSB: Start and stop the mysql database server daemon. Nov 08 09:33:42 vps systemd[1]: Unit mysql.service entered failed state. 

Если я пытаюсь получить apt-get (возможно, мне не хватает какого-то файла или чего-то еще), это не сработает:

Errors were encountered while processing: mysql-server-5.5 mysql-server nginx-full nginx E: Sub-process /usr/bin/dpkg returned an error code (1) 

Нашел интересный журнал в моем файле var / log / mysql / error.log:

181108 10:05:31 InnoDB: The InnoDB memory heap is disabled 181108 10:05:31 InnoDB: Mutexes and rw_locks use GCC atomic builtins 181108 10:05:31 InnoDB: Compressed tables use zlib 1.2.8 181108 10:05:31 InnoDB: Using Linux native AIO 181108 10:05:31 InnoDB: Initializing buffer pool, size = 128.0M 181108 10:05:31 InnoDB: Completed initialization of buffer pool 181108 10:05:31 InnoDB: highest supported file format is Barracuda. InnoDB: 1 transaction(s) which must be rolled back or cleaned up InnoDB: in total 1 row operations to undo InnoDB: Trx id counter is 5F884400 InnoDB: Cleaning up trx with id 5F87FA74 181108 10:05:31 InnoDB: Waiting for the background threads to start 181108 10:05:32 InnoDB: 5.5.62 started; log sequence number 3969391541705 181108 10:05:32 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306 181108 10:05:32 [Note] - '0.0.0.0' resolves to '0.0.0.0'; 181108 10:05:32 [Note] Server socket created on IP: '0.0.0.0'. 181108 10:05:32 InnoDB: Assertion failure in thread 140603552634624 in file trx0purge.c line 843 InnoDB: Failing assertion: purge_sys->purge_trx_no <= purge_sys->rseg->last_trx_no InnoDB: We intentionally generate a memory trap. InnoDB: Submit a detailed bug report to http://bugs.mysql.com. InnoDB: If you get repeated assertion failures or crashes, even InnoDB: immediately after the mysqld startup, there may be InnoDB: corruption in the InnoDB tablespace. Please refer to InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html InnoDB: about forcing recovery. 09:05:32 UTC - mysqld got signal 6 ; This could be because you hit a bug. It is also possible that this binary or one of the libraries it was linked against is corrupt, improperly built, or misconfigured. This error can also be caused by malfunctioning hardware. We will try our best to scrape up some info that will hopefully help diagnose the problem, but since we have already crashed,  something is definitely wrong and this may fail.  key_buffer_size=16777216 read_buffer_size=131072 max_used_connections=0 max_threads=151 thread_count=0 connection_count=0 It is possible that mysqld could use up to  key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 346701 K bytes of memory Hope that's ok; if not, decrease some variables in the equation.  Thread pointer: 0x0 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong... stack_bottom = 0 thread_stack 0x30000 /usr/sbin/mysqld(my_print_stacktrace+0x33)[0x55b6743790f3] /usr/sbin/mysqld(handle_fatal_signal+0x3e4)[0x55b674264b14] /lib/x86_64-linux-gnu/libpthread.so.0(+0xf890)[0x7fe0e913c890] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x37)[0x7fe0e7b32067] /lib/x86_64-linux-gnu/libc.so.6(abort+0x148)[0x7fe0e7b33448] /usr/sbin/mysqld(+0x5944d5)[0x55b6744244d5] /usr/sbin/mysqld(+0x59501e)[0x55b67442501e] /usr/sbin/mysqld(+0x662d92)[0x55b6744f2d92] /usr/sbin/mysqld(+0x658fb8)[0x55b6744e8fb8] /usr/sbin/mysqld(+0x596ec5)[0x55b674426ec5] /usr/sbin/mysqld(+0x587f2c)[0x55b674417f2c] /usr/sbin/mysqld(+0x58c723)[0x55b67441c723] /lib/x86_64-linux-gnu/libpthread.so.0(+0x8064)[0x7fe0e9135064] /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fe0e7be562d] The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains information that should help you find out what is causing the crash. 

df -h / var / lib / mysql

Filesystem Size Used Avail Use% Mounted on /dev/sda1 40G 19G 19G 51% / 

Не знаете, с чего начать отладку этой проблемы, какая-либо подсказка?

0
Для начала следуйте инструкциям в сообщении об ошибке выше: запустите `systemctl status mysql.service` и` journalctl -xn`. Если вам все еще нужна помощь, обновите свой вопрос. Johnny 6 лет назад 0
Привет, `systemctl status mysql.service`, это второй вывод, который я опубликовал TheUnreal 6 лет назад 0
Скорее всего, ваш сервер MySQL исчерпал пространство во время обновления - прежде всего вам нужно исправить менеджер пакетов. Сначала попробуйте `apt -f install`, затем обычное` apt update && apt dist-upgrade` и просто убедитесь, что перезагрузка. Сообщите результаты. Eugen Rieck 6 лет назад 1
Да, это обновление касается программного обеспечения MySQL, а не данных, которыми оно управляет. Eugen Rieck 6 лет назад 0
@EugenRieck команда `apt-f install` по-прежнему возвращает эту ошибку:` При обработке возникли ошибки: mysql-server-5.5 mysql-server` TheUnreal 6 лет назад 0
У вас есть данные MySQL в `/ var / lib / mysql` или где-то еще? Eugen Rieck 6 лет назад 0
@EugenRieck ~ 8 ГБ данных в `/ var / lib / mysql` (большая часть в файле` ibdata1`) TheUnreal 6 лет назад 0
Посмотрите журналы ошибок `/ var / log / mysql *` и отправьте что-нибудь важное Eugen Rieck 6 лет назад 0
И дать вывод `df -h / var / lib / mysql` Eugen Rieck 6 лет назад 0
@EugenRieck Добавил эту информацию в вопрос. `df -h / var / lib / mysql` до обновления составляла 100% (было 20 ГБ, обновлено до 40 ГБ), а теперь - 51%. выглядит хорошо. Я нашел некоторые ошибки, которые могли бы помочь в файле журнала ошибок, который вы сказали мне искать. TheUnreal 6 лет назад 0
Хорошо, плохие новости: ваша файловая структура innodb была повреждена, когда на сервере не хватило места. Это происходит очень редко, но это случается (особенно если вы отключите двойную запись в качестве меры настройки). Самое важное, что нужно сделать дальше, это сделать полное и проверенное резервное копирование `/ var / lib / mysql` и` / etc / mysql`. Eugen Rieck 6 лет назад 0
@EugenRieck Я погуглил ошибку, обнаруженную в этом файле - сделал резервную копию файлов, добавил `innodb_force_recovery = 4` в мой файл `my.cnf`, выполнил` service mysql restart` и вернул его к работе. это было мое решение, не стесняйтесь отправить ответ, чтобы я мог принять его TheUnreal 6 лет назад 0
После того, как у вас есть резервная копия, добавьте `innodb_force_recovery = 4` в раздел` [mysqld] `вашей конфигурации MySQL и попробуйте снова. Eugen Rieck 6 лет назад 0
Ах, мы печатали одновременно. Eugen Rieck 6 лет назад 0
Пожалуйста, поймите, что это НЕ работает сейчас - вы находитесь в режиме чрезвычайной ситуации. Теперь вам нужно использовать mysqldump для экспорта всего, затем удалить файлы InnoDB, чтобы MySQL воссоздала их при запуске и заново импортировала все. Eugen Rieck 6 лет назад 0
Перед повторным импортом убедитесь, что вы запускаете `apt -f install` и друзей, чтобы не столкнуться с проблемами при следующем обновлении. Eugen Rieck 6 лет назад 0
Это «это работает сейчас» - довольно большой лазейка - если бы вы сделали это, у вас есть шрамы, чтобы доказать это. Eugen Rieck 6 лет назад 0
@EugenRieck о, не знал этого. Я создал резервную копию моей БД с моим PhpMyAdmin. что вы имеете в виду, удаляя файлы InnoDB? TheUnreal 6 лет назад 0
Файлы InnoDB в `/ var / lib / mysql` все еще повреждены - просто режим восстановления делает это невидимым. Я напишу шаги в ответ, так как для этого нужно больше места. Eugen Rieck 6 лет назад 0

2 ответа на вопрос

1
Eugen Rieck

Этот ответ расширяет обсуждение в разделе комментариев:

Чтобы убедиться, что ваши файлы InnoDB исправны, вам действительно нужно их воссоздать - это может вас укусить позже, если вы не сделаете этого сейчас. Для этого:

  • Сделайте полную резервную копию уровня БД (включая всех пользователей, хранимые процедуры, ...)
  • Так как теперь у вас есть достаточно места, используйте что-то вроде строки tar -cjf /var/libbackup-mysql.tar.bz2 /var/lib/mysqlдля создания резервной копии на уровне файлов (на всякий случай ...)
  • Остановите сервер базы данных
  • Удалить все из / var / lib / mysql
  • Снова запустите сервер базы данных, это займет некоторое время и создаст пустую структуру InnoDB.
  • Повторно импортируйте резервную копию уровня БД

Если это не вернет вам все ваши данные, вы можете использовать резервное копирование на уровне файлов, чтобы начать заново.

Как мне следует импортировать резервную копию уровня БД? Я использую phpmyadmin, но он чувствует себя очень большим, чтобы загрузить оттуда около 0,5 ГБ данных БД. лучше? TheUnreal 6 лет назад 0
Я склонен использовать командную строку: `mysql -uroot -p </ path / to / dumpfile.sql` Eugen Rieck 6 лет назад 0
0
silmaril

Это могло иметь буквально сотню объяснений, но первая строка статуса systemctl, скорее всего, будет полезной подсказкой:

Nov 08 09:33:42 vps mysql[21650]: .Warning: World-writable config file '/etc/mysql/my.cnf' is ignored 

Если ваш конфигурационный файл не читается, действительно будут странные проблемы.

Также вы пытались принудительно подключиться к mysql на IP-адресе, который, кажется, связан, а не на сокете unix?

Вы также прочитали рекомендации по восстановлению:

InnoDB: If you get repeated assertion failures or crashes, even InnoDB: immediately after the mysqld startup, there may be InnoDB: corruption in the InnoDB tablespace. Please refer to InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html InnoDB: about forcing recovery. 
Добро пожаловать в SuperUser, Сильмарил. не ясно, как ваш ответ отвечает на вопрос. Пожалуйста, не могли бы вы отредактировать ответ, чтобы сделать его более понятным? Если вы просите разъяснений, его следует опубликовать в качестве комментария. Stese 6 лет назад 1

Похожие вопросы