mysql не запускается при запуске debian (systemd), но запуск вручную работает

у меня странная проблема с MySQL на сервере Debian (Jessie).

когда сервер перезапущен, systemd попытается запустить mysqld, но это отказывает (похоже, что порт 3306 уже используется, но я не понимаю, почему это было бы).

однако, если я SSH на сервер только через несколько минут и запустить sudo systemctl start mysql все получится.

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

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

вот и результат sudo systemctl status mysql -l после перезагрузки:

● mysql.service - LSB: Start and stop the mysql database server daemon
   Loaded: loaded (/etc/init.d/mysql)
   Active: failed (Result: exit-code) since Fri 2017-09-01 21:54:44 CEST; 1min 41s ago
  Process: 581 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)

Sep 01 21:54:06 gimli systemd[1]: Starting LSB: Start and stop the mysql database server daemon...
Sep 01 21:54:44 gimli mysql[581]: Starting MySQL database server: mysqld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . failed!
Sep 01 21:54:44 gimli systemd[1]: mysql.service: control process exited, code=exited status=1
Sep 01 21:54:44 gimli systemd[1]: Failed to start LSB: Start and stop the mysql database server daemon.
Sep 01 21:54:44 gimli systemd[1]: Unit mysql.service entered failed state.

и соответствующий лог из /var/log/mysql/error.log

170901 21:54:16 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
170901 21:54:16 [Note] Plugin 'FEDERATED' is disabled.
170901 21:54:17 InnoDB: The InnoDB memory heap is disabled
170901 21:54:17 InnoDB: Mutexes and rw_locks use GCC atomic builtins
170901 21:54:17 InnoDB: Compressed tables use zlib 1.2.8
170901 21:54:17 InnoDB: Using Linux native AIO
170901 21:54:17 InnoDB: Initializing buffer pool, size = 128.0M
170901 21:54:17 InnoDB: Completed initialization of buffer pool
170901 21:54:17 InnoDB: highest supported file format is Barracuda.
170901 21:54:22  InnoDB: Waiting for the background threads to start
170901 21:54:23 InnoDB: 5.5.57 started; log sequence number 351234412
170901 21:54:23 [Note] Server hostname (bind-address): '192.168.1.14'; port: 3306
170901 21:54:23 [Note]   - '192.168.1.14' resolves to '192.168.1.14';
170901 21:54:23 [Note] Server socket created on IP: '192.168.1.14'.
170901 21:54:23 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
170901 21:54:23 [ERROR] Do you already have another mysqld server running on port: 3306 ?
170901 21:54:23 [ERROR] Aborting

170901 21:54:23  InnoDB: Starting shutdown...
170901 21:54:24  InnoDB: Shutdown completed; log sequence number 351234412
170901 21:54:24 [Note] /usr/sbin/mysqld: Shutdown complete

однако, если я запускаю sudo systemctl start mysql вручную, работает корректно:

170901 22:01:36 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
170901 22:01:36 [Note] Plugin 'FEDERATED' is disabled.
170901 22:01:36 InnoDB: The InnoDB memory heap is disabled
170901 22:01:36 InnoDB: Mutexes and rw_locks use GCC atomic builtins
170901 22:01:36 InnoDB: Compressed tables use zlib 1.2.8
170901 22:01:36 InnoDB: Using Linux native AIO
170901 22:01:36 InnoDB: Initializing buffer pool, size = 128.0M
170901 22:01:36 InnoDB: Completed initialization of buffer pool
170901 22:01:36 InnoDB: highest supported file format is Barracuda.
170901 22:01:36  InnoDB: Waiting for the background threads to start
170901 22:01:37 InnoDB: 5.5.57 started; log sequence number 351234412
170901 22:01:37 [Note] Server hostname (bind-address): '192.168.1.14'; port: 3306
170901 22:01:37 [Note]   - '192.168.1.14' resolves to '192.168.1.14';
170901 22:01:37 [Note] Server socket created on IP: '192.168.1.14'.
170901 22:01:37 [Note] Event Scheduler: Loaded 0 events
170901 22:01:37 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.57-0+deb8u1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Debian)

насколько мне известно, сценарий systemd не был изменен (это тот это поставляется с пакетом Debian mysql), и, насколько я знаю, он никогда не работал правильно. Порт 3306 не должен использоваться другим процессом.

14
задан Oxfist
16.01.2023 9:36 Количество просмотров материала 3132
Распечатать страницу

2 ответа

попробуйте SSH в сервер сразу после перезагрузки и запуска netstat -lp | grep 3306 как root, чтобы проверить, какая программа на самом деле слушает этот порт, чтобы вы могли дополнительно отладить проблему.

2
отвечен Oxfist 2023-01-17 17:24

по-видимому, проблема заключалась в том, что сетевой интерфейс не был запущен во время запуска mysql. Это, вероятно, связано с DHCP занимает немного времени.

по крайней мере, теперь, когда я установил интерфейс на статический IP, я больше не наблюдаю проблему mysql (опять же, воспроизводимую при каждом запуске), так что проблема решена.

вот процедура установки статического IP в debian:

  1. убедитесь, что у вас есть физический доступ к серверу (кнопка питания , клавиатура, экран), прежде чем пытаться возиться с сетью, так как вы можете потерять способность ssh
  2. редактировать /etc / network / interfaces
  3. заменить iface eth0 inet dhcp by:

    iface eth0 inet static
        address 192.168.1.14
        network 192.168.1.0
        netmask 255.255.255.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
    
  4. reboot (Примечание: перезагрузки сети должно быть достаточно, например, с systemctl restart networking, но в моем случае я потерял соединение, но не мог подключиться без перезагрузки сервера с помощью кнопки питания)

в данном примере я назначаю статический IP 192.168.1.14 и шлюз 192.168.1.1

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

2
отвечен youen 2023-01-17 19:41

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх