Я пытаюсь установить mysql и mariadb на одном сервере в качестве параллельной установки, каждая служба на другом порту.
Я установил сервер mysql, используя apt-get в дистрибутиве на основе debian, а затем mariadb, следуя этот учебник используя предварительно скомпилированные двоичные файлы mariadb.
На первый взгляд все работает нормально, потому что:
A) Я вижу, что обе службы прослушивают порты 3306 и 3307 после выполнения "netstat -latun":
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
Б) С удаленного хоста я могу подключиться к обеим службам через phpMyAdmin и через командную строку и выполнять запросы:
MySQL: mysql -u root -pmypassword -h x.x.x.x --port 3306
MariaDB: mysql -u root -pmypassword -h x.x.x.x --port 3307
C) На сервере я могу успешно подключаться к обеим консолям и выполнять запросы, используя:
MySQL: mysql -u root -pmypassword --port 3306
MariaDB: mysql -u root -pmypassword --socket=/opt/mariadb-data/mariadb.sock
Что не работает
Невозможно подключиться так:
/opt/mariadb/bin/mysql -u root -pmypassword --port 3307
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2 "No such file or directory")
Вместо этого подключается к порту 3306:
/usr/bin/mysql -u root -pmypassword --port 3307
Я считаю, что из-за предыдущих ошибок моя установка Joomla работает только тогда, когда mysql запущен на порту 3306 или 3307.
Когда на любом из портов запущена только MariaDB, Joomla отображает:
Database connection error (2): Could not connect to MySQL.Database connection error (2): Could not connect to MySQL.
и командная строка:
# /usr/bin/mysql -u root -pmypassword
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
# /opt/mariadb/bin/mysql -u root -pmypassword
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2 "No such file or directory")
Когда MariaDB работает, я все еще могу подключиться через phpMyAdmin и командную строку с удаленного хоста или через командную строку на сервере с помощью параметра --socket.
Однако я должен заметить, что во время предыдущих тестов, начиная с установки mysql, я установил mariadb-server через apt-get, и он заменил установку mysql, и все работало нормально либо через командную строку, либо через любую структуру php cms, если на то пошло.
Я думаю, что где-то еще есть ссылки на mysql, в частности, на его файл сокета, потому что использование опции --socket через командную строку заставляет его работать каждый раз
На данный момент я считаю, что apache и php вступают в игру, но пока не знаю, куда копать.
Нижняя граница:
Пока я исследую этот вопрос, есть ли какие-нибудь предложения?
Большое спасибо.
Нашел частичное решение этой проблемы
Apache, PHP и, следовательно, другие CMS теперь могут нормально подключаться.
Отредактируйте файл /etc/php5/apache5/php.ini и, в зависимости от того, какой драйвер вы использовали (mysql или mysqli), установите соответствующие переменные для использования файла сокета, используемого MariaDB:
mysql.default_socket =/opt/mariadb-data/mariadb.sock
или
mysqli.default_socket =/opt/mariadb-data/mariadb.sock
Итак, для удобства у вас должно быть три файла php.ini:
php.ini, php.ini.mysql,php.ini.mariadb
и перезапишите php.ini одним из двух других файлов, если вы планируете использовать соответствующую службу базы данных и перезапустить apache. Теперь вы можете оставить конфигурацию CMS нетронутой, за исключением, конечно, портов.
Таким образом, вы можете установить mariadb на существующий производственный сервер с уже существующей установкой mysql. Без отключения службы вы можете экспортировать базы данных из mysql и импортировать их в mariadb; на этом этапе вы либо меняете конфигурацию CMS (Joomla в моем случае), чтобы указывать на другой порт, либо перезаписываете php.ini, как показано выше, и перезапускаете / перезагружаете apache.
Надеюсь, это поможет банде! Это спасло мне день :-)