我正在尝试在同一台服务器上并行安装 mysql 和 mariadb,每个服务都在不同的端口上。
我在基于 Debian 的发行版上使用 apt-get 安装了 mysql 服务器,然后安装了 mariadb本教程使用 mariadb 预编译二进制文件。
乍一看一切似乎都运行良好,因为:
A)执行“netstat -latun”后,我看到两个服务都在监听端口 3306 和 3307:
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
B)从远程主机,我可以通过 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 安装开始,我通过 apt-get 安装了 mariadb-server,它替换了 mysql 安装,并且无论是通过命令行还是通过任何 php cms 框架,一切都运行良好。
我认为某些地方仍然有对 mysql 的引用,特别是对其套接字文件的引用,因为通过命令行使用 --socket 选项可以使其每次都有效
此时我相信 apache 和 php 已经出现,但还不知道从哪里开始挖掘。
底线:
- 从远程主机 phpMyAdmin 和命令行与任一端口上的每个服务协同工作。
- 在服务器上,Apache 和 php 均未通过任何端口连接到 MariaDB
- 仅当给出了 --socket 选项时,才可以通过服务器上的命令行连接到 MariaDB。
当我研究此事时,有什么建议吗?
非常感谢。
答案1
找到了这个问题的部分解决方案
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 配置不变,当然端口除外。
这样,您可以在已有 mysql 安装的现有生产服务器上安装 mariadb。无需中断服务,您就可以从 mysql 导出数据库并将其导入 mariadb;此时,您可以更改 CMS(我的情况是 Joomla)配置以指向不同的端口,或者您可以如上所示覆盖 php.ini 并重新启动/重新加载 apache。
希望它能帮到大家!它拯救了我一天 :-)