Не запускается mysql ubuntu

Обновлено: 03.07.2024

But mysqld.sock file doesn't exist inside /var/run/mysqld folder. On executing ps aux | grep mysql command,I realized that mysql server was not running.

I then tried to restart mysql server using

But,the start process failed in all 3 cases. /var/log/mysql/mysql.log and /var/log/mysql/mysql.err files are empty.

But /var/log/error.log shows following information:

4,635 1 1 gold badge 23 23 silver badges 30 30 bronze badges 451 1 1 gold badge 4 4 silver badges 4 4 bronze badges ls: cannot access /var/lib/mysql/ib_logfile*: No such file or directory I am a linux newbie..I changed the permissions of /var/lib/mysql by using chmod 777 . Can you please suggest me how to check if this is not the right way?

10 Answers 10

Open a terminal( Ctrl + Alt + t ) and do the following:

and comment out the line record_buffer=64M in /etc/mysql/my.cnf [1]

and then restart msyql using:

25.1k 15 15 gold badges 94 94 silver badges 115 115 bronze badges Should I kill the mysql restart process which is running? Will it cause any problem??

This solved my problem:

chown -R mysql /var/run/mysqld

after applying these steps my database is got deleted. Now what will I do??

I solved the problem in the following way:

In another context, I faced it because the mysql daemon failed to start. So start daemon with command - mysqld start and then try to start the service.


I had the same error message and the same emptyness in the log files. In my config-file (my.cnf) I had specified that I wanted to use myisam tables, by adding this line in the [mysqld]-section:

After upgrading mysql it seems this causes mysql not to start. I have changed this to:

and now everything works fine.

Increasing the available RAM by adding new Swap space might also help. Steps are here

Make sure that you create /swapfile of the size smaller than the available space shown by

For example for me output of df- h was:

So I created using 2 G

And then just start the service

Hope this helps. All the best.

Check if in all /etc/rc1.d . /etc/rc5.d the mysql script starts with S (Ex S10mysql) and not K AS K10mysql.

Explanation: K prefix loads with stop, kind of kill service; and S prefix starts with start parameter.


In my case, it was a space issue. Check if you have enough space left.

from /var/log/mysql/error.log I got some hints from two lines:

I could see that it is a space issue.

From here, I could see that there was not enough space left on the virtual server /dev/mapper/server1--osticket--vg-root 8.3G 7.9G 0 100% / . And I thought on either migrating or increasing the virtual drive, but I decided to remove unnecessary files first.

So, had to clean up cache and files that were not needed:

Then, do not forget to remove the mysql corrupted log files afterwards. They would be generated again when you restart mysql

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

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

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

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

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

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

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

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

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

/usr/sbin/mysqld --help --verbose

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

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

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

sudo systemctl stop mariadb

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

sudo mv /var/lib/mysql/ib_logfile0
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 -u root --auto-repair --all-databases

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

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

sudo systemctl restart mariadb

Выводы

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 есть возможность создавать учётные записи, позволяющие пользователям клиентских программ подключаться к серверу и получать доступ к данным. Поэтому при ошибке доступа проверьте разрешение УЗ на подключение к серверу через клиентскую программу.

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

Дать привилегии конкретному пользователю в БД по 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 во время выполнения других процессов откройте окно командной строки и введите следующее:

Заключение

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

Статья давно не обновлялась, поэтому информация могла устареть.

Содержание

На корректно работающем VDS создание базы займет не больше 5 минут. В левом меню ISPmanager находим раздел "Базы данных" - Создать - заполнить необходимые поля - пароли рекомендуем создавать сложные.

Теперь немного о тех местах, где могут возникнуть сложности.

Раздела "Базы данных" нет в меню

Есть 2 возможных варианта и пути решения проблемы:

1)На сервере не запущен сервер баз данных MySQL:

  1. Проверить, активен ли сервис, вы можете в меню "Сервисы" панели ISPmanager. Попробуйте запустить или перезапустить его с помощью кнопок в панели.
  2. Если не помогло, перезапустите из консоли командой /etc/init.d/mysql restart для Ubuntu/Debian/Centos 6 или командой systemctl restart mariadb для Centos 7.

2) Проблемы с подключением к базе данных: Откройте пункт меню "Серверы баз данных", двойным кликом откройте свойства и нажмите "OK", ничего не меняя. Это принудительно обновит информацию о MySQL в панели управления. После этого обновите страницу - пункт "Базы данных" должен появиться.

Случается так, что пароль root от MySQL-сервера утерян, и надо установить новый. Делается следующим образом:

В Centos 6/Debian/Ubuntu:

Запускаем его без проверки таблиц прав:

Заходим root’ом без пароля:

Продолжаем для всех версий

В Centos 6/Debian/Ubuntu:

Авторизуемся как root с паролем new_password

MySQL - свободная реляционная система управления базами данных. Поиск проблем с сервисом лучше всего начинать с изучения логов. Для этого необходимо подключиться на сервер по ssh Их расположение разнится в зависимости от используемой файловой системы. В конфигурационном файле my.cnf нужно искать строки log и log-error, чтобы определить, где находятся логи. Также можно воспользоваться mysql запросом:

Если логирование не включено, сделать это можно следующим образом: Зайти в файл:

И в секцию [mysqld] добавить строку:

Выйти из файла, выполнить команды:

Следующая команда включит просмотр созданного лога в режиме реального времени(tail –f) и оставить его в фоне(&) что бы можно было параллельно запускать другие команды:

Перечень возможных проблем

Table './site/content' is marked as crashed and should be repaired

Если эта команда выдаёт ошибку, вставьте ключи раздельно

  • <USER> - имя пользователя базы данных, либо "root".
  • <PASSWORD> - заменить на пароль root от MySQL (его можно посмотреть в ISPmanager -> Настройки сервера -> Серверы баз данных -> двойной клик на MySQL)

Либо можно выполнить исправление конкретной базы данных

  • <USER> - имя пользователя базы данных, либо "root".
  • <PASSWORD> - заменить на пароль root от MySQL (его можно посмотреть в ISPmanager -> Настройки сервера -> Серверы баз данных -> двойной клик на MySQL)
  • <BD> - база данных, требуемая починки

mysql_connect() [function.mysql-connect]: Access denied for user 'user_xxx'@'localhost' (using password: YES)

Чаще всего связана с тем, что в настройках сайта указаны не верные данные(логин и/или пароль) для подключения к базе. Вариант решения: посмотреть в админ-панели сайта пользователь, пароль и название базы для подключения к базе. Зайти в ISPmanager -> настройки сервера -> кликнуть на базу, кликнуть на пользователя и в графу «Пароль» поставить пароль из админ-панели.

На сайте ошибка: Не удалось подключиться к базе данных

В зависимости от используемой CMS эта ошибка может по-разному выглядеть:

Подключится на сервер по SSH, выполнить:

Убедится что в ISPmanager, в разделе «Службы» лампочка mysqld горит.

В панели ISPmanager 5 нет пункта Базы данных

Это значит у вас в ISPmanager --- Серверы баз данных не создано ни одного сервера баз данных. Создайте

MySQL не запускается ни в сервисах, ни через консоль.

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

Проверить свободное место на диске.

Если не осталось места, удалить не нужные файлы.

Частая ситуация, когда логи сайтов разрастаются и места на диске свободного не остается, MySQL не может нормально работать(справедливо и для всех остальных сервисов – apache, exim и т.д.)

Снова пробуем перезапустить MySQL:

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

Смотрим записи с меткой [ERROR]. В логе выше, ошибка «Error while setting value '--read_buffer_size=256K' to 'sort_buffer_size'» означает, что в конфиге my.cnf не верно прописана директива 'sort_buffer_size. Этот случай приведен только для примера. В каждом конкретном случае – лог будет различаться. Ошибки могут быть самые разные. Дальнейшие действия зависят от конкретной ошибки и требуют детального разбирательства.

Решение проблем с кодировками MySQL

Чтобы решить проблему - достаточно понять логику работы. MySQL, начиная с версии 4.1, знает что такое кодировки и как с ними работать. Если до 4.0 он работал с байтами, то теперь он работает с символами.

MySQL написали шведы, поэтому кодировкой по умолчанию (сразу после установки) является latin1, а "сравнение" (последовательность букв, алфавит; влияет на сортировки) - latin1_swedish.

Итак, где кодировки указываются:

1. Кодировка конкретной базы/таблицы/столбца. Это кодировка, в которой MySQL будет хранить данные. Например, если у вас данные в cp1251, то будет большой ошибкой указывать для хранения кодировку latin1. В ней нет соответствий для русских символов, все они будут заменены на вопросы. Кодировка хранения можно задать, например, так:

Если кодировка не указана - будет использовано значение параметра default-character-set из файла /etc/my.cnf (либо latin1, если параметра нет). Кстати, именно этот параметр редактирует ISPmanager в свойствах сервера баз данных.

2. Кодировка соединения. Это кодировка, в которой клиент (скрипт пользователя, форум, mysql-клиент и т.д.) общается с MySQL. Когда клиент подсоединяется к серверу, тот ему сообщает значение параметра default-character-set. Таким образом, они договариваются о том, в какой кодировке они будут общаться. Кодировку общения можно изменить запросом (его лучше выполнять сразу после соединения с сервером):

Кстати, множество современных правильных скриптов именно это и делают.

Одна сложность: есть ряд кривых клиентов, которые всего этого не понимают и общаются в какой-то своей кодировке. Персонально для них можно написать в /etc/my.cnf, секцию [mysqld]:

Что это означает? Сразу после подсоединения любого клиента, MySQL выполнит запрос "set names utf8", как будто смену кодировки общения запросил сам клиент.

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

phpMyAdmin, mysqldump - обычные клиенты, на них действуют те же самые правила. Одно "но": на все PHP-скрипты (включая phpMyAdmin) действует default-character-set из секции [client] в my.cnf. Для mysqldump есть отдельная секция [mysqldump]. ISPmanager прописывает default-character-set во все секции.

Дамп базы - это обычный набор MySQL-команд. Если вы в самое его начало напишете "set names cp1251;", то эта команда тоже выполнится и MySQL будет считать, что дальше все данные в дампе идут в кодировке cp1251.

Кодировки в MySQL-командах пишутся без кавычек и без "-" (дефисов). Популярные в России кодировки: utf8, cp866 (DOS), cp1251 (windows-1251), koi8r.

И, наконец, пара советов:

  • Если вы в этом новичок, постарайтесь свести всё к одной кодировке. Пусть у вас дамп и "default-character-set" (напомню, влияет на кодировку хранилища при создании таблиц и на кодировку общения с клиентом) будет в одной кодировке. Это избавит от путаницы и решит 90% проблем.
  • Если есть возможность - используйте консольную утилиту mysqldump. phpMyAdmin - это дополнительная прослойка, которая лишь добавляет свою путаницу и свои баги.

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

1. В файле /etc/my.cnf добавьте следующие строчки:

1.1. Под разделом [client]

1.2. Под разделом [mysqld]

После этого перезапустите базу MySQL или весь ваш виртуальный сервер (из ISPmanager или консоль).

Читайте также: