Вопрос или проблема
Запись
Я изучил другие сообщения об этой ошибке, но они мне не помогли. Поэтому я собираюсь описать свою проблему здесь.
Запуск MariaDB
Согласно этому руководству по установке WordPress на сервере Ubuntu 22.04.5 LTS я установил MariaDB и запустил его:
sudo systemctl restart mariadb.service
Выдает ошибку сбоев. Затем sudo journalctl -xeu mariadb.service
показывает:
/usr/sbin/mariadbd: /usr/local/lib/libstdc++.so.6: версия `GLIBCXX_3.4.30′ не найдена
Но GLIBCXX_3.4.30
доступен
Вдохновившись этой записью:
https://askubuntu.com/a/1458100/507217
Я запустил strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
и получил:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBCXX_3.4.30
GLIBCXX_DEBUG_MESSAGE_LENGTH
Так что GLIBCXX_3.4.30
на самом деле доступен.
Я запустил ls -la /usr/lib/x86_64-linux-gnu/libstdc++.so.6
и получил:
/usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.30
Вопрос
Все выглядит нормально. Так в чем проблема?
Я ожидал, что установка и запуск MariaDB будут намного легче 🙁
Расследование
Получив некоторые подсказки от AI-чат-ботов, я заметил, что MariaDL загружает /usr/local/lib/libstdc++.so.6
, поэтому я сделал:
ls -lh /usr/local/lib/libstdc++.so.6
И я получил эту символическую ссылку на более старую версию:
/usr/local/lib/libstdc++.so.6 -> libstdc++.so.6.0.29
Решение
Мне пришлось форсировать обновление символической ссылки на более новую версию:
sudo ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/lib/libstdc++.so.6
Я не уверен, приведет ли это форсированное обновление к сбоям в чем-то еще на сервере 🙁
Ответ или решение
Проблема с запуском MariaDB: версия GLIBCXX_3.4.30
не найдена
Введение
Вы столкнулись с проблемой при запуске MariaDB на сервере с Ubuntu 22.04.5 LTS. Ошибка, указывающая на то, что версия GLIBCXX_3.4.30
не найдена в библиотеке libstdc++.so.6
, приводит к необходимости глубже изучить взаимодействие между установленными библиотеками. Данная статья поможет вам понять проблему и предложить подходящее решение.
Что происходит?
При попытке перезапустить службу MariaDB с помощью команды:
sudo systemctl restart mariadb.service
вы получаете сообщение об ошибке, указывающее на отсутствие нужной версии библиотеки:
/usr/sbin/mariadbd: /usr/local/lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found
Это указывает на то, что программа mariadbd
пытается загрузить библиотеку libstdc++.so.6
из директории /usr/local/lib
, и именно эта версия не содержит нужной для работы MariaDB версии GLIBCXX_3.4.30
.
Почему возникает ошибка?
-
Конфликт библиотек: У вас установлено две различные версии
libstdc++.so.6
– одна в системной директории (/usr/lib/x86_64-linux-gnu/
), которая соответствует необходимым требованиям, и другая в локальной директории (/usr/local/lib/
), которая ссылается на более старую версию (libstdc++.so.6.0.29
). -
Приоритет загрузки: При запуске MariaDB система сначала ищет библиотеку в директорий
/usr/local/lib
, которая имеет приоритет. Если там находится устаревшая версия, это и становится причиной ошибки.
Решение проблемы
Вы правильно заметили, что необходимо обновить символическую ссылку на библиотеку в локальной директории. Ваше решение с использованием команды:
sudo ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/lib/libstdc++.so.6
позволит указать правильную версию библиотеки, что решит проблему с GLIBCXX_3.4.30
.
Но стоит ли это делать?
Несмотря на то, что ваш подход с обновлением символической ссылки является временным решением, стоит учесть несколько моментов:
-
Совместимость: Проверяйте, что другие приложения, используемые на сервере, также совместимы с новой версией
libstdc++
. Некоторые приложения могут зависеть от старых версий библиотек, и изменение символической ссылки может привести к их нестабильной работе. -
Проверка зависимостей: Регулярно проверяйте установленные библиотеки и их зависимости. Часто использование графических интерфейсов для управления библиотеками может помочь избежать подобных проблем в будущем.
-
Бэкапы: Перед внесением изменений в системные файлы, всегда полезно создавать резервные копии. Это поможет в случае, если что-то пойдет не так.
Заключение
Проблема, с которой вы столкнулись, связана с конфликтом между версиями библиотек. Обновление символической ссылки на более новую версию libstdc++
является адекватным решением на текущий момент. Однако стоит учитывать возможность возникновения конфликтов с другими программами. Регулярная проверка совместимости и зависимостей приложений поможет избежать таких ситуаций в дальнейшем.