mysqld_safe Каталог '/ var / run / mysqld' для файла сокета UNIX не существует

197

При запуске сервера mysql 5.7.17 с использованием mysqld_safe возникает ошибка occcours.

2017-02-10T17:05:44.870970Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-10T17:05:44.872874Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-10T17:05:44.874547Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

Как это исправить?

Раджадип
источник

Ответы:

543

Кажется странным, что этот каталог не был создан при установке - вы вручную изменили путь к файлу сокета в my.cfg?

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

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
Мэтт Кларк
источник
2
Нет, я не вносил никаких изменений вручную. Я попробую создать каталог. Спасибо за предложения
Раджадип
17
Это происходит на mysql 5.7. Когда вы останавливаете службу mysql, / var / run / mysqld удаляется и воссоздается при повторном запуске службы.
Capy
3
Пришлось использовать sudo для обоих
Касун Раджапакша
1
@Capy - проголосовали за - @Matt Clark - вы любезно отредактируете свой ответ, включив в него информацию о том, что, хотя DIR мог быть создан, но он будет удален, если мы запустим - $ sudo /etc/init.d/mysql stopспасибо
Rohit
если вы по-прежнему получаете ту же ошибку после этих шагов, ПРИМЕЧАНИЕ, sudoэто решит эту проблему, поскольку этот каталог будет удален после mysqlостановки и без sudoнего не будет доступа к этим папкам !!!
Jadeye
79

Когда я использовал код, mysqld_safe --skip-grant-tables &но получаю сообщение об ошибке:

mysqld_safe Каталог '/ var / run / mysqld' для файла сокета UNIX не существует.

$ systemctl stop  mysql.service
$ ps -eaf|grep mysql
$ mysqld_safe --skip-grant-tables &

Я решил:

$ mkdir -p /var/run/mysqld
$ chown mysql:mysql /var/run/mysqld

Теперь я использую тот же код mysqld_safe --skip-grant-tables &и получаю

mysqld_safe Запуск демона mysqld с базами данных из / var / lib / mysql

Если я воспользуюсь, $ mysql -u rootя получу:

Версия сервера: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)

Авторское право (c) 2000, 2017, Oracle и / или ее дочерние компании. Все права защищены.

Oracle является зарегистрированным товарным знаком Oracle Corporation и / или ее дочерних компаний. Другие наименования могут быть торговыми марками их владельцев.

Введите "помощь"; или '\ h' для помощи. Введите '\ c', чтобы очистить текущий оператор ввода.

mysql>

Теперь пора сменить пароль:

mysql> use mysql
mysql> describe user;

Чтение информации таблицы для завершения имен таблиц и столбцов. Вы можете отключить эту функцию, чтобы ускорить запуск, с помощью -A.

База данных изменена

mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('newpwd');

или Если у вас есть учетная запись root mysql, которая может подключаться отовсюду, вам также следует сделать:

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

Альтернативный метод:

   USE mysql
   UPDATE user SET Password = PASSWORD('newpwd')
   WHERE Host = 'localhost' AND User = 'root';

И если у вас есть учетная запись root, к которой можно получить доступ отовсюду:

 USE mysql
 UPDATE user SET Password = PASSWORD('newpwd')
 WHERE Host = '%' AND User = 'root';`enter code here

теперь нужно quitиз mysql и остановить / запустить

FLUSH PRIVILEGES;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

теперь снова `mysql -u root -p 'и используйте новый пароль, чтобы получить

mysql>

Партха Сен
источник
10
начиная с MySQL 5.7.6 столбец пароля был переименован в «authentication_string». Здесь вы можете узнать больше об этом: bugs.mysql.com/bug.php?id=76655
IberoMedia
ЭТО ЕДИНСТВЕННЫЙ исчерпывающий ответ, который я нашел, который работает с версией 8.0.X
Native Coder
Я беру это обратно. Каждый заданный вами параметр запроса вызывает синтаксическую ошибку. Но, по крайней мере, на этот раз я получил mysqld_safe ...
Native Coder
6

Работайте у меня в CentOS:

$ service mysql stop
$ mysqld --skip-grant-tables &
$ mysql -u root mysql

mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

$ service mysql restart
Хели Перес
источник
привет, я столкнулся с этой дерьмовой ошибкой при изменении пароля пользователя: ОШИБКА 1819 (HY000): Ваш пароль не удовлетворяет требованиям текущей политики, просто проверьте, соответствует ли его средний уровень безопасности: ПОКАЗАТЬ ПЕРЕМЕННЫЕ LIKE 'validate_password%'; затем попробуйте эту комбинацию паролей: создайте пользователя 'root' @ 'localhost' с именем 'Password123 # @!'; для удаления уровня безопасности попробуйте следующее: SET GLOBAL validate_password.policy = 0; и проверьте, установлена ​​ли безопасность в 0: ПОКАЗАТЬ ПЕРЕМЕННЫЕ, КАК 'validate_password%'; вы также можете установить безопасность на «низкий» или «высокий»
Seetpal Singh
0

Вы можете попробовать следующее, если в вашей базе данных нет данных ИЛИ у вас есть другой, чтобы восстановить эти данные. Вам нужно будет знать пароль root сервера Ubuntu, но не пароль root mysql.

Весьма вероятно, что многие из нас установили mysql_secure_installation, так как это лучшая практика. Перейдите в каталог bin, в котором существует mysql_secure_installation. Его можно найти в каталоге / bin в системах Ubuntu. При повторном запуске установщика вам будет предложено изменить пароль корневой базы данных.

Дэвид Болдуин
источник
Но я думаю, что это использовать только безопасный сервер mysql. Не так ли? Это не имеет значения в этой проблеме.
Rajadip 01
Это не поможет, если вы забыли пароль root, так как сначала вы должны ввести текущий пароль.
Jistanidiot