centos: Ще один демон MySQL, який вже працює з тим же сокетом unix


77

У мене є дивна помилка під час запуску служби mysqld:

Another MySQL daemon already running with the same unix socket.

Я намагався перерахувати запущені служби та зупинити їх, але та сама помилка трапляється під час запуску служби mysqld.

Я можу спробувати видалити mysqld і перевстановити його, але це також видалить базу даних?

Відповіді:


228

Щоб уникнути проблеми, потрібно виконати витончене вимкнення сервера з командного рядка, а не вимикати його.

# вимкнення - h зараз

Це зупинить роботу служб перед вимкненням машини.

Заснований на Centos, додатковим методом відновлення його знову при виникненні цієї проблеми є переміщення mysql.sock:

# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

# service mysqld start

Перезапуск служби створює новий запис, який називається mqsql.sock


5
Друга рекомендація вище працювала для мене. Напевно, це сталося тому, що я не вимкнув сервер елегантно. Виконання # rebootне вирішило проблему. Ніколи не пробувавshutdown -h now
п'ятниця

5
"shutdown -h now" і завантаження не вирішило це для мене, але опція "CentOS" спрацювала як шарм.
PJ Brunet

2
Виконайте # mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bakтоді, # shutdown -h nowі він повинен підійти нормально.
Michael Stramel

Переміщення файлу sock також спрацювало у мене. Велике питання у мене - як це сталося. Я ніколи раніше не бачив цієї проблеми.
sstringer

Хтось знає, як могла виникнути ця проблема?
axiom82

19

TL; DR:

Запустіть це як root, і все буде готово:

rm $(grep socket /etc/my.cnf | cut -d= -f2)  && service mysqld start

Довша версія:

Ви можете знайти місце розташування файлу сокета MySQL, натискаючи вручну /etc/my.confабо просто використовуючи

grep socket /etc/my.cnf | cut -d= -f2

Ймовірно, це буде /var/lib/mysql/mysql.sock. Потім (як root, звичайно, або з попередньо sudoдоданим) видаліть цей файл:

rm /var/lib/mysql/mysql.sock

Потім запустіть демон MySQL:

service mysqld start

Видалення mysqldне вирішить проблему взагалі. Проблема в тому, що CentOS і RedHat не очищають sockфайл після аварійного завершення роботи, тому вам доведеться зробити це самостійно. Уникати вимкнення системи також рекомендується (звичайно), але іноді ви не можете уникнути цього, тому ця процедура вирішить проблему.


cut -d= -f2Біт може здатися неправильним, тому що ви очікували б , що значення , яке має з'явитися після =знака, але = це значення передається -dваріант: іншими словами, =використовується в якості роздільника cut.
іконоборці

Якщо ви користуєтеся Ubuntu, спробуйте замінити /etc/my.cnfна /etc/mysql/my.cnf.
іконоборці

Я б запропонував записати щось більш конкретне, ніж будь-який рядок, що містить слово socket , принаймні grep '^socket[[:space:]]=' /etc/my.cnf, або ви можете в кінцевому підсумку видалити те, що не мали наміру.
Белі,

4

У цій проблемі я знайшов рішення для кожного, хто змінює каталог сокета на нове місце у файлі my.cnf

socket=/var/lib/mysql/mysql2.sock

і service mysqld start

або швидкий спосіб, як відповів GeckoSEO

# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

# service mysqld start

8
Я просто видалив файл mysql.sock, а потім перезапустив службу.
Уілл Морган

3

Моїм рішенням цього стало залишення mysql.sock в каталозі / var / lib / mysql / після жорсткого вимкнення. Mysql думав, що він вже працює, коли він не працює.


так, ви праві, я зробив вимкнення системи, тоді ця проблема виникає, тому у вас є рішення, коли я запускаю сервер, щоб не показувати цю помилку
Mas

2

Просто відкрийте звіт про помилку у постачальника вашої ОС з проханням помістити сокет у / var / run, щоб він автоматично видалявся при перезавантаженні. Зберігати цей сокет після нечистого перезавантаження - помилка, / var / run - місце для таких типів файлів.


1

для автоматичного очищення .sock-файлу розмістіть ці рядки у файлі /etc/init.d/mysqld відразу після блоку коду "start)"

test -e /var/lib/mysql/mysql.sock
SOCKEXIST=$?

ps cax | grep mysqld_safe
NOPIDMYSQL=$?

echo NOPIDMYSQL $NOPIDMYSQL
echo SOCKEXIST $SOCKEXIST

if [ $NOPIDMYSQL -eq 1 ] && [ $SOCKEXIST -eq 0 ] ; then
    echo "NOT CLEAN"
    rm -f /var/lib/mysql/mysql.sock
    echo "FILE SOCK REMOVED"
else
    echo "CLEAN"
fi

це спрацювало для мене. Мені довелося це зробити, оскільки у мене немає ДБЖ, і часто у нас виникають збої в живленні.

з повагою.


Вищевказаний шлях, оскільки поза нашим контролем трапляється, що живлення відключається, а ДБЖ через деякий час гине. Отже, сервер повинен відновитись. У мене ця проблема на установці mysql 5.7 (centos 6), але не на 5.1 (centos 5). У мене немає часу дослідити, що не так із першим, тому я просто покращу цю відповідь і використовую її. test -e $ socketfile if [$? -eq 0]; потім
січня

схоже, на приготування
пастебіну у

1

Це може трапитися коли-небудь, коли служба MySQL не вимикається належним чином під час перезавантаження ОС. /Var/lib/mysql/mysql.sock залишено. Це запобігає запуску 'mysqld'.

Ці кроки можуть допомогти:

1: служба mysqld start killall -9 mysqld_safe служба mysqld mysqld start

2: rm /var/lib/mysql/mysql.sock служба mysqld start


0

Щоб запустити службу MySQL, ви можете видалити '/var/lib/mysql/mysql.sock' і знову запустити службу MySQL:

Видаліть файл сокета:

[root@server ~]# rm /var/lib/mysql/mysql.sock
rm: remove socket `/var/lib/mysql/mysql.sock'? yes

Запустіть службу MySQL:

[root@server~]# service mysqld start
Starting mysqld:                                           [  OK  ]

Це допоможе вам вирішити вашу проблему.


0

Це сталося просто через ненормальне припинення служби mysql. видалити або зробити резервну копію файлу /var/lib/mysql/mysql.sock і перезапустити mysql.

Будь ласка, дайте мені знати, якщо виникне проблема ..


-1

Я щойно пройшов це питання, і жодна з пропозицій не вирішила моєї проблеми. Хоча я не зміг запустити MySQL під час завантаження і знайшов те саме повідомлення в журналах ("Ще один демон MySQL, який вже працює з тим же сокетом unix"), я зміг запустити службу, як тільки прибув на консоль.

У моєму файлі конфігурації, я знайшов наступний рядок: bind-address=xx.x.x.x. Я випадково вирішив це прокоментувати, і помилка при завантаженні зникла. Оскільки адреса прив'язки забезпечує безпеку, я певним чином вирішив її дослідити. Я використовував IP-адресу машини, а не адресу зворотного зв'язку IPv4 - 127.0.0.1.

Коротше кажучи, використовуючи 127.0.0.1як bind-address, я зміг виправити цю помилку. Сподіваюся, це допоможе тим, хто має цю проблему, але не може її вирішити, використовуючи відповіді, детально описані вище.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.