Почему не работает mysql
Перейти к содержимому

Почему не работает mysql

  • автор:

Почему не работает база данных MySql?

Если сокет нашелся в директории отличной от /var/run/mysqld/mysqld.sock нужно в настройках php.ini прописать новое местоположение сокета:

  • Facebook
  • Вконтакте
  • Twitter

Попробуйте добавить в my.cnf в раздел [mysqld] строчку:
innodb_use_native_aio=0 и перезапустить mysql.

Если не запустится то покажите опять error.log

nochkin

  • Facebook
  • Вконтакте
  • Twitter
  • Facebook
  • Вконтакте
  • Twitter
  • Facebook
  • Вконтакте
  • Twitter

igorgabby

Была такая же проблема, мучился долго, в итоге понял, что mysqld.exe не запускается.
Понял, что нужно запускать распакованный сервер с помощью командной строки:
mysqld.exe —standalone
для завершения работы сервера используйте:
mysqladmin.exe -u root shutdown
Данные exe-шки находятся в папке с вашим сервером в каталоге bin.

Так же можете попробовать установить MySQLInstaller для работы с MySQL сервером, может заменить вам распаковку сервера с архива, на установку с удобным интерфейсом.
ВОТ ССЫЛКА НА MySQLInstaller: dev.mysql.com/downloads/windows/installer/5.6.html
(На сайте, на первый момент кажется, нельзя без регистрации ставить, но снизу есть кнопка «No thanks, just start my download.»)
+
(Указано, что MySQLInstaller 32-х разрядный, но в последствии вы можете установить 64-х разрядный сервер в этой же программе)

  • Facebook
  • Вконтакте
  • Twitter

Создать этот файл:

Проверить: mysql -u root -p
Скорее всего будет выдавать ошибку прав доступа. Отключить запрет для пользователя «root»:

Не запускается Mysql

MySQL или MariaDB — это один из самых популярных движков баз данных, который используется для обеспечения работы большинства веб-сайтов в интернете, а также множества других проектов.

Иногда случается, что из-за после изменения настроек или по какой-либо другой причине mysql не запускается. Это довольно серьезная проблема, особенно, когда такая ситуация случается на сервере публичного проекта. В этой статье мы рассмотрим основные причины почему может возникать такая проблема, а также пути решения. В качестве примера будет использоваться Mariadb и Ubuntu.

Почему не запускается MySQL сервер?

Если вы используете systemd для запуска сервисов, то получите такую ошибку:

failed to start mysql server или job for mysql failed because the control proccess exited

Из сообщения понято только то что что-то пошло не так, но что именно неизвестно. Чаще всего проблемы в работе MySQL могут вызвать такие причины:

  • Синтаксические ошибки в конфигурационном файле;
  • Неверные настройки;
  • Недостаточное количество оперативной памяти на сервере;
  • Проблемы с правами доступа;
  • Сетевой порт уже занят;
  • Таблицы баз данных повреждены;

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

Что делать если не запускается MySQL?

Первым делом, если вы меняли настройки в конфигурационном файле надо проверить его на ошибки. Встроенной утилиты для таких целей нет, но можно запустить mysql daemon с опцией —help:

/usr/sbin/mysqld —help —verbose

В начале вывода будут представлены обнаруженные в основном конфигурационном файле ошибки. Например, здесь я специально добавил несуществующую переменную. Вам остается только исправить ошибки и перезапустить mysql:

systemctl restart mariadb

Если же это не сработало и вы все еще получаете ошибку, посмотрите лог загрузки systemd для этого сервиса:

systemctl status -l mariadb

Иногда здесь тоже можно найти полезную информацию, но в данном случае ничего нет. Следующий шаг — просмотр лога mysql. Если лог еще не включен, включаем его добавив такую строчку в /etc/mysql/my.cnf в секцию [mysqld]:

sudo vi /etc/mysql/my.cnf

[mysqld] log-error=/var/log/mysql/error.log Затем снова пытаемся запустить сервис и смотрим на появившиеся в логе ошибки:

tail -f /var/log/mysql/error.log

Здесь вы увидите ошибки, которые мешают запустить mysql. Здесь надо искать слова: Fail, Error, Warning, Aborted и так далее. Вам остается только их исправить. Исправить проблемы с синтаксисом, убрать опции, которые потребляют слишком много памяти и исправить другие проблемы. А теперь рассмотрим несколько распространенных проблем.

1. Изменение размера буфера innodb

Если вы измените значение директивы innodb_buffer_pool_size в большую или меньшую сторону пока сервис работает, то перезапустить вы его уже не сможете. Перед тем как менять значение директивы остановите mysql:

sudo systemctl stop mariadb

Затем удалите старые логи innodb или просто их переименуйте:

sudo mv /var/lib/mysql/ib_logfile0 <,bak>sudo mv /var/lib/mysql/ib_logfile1

И только после этого можете снова запускать сервис, он запустится с новыми настройками размера буфера. Только будьте аккуратны с выбором размера. При слишком большом размере может не хватить памяти для запуска, так как весь буфер хранится в ОЗУ.

sudo systemctl start mariadb

2. Ошибка Permission denied

MySQL хранит файлы базы данных на диске. У движка базы данных должен быть полный доступ к папке, в которой хранятся эти файлы. По умолчанию в Ubuntu это /var/lib/mysql/. Все файлы в этой папке должны принадлежать пользователю mysql:

ls -l /var/lib/mysql/

Если это не так, исправляем командой:

sudo chown -R mysql:mysql /var/lib/mysql/

3. Ошибка Address already in use

MySQL может использовать файловый сокет Linux или же сетевой сокет, тогда база данных будет доступна другим программам на порту 3306. Если сейчас уже запущен другой процесс mysql или какой-либо другой процесс занимает этот порт вы получите ошибку Address already in use. Чтобы ее решить смотрим какой процесс использует порт:

sudo ss -lptn ‘sport = :3306’

Например, здесь мы видим, что запущен другой экземпляр mysql с PID 11240. Вы можете его завершить с помощью kill:

sudo kill -TERM 11240

Теперь база данных запуститься.

4. Ошибка corrupt database page Mysql

Если mysql завершился некорректно из-за недостатка памяти или других проблем, например, проблем с файловой системой, то таблицы innodb могут быть повреждены — corrupt database page. Это происходит не так часто. При такой проблеме вы увидите такую запись в логе:

Проблема серьезная, но решаемая. В самом сообщении об ошибке система рекомендует сделать резервную копию таблиц, удалить их и создать заново из резервной копии. Но для этого должна быть запущена база данных, а она не запускается.

Нам необходимо запустить mysql в режиме восстановления, в котором все повреждения таблиц будут игнорироваться. Для этого добавляем в конфигурационный файл /etc/mariadb/my.cnf строку:

sudo vi /etc/mariadb/my.cnf

Затем запускаем mysql:

systemctl start mariadb

Ошибок не будет и сервис запуститься. Нам остается только исправить таблицы. Для этого можно воспользоваться инструментом mysqlcheck:

mysqlcheck -u root —auto-repair —all-databases

Готово. Теперь возвращаемся в конфигурационный файл и комментируем или удаляем строку innodb_force_recovery.

После этого можно перезапустить mysql и сервис будет работать в обычном режиме:

sudo systemctl restart mariadb

Выводы

В этой статье мы рассмотрели основные причины почему не запускается mysql сервер. Теперь вы сможете очень быстро с ними справиться, если столкнетесь в своей работе. А с какими еще проблемами кроме этих сталкивались вы? Какие были пути решения? Давайте дополним статью вместе, пишите в комментариях!

Устраняем типичные ошибки в MySQL

Обложка: Устраняем типичные ошибки в MySQL

MySQL — система управления базами данных (СУБД) с открытым исходным кодом от компании Oracle. Она была разработана и оптимизирована специально для работы веб-приложений. MySQL является неотъемлемой частью таких веб-сервисов, как Facebook, Twitter, Wikipedia, YouTube и многих других.

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

Не удаётся подключиться к локальному серверу

Одной из распространённых ошибок подключения клиента к серверу является «ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)».

Эта ошибка означает, что на хосте не запущен сервер MySQL ( mysqld ) или вы указали неправильное имя файла сокета Unix или порт TCP/IP при попытке подключения.

Убедитесь, что сервер работает. Проверьте процесс с именем mysqld на хосте сервера, используя команды ps или grep, как показано ниже.

Если эти команды не показывают выходных данных, то сервер БД не работает. Поэтому клиент не может подключиться к нему. Чтобы запустить сервер, выполните команду systemctl.

Чтобы проверить состояние службы MySQL, используйте следующую команду:

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

Если сервер работает (как показано) и вы по-прежнему видите эту ошибку, вам следует проверить, не заблокирован ли порт TCP/IP брандмауэром или любой другой службой блокировки портов.

Для поиска порта, который прослушивается сервером, используйте команду netstat .

Не удаётся подключиться к серверу MySQL

Ещё одна похожая и часто встречающаяся ошибка подключения — «(2003) Can’t connect to MySQL server on ‘server’ (10061)». Это означает, что в сетевом соединении было отказано.

Следует проверить, работает ли в системе сервер MySQL (смотрите выше) и на тот ли порт вы подключаетесь (как найти порт, можно посмотреть выше).

Похожие частые ошибки, с которыми вы можете столкнуться при попытке подключиться к серверу MySQL:

Ошибки запрета доступа в MySQL

В MySQL учётная запись (УЗ) определяется именем пользователя и клиентским хостом, с которого пользователь может подключиться. УЗ может также иметь данные для аутентификации (например, пароль).

Причин для запрета доступа может быть много. Одна из них связана с учётными записями MySQL, которые сервер разрешает использовать клиентским программам при подключении. Это означает, что имя пользователя, указанное в соединении, может не иметь прав доступа к базе данных.

В MySQL есть возможность создавать учётные записи, позволяющие пользователям клиентских программ подключаться к серверу и получать доступ к данным. Поэтому при ошибке доступа проверьте разрешение УЗ на подключение к серверу через клиентскую программу.

Увидеть разрешённые привилегии учётной записи можно, выполнив в консоли команду SHOW GRANTS
Входим в консоль (пример для Unix, для Windows консоль можно найти в стартовом меню):

В консоли вводим команду:

Дать привилегии конкретному пользователю в БД по IP-адресу можно, используя следующие команды:

Ошибки запрещённого доступа могут также возникнуть из-за проблем с подключением к MySQL (см. выше).

Потеря соединения с сервером MySQL

С этой ошибкой можно столкнуться по одной из следующих причин:

  • плохое сетевое соединение;
  • истекло время ожидания соединения;
  • размер BLOB больше, чем max_allowed_packet .

В первом случае убедитесь, что у вас стабильное сетевое подключение (особенно, если подключаетесь удалённо).

Если проблема с тайм-аутом соединения (особенно при первоначальном соединении MySQL с сервером), увеличьте значение параметра connect_timeout .

В случае с размером BLOB нужно установить более высокое значение для max_allowed_packet в файле конфигурации /etc/my.cnf в разделах [mysqld] или [client] как показано ниже.

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

Слишком много подключений

Эта ошибка означает, что все доступные соединения используются клиентскими программами. Количество соединений (по умолчанию 151) контролируется системной переменной max_connections . Устранить проблему можно, увеличив значение переменной в файле конфигурации /etc/my.cnf .

Недостаточно памяти

Если такая ошибка возникла, это может означать, что в MySQL недостаточно памяти для хранения всего результата запроса.

Сначала нужно убедиться, что запрос правильный. Если это так, то нужно выполнить одно из следующих действий:

  • если клиент MySQL используется напрямую, запустите его с ключом —quick switch , чтобы отключить кешированные результаты;
  • если вы используете драйвер MyODBC, пользовательский интерфейс (UI) имеет расширенную вкладку с опциями. Отметьте галочкой «Do not cache result» (не кешировать результат).

Также может помочь MySQL Tuner. Это полезный скрипт, который подключается к работающему серверу MySQL и даёт рекомендации по настройке для более высокой производительности.

MySQL продолжает «падать»

Если такая проблема возникает, необходимо выяснить, заключается она в сервере или в клиенте. Обратите внимание, что многие сбои сервера вызваны повреждёнными файлами данных или индексными файлами.

Вы можете проверить состояние сервера, чтобы определить, как долго он работал.

Чтобы узнать время безотказной работы сервера, запустите команду mysqladmin .

Кроме того, можно остановить сервер, сделать отладку MySQL и снова запустить службу. Для отображения статистики процессов MySQL во время выполнения других процессов откройте окно командной строки и введите следующее:

Заключение

Самое важное при диагностике — понять, что именно вызвало ошибку. Следующие шаги помогут вам в этом:

Устранение неполадок в MySQL

MySQL – это реляционная система управления базами данных (РСУБД) с открытым исходным кодом, самая популярная в мире.

Конечно, при работе с любым программным обеспечением и новички, и опытные пользователи могут столкнуться с непонятными ошибками или проблемами, которые трудно диагностировать.

Этот мануал станет отправной точкой при диагностике настроек MySQL и устранении неполадок. Здесь мы рассмотрим общие проблемы, с которыми сталкиваются многие пользователи MySQL, и предоставим рекомендации по их устранению. Мы также предоставим ссылки на официальную документацию MySQL и другие мануалы, которые могут быть полезны в некоторых случаях.

Данный мануал выполнен на основе настройки, описанной в статье Установка MySQL в Ubuntu 18.04. Если вы используете другой дистрибутив, вы можете найти соответствующее руководство в нашем Информатории.

Начало работы в MySQL

Многие пользователи MySQL впервые сталкиваются с проблемой уже в процессе установки и настройки. Мануал Установка MySQL в Ubuntu 18.04 содержит инструкции по базовой конфигурации и может быть полезным для новичков в MySQL.

Причина, по которой некоторые пользователи сталкиваются с проблемами, заключается в том, что их приложениям требуются функции базы данных, доступные только в последних релизах, но версия MySQL в репозиториях по умолчанию некоторых дистрибутивов Linux (включая Ubuntu) не очень свежая. Потому разработчики MySQL поддерживают свой собственный репозиторий программного обеспечения, который вы можете использовать для установки последней версии и регулярного ее обновления. В мануале Установка последней версии MySQL в Ubuntu 18.04 содержатся инструкции о том, как это сделать.

Логи ошибок MySQL

Часто первопричину замедлений, сбоев или другого непредвиденного поведения MySQL можно определить, проанализировав логи ошибок. В системе Ubuntu этот лог по умолчанию находится в /var/log/mysql/error.log. Во многих случаях логи ошибок проще всего прочитать с помощью программы less, утилиты командной строки, которая позволяет просматривать файлы, но не редактировать их:

sudo less /var/log/mysql/error.log

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

Сброс root пароля MySQL

Если вы установили пароль root для MySQL, но потому забыли его, вы можете заблокировать себе доступ к собственным данным в СУБД. Однако если у вас есть доступ к серверу, на котором размещена ваша БД, вы сможете сбросить пароль.

Проблемы с запросами

Иногда пользователи сталкиваются с проблемами при отправке запросов. В некоторых системах баз данных, включая MySQL, операторы запроса должны заканчиваться точкой с запятой (;), как в следующем примере:

SHOW * FROM table_name;

Если вы забудете добавить точку с запятой в конец запроса, запрос будет продолжаться в новой строке. Завершите запрос, введя точку с запятой и нажав Enter.

Некоторые пользователи сталкиваются с тем, что запросы обрабатываются чрезвычайно медленно. Один из способов определить, какой оператор является причиной замедления, – включить и просмотреть лог медленных запросов MySQL. Для этого откройте файл mysqld.cnf, который используется для настройки параметров сервера MySQL. Этот файл обычно хранится в каталоге /etc/mysql/mysql.conf.d/:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Просмотрите файл и найдите такой фрагмент:

. . .
#slow_query_log = 1
#slow_query_log_file = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
. . .

Эти закомментированные директивы определяют стандартные параметры конфигурации MySQL для лога медленных запросов. Вот что делает каждая из них:

  • slow-query-log: значение 1 включает лог медленных запросов.
  • slow-query-log-file: определяет файл, который MySQL будет использовать как лог медленных запросов. В данном случае это /var/log/mysql-slow.log.
  • long_query_time: при значении 2 MySQL будет регистрировать любые запросы, выполнение которых занимает более 2 секунд.
  • log_queries_not_using_indexes: эта директива будет регистрировать в файле /var/log/mysql-slow.log любые запросы, которые выполняются без индексов. Этот параметр не требуется для работы лога, но может быть полезен для выявления неэффективных запросов.

Раскомментируйте эти строки, удалив символы #. В результате вы получите:

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
. . .

Примечание: В MySQL 8+ по умолчанию этих директив в файле mysqld.cnf нет. Вам нужно добавить в конец файла такие строки:

. . .
slow_query_log = 1

slow_query_log_file = /var/log/mysql-slow.log

long_query_time = 2

log_queries_not_using_indexes

После включения лога медленных запросов сохраните и закройте файл. Затем перезапустите MySQL:

sudo systemctl restart mysql

Эти параметры помогут найти проблемные операторы в логе медленных запросов. Вы можете сделать это с помощью less:

sudo less /var/log/mysql_slow.log

Определив запросы, вызывающие замедление, вы можете обратиться к мануалу Оптимизация запросов и таблиц MySQL и MariaDB, который поможет их оптимизировать.

Кроме того, MySQL включает оператор EXPLAIN, который предоставляет информацию о выполнении запросов. Эта страница из официальной документации MySQL рассказывает о том, как использовать EXPLAIN для выявления неэффективных запросов.

Базовые запросы описаны в мануале Запросы в MySQL.

Настройка удаленного доступа

Многие веб-сайты и приложения запускаются с веб-сервера и базы данных, размещенных на одной машине. Однако со временем такая установка может стать неудобной, а еще ее сложно масштабировать. Общее решение такой проблемы – разделение этих функций путем настройки удаленной базы данных, что позволяет серверу и базе данных работать отдельно, на индивидуальных машинах.

Одна из наиболее распространенных проблем, с которыми сталкиваются пользователи при настройке удаленной базы данных MySQL, заключается в том, что их экземпляр настроен на прослушивание только локальных соединений. Это настройка по умолчанию для MySQL, но она не подходит для удаленной базы данных, поскольку MySQL не имеет возможности прослушивать внешний IP-адрес, по которому можно связаться с сервером. Чтобы изменить это, откройте файл mysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

В файле найдите строку bind-address:

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
. . .

По умолчанию это значение 127.0.0.1, что означает, что сервер будет слушать только локальные соединения. Вам нужно изменить эту директиву и указать внешний IP-адрес. В целях устранения неполадок вы можете установить в этой директиве IP-адрес с подстановочными символами *, :: или 0.0.0.0:

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
. . .

Примечание: В MySQL 8+ директивы bind-address по умолчанию нет в файле mysqld.cnf. В этом случае добавьте в конец файла следующую выделенную строку:

. . .
[mysqld] pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
bind-address = 0.0.0.0

Сохраните и закройте файл. Затем перезапустите MySQL:

sudo systemctl restart mysql

Теперь попробуйте получить удаленный доступ к БД.

mysql -u user -h database_server_ip -p

Если сейчас вы можете получить доступ к своей БД, это подтверждает, что проблема была в директиве bind-address и вы ее устранили. Однако обратите внимание, что настройка bind-address на 0.0.0.0 небезопасна, так как позволяет подключаться к вашему серверу с любого IP-адреса. Если же вы все еще не можете получить доступ к базе данных удаленно, проблема может быть вызвана чем-то другим. В любом случае вам может быть полезно обратиться к мануалу Настройка удаленной базы данных MySQL для оптимизации производительности сайта в Ubuntu 18.04.

MySQL внезапно останавливается или не может запуститься

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

Сначала попытайтесь запустить сервер MySQL:

sudo systemctl start mysql

Затем просмотрите логи ошибок, чтобы узнать, что именно вызывает сбой MySQL. Вы можете использовать less:

sudo less /var/log/mysql/error.log

Сообщения, которые указывают на недостаточный объем памяти – это обычно записи типа Out of memory или mmap can’t allocate.

Потенциально решить проблемы с памятью могут:

  • Оптимизация настройки MySQL. Отличным инструментом для этого является открытый MySQLtuner. Сценарий MySQLtuner выведет набор рекомендуемых настроек в файл конфигурации MySQL (mysqld.cnf). Обратите внимание, чем дольше ваш сервер работал до использования MySQLTuner, тем точнее будут его предложения. Чтобы получить оценку использования памяти ваших текущих настроек и предложенных MySQLTimer, используйте этот MySQL Calculator.
  • Снижение зависимости загрузки страниц от MySQL. Обычно для этого можно добавить в приложение статическое кеширование. Например, можно использовать инструмент Joomla, который имеет встроенную функцию кэширования, и WP Super Cache, плагин WordPress, который добавляет такую функциональность.
  • Увеличение ресурсов VPS. Как минимум для обслуживания MySQL мы рекомендуем сервер с 1 ГБ памяти, но размер и тип ваших данных могут существенно повлиять на требования к памяти.

Обратите внимание: хотя обновление (увеличение) сервера является потенциальным решением проблем с памятью, делать это рекомендуется только после того, как вы изучите и взвесите все остальные варианты. Модернизированный сервер с большим количеством ресурсов будет стоить больше денег, поэтому изменение размера следует выполнять только в том случае, если это действительно лучший (или единственный) вариант. Документация MySQL предлагает ряд других решений по диагностике и предотвращению сбоев.

Поврежденные таблицы

Некоторые действия могут повредить таблицы MySQL. Это означает, что произошла ошибка и данные, содержащиеся в них, не читаются. Попытки чтения данных из поврежденной таблицы обычно приводят к сбою сервера.

Вот распространенные причины поврежденных таблиц:

  • Сервер MySQL остановился в середине записи.
  • Внешняя программа изменяет таблицу, которая одновременно изменяется сервером.
  • Машина неожиданно выключилась.
  • Аппаратное обеспечение компьютера вышло из строя.
  • Где-то в коде MySQL есть ошибка.

Если вы подозреваете, что одна из ваших таблиц была повреждена, вы должны сделать резервную копию вашего каталога данных перед устранением неполадок или попыткой исправить таблицу. Это поможет минимизировать риск потери данных.

Сначала остановите MySQL:

sudo systemctl stop mysql

Затем скопируйте все свои данные в новый каталог. В системах Ubuntu каталогом данных по умолчанию является /var/lib/mysql/:

cp -r /var/lib/mysql /var/lib/mysql_bkp

После создания резервной копии вы можете начать проверку таблицы на наличие повреждений. Если таблица использует механизм хранения MyISAM, вы можете проверить, не повреждена ли она, запустив CHECK TABLE из командной строки MySQL:

CHECK TABLE table_name;

В выводе этого оператора появится сообщение о том, повреждена она или нет. Если таблица MyISAM действительно повреждена, ее обычно можно исправить, выполнив REPAIR TABLE:

REPAIR TABLE table_name;

Если таблица успешно исправлена, вы увидите:

Если это не помогло исправить таблицу, в документации MySQL есть несколько альтернативных методов восстановления поврежденных таблиц.

Если поврежденная таблица использует механизм хранения InnoDB, процесс ее восстановления будет другим. InnoDB – это стандартный механизм хранения MySQL начиная с версии 5.5, он поддерживает автоматическую проверку и исправление ошибок. InnoDB проверяет наличие поврежденных страниц, отслеживая контрольные суммы на каждой странице, которую он читает, и если он находит несоответствие контрольной суммы, он автоматически останавливает сервер MySQL.

Необходимость исправления таблиц InnoDB возникает редко, поскольку InnoDB предоставляет механизм восстановления после сбоя, который может решить большинство проблем при перезапуске сервера. Однако если вы все же столкнулись с такой необходимостью, в документации MySQL рекомендуется использовать метод «Сброс и перезагрузка».

Этот метод подразумевает восстановление доступа к поврежденной таблице с помощью утилиты mysqldump для создания логической резервной копии таблицы, которая сохранит структуру и данные в ней, и дальнейшую перезагрузку таблицы.

Имея это в виду, попробуйте перезапустить MySQL, чтобы увидеть, позволит ли это вам получить доступ к серверу:

sudo systemctl restart mysql

Если сервер по-прежнему недоступен, тогда может быть полезно включить опцию InnoDB force_recovery. Вы можете сделать это, отредактировав файл mysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

В раздел [mysqld] добавьте такую строку:

Сохраните и закройте файл, а затем попробуйте перезапустить MySQL снова. Если вы можете получить доступ к поврежденной таблице, используйте утилиту mysqldump, чтобы выгрузить данные таблицы в новый файл. Вы можете назвать этот файл как угодно, но здесь мы для примера назовем его out.sql:

mysqldump database_name table_name > out.sql

Затем удалите таблицу из базы данных. Чтобы избежать повторного открытия командной строки MySQL, вы можете использовать следующий синтаксис:

mysql -u user -p —execute=»DROP TABLE database_name.table_name»

После этого восстановите таблицу с помощью только что созданного файла:

mysql -u user -p < out.sql

Обратите внимание, что механизм хранения InnoDB обычно более отказоустойчив, чем старый механизм MyISAM. Таблицы, использующие InnoDB, все еще могут быть повреждены, но благодаря функциям автоматического восстановления риск повреждения и сбоев таких таблиц значительно ниже.

Ошибки сокета

MySQL управляет соединениями с сервером базы данных с помощью файла сокета, особого файла, который упрощает связь между различными процессами. Файл сокета MySQL называется mysqld.sock, а в системах Ubuntu он обычно хранится в каталоге /var/run/mysqld/. Этот файл создается сервисом MySQL автоматически.

Иногда изменения в вашей системе или конфигурации MySQL могут привести к тому, что MySQL не сможет прочитать файл сокета, а это, в свою очередь, не даст вам получить доступ к вашим базам данных. Наиболее распространенная ошибка сокета выглядит следующим образом:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

Существует несколько причин, по которым может возникнуть эта ошибка, и несколько возможных способов ее устранения.

Одной из распространенных причин этой ошибки является то, что сервис MySQL изначально остановлен или не запускается. Это означает, что он не смог создать файл сокета. Чтобы выяснить, является ли это причиной возникновения ошибки, попробуйте запустить сервис через systemctl:

sudo systemctl start mysql

Затем попробуйте снова получить доступ к MySQL. Если вы все еще получаете ошибку сокета, проверьте расположение, в котором MySQL ищет файл сокета. Эта информация находится в файле mysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysql.cnf

Найдите параметр socket в разделе [mysqld]:

. . .
[mysqld] user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
. . .

Закройте этот файл, а затем убедитесь, что файл mysqld.sock существует, выполнив команду ls в каталоге, где MySQL будет его искать:

ls -a /var/run/mysqld/

Если файл сокета существует, вы увидите его в выводе этой команды:

. .. mysqld.pid mysqld.sock mysqld.sock.lock

Если файл не существует, возможно, причина в том, что MySQL пытается его создать, но не имеет соответствующих прав для этого. Вы можете убедиться в наличии необходимых привилегий, передав права собственности на каталог пользователю и группе mysql:

sudo chown mysql:mysql /var/run/mysqld/

Затем убедитесь, что у пользователя mysql есть соответствующие права доступа к каталогу. 755 подойдет в большинстве случаев:

sudo chmod -R 755 /var/run/mysqld/

Перезапустите сервис MySQL, чтобы он мог снова попытаться создать файл сокета:

sudo systemctl restart mysql

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

Заключение

MySQL управляет данными огромного количества приложений и веб-сайтов. Конечно, такое широкое применение подразумевает и много потенциальных ошибок.

Здесь мы рассмотрели некоторые из наиболее часто встречающихся ошибок, но есть и другие, которые могут возникнуть в зависимости от того, как ваше приложение взаимодействует с MySQL.

Если вы не смогли найти здесь четкое решение своей проблемы, мы надеемся, что мануал, по крайней мере, дал вам некоторое представление об устранении общих неполадок MySQL, а это поможет найти источник ваших ошибок. Много полезной дополнительной информации вы можете найти в официальной документации MySQL. Кроме тем, которые мы здесь обсуждали, она охватывает другие стратегии устранения неполадок.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *