我试图在单个服务器上设置多个MySQL数据库实例,并得到一些非常奇怪的结果。 我可以获得不同的实例,运行,在不同的端口上侦听,使用不同的.cnf文件,使用不同的数据传输等。据我所知,我有两个独立的,独立的实例。 下面是我运行“ps aux | grep mysql”的副本。
root 2827 0.0 0.0 2592 1140 pts/1 T 14:30 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf mysql 2858 0.0 1.0 119692 18312 pts/1 Sl 14:30 0:00 /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock root 2887 0.0 0.0 2592 1140 pts/1 T 14:34 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my2.cnf mysql 2921 0.0 1.0 119492 17596 pts/1 Sl 14:34 0:00 /usr/libexec/mysqld --defaults-file=/etc/my2.cnf --basedir=/usr --datadir=/var/lib/mysql2 --user=mysql --pid-file=/var/run/mysqld/mysqld2.pid --skip-external-locking --port=3307 --socket=/var/lib/mysql2/mysql2.sock
现在是奇怪的地方。 当我用Navicat远程login数据库时,我可以编辑数据库的内容,没有问题。 但是,当我运行一个脚本来访问不同dbs上的数据时,我得到一个表不存在的错误,因为脚本试图访问在端口3306上运行的第一个实例,即使我为第二个连接指定了端口3307资源。
我注意到的另一件事是,如果我SSH进入服务器住房的两个数据库实例,并使用mysql -u root --port=3306 -plogin到其中的一个,并执行像更改root用户的密码,根当我尝试连接使用mysql -u root --port=3307 -p时,密码已经改变;
我已经为此工作了几天,现在我完全被困住了。 我正在亚马逊AWS服务器上使用Fedora 8。 非常感激任何的帮助!
以下是my.cnf的内容:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock port=3306 user=mysql old_passwords=1 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
以下是my2.cnf的内容:
[mysqld] datadir=/var/lib/mysql2 socket=/var/lib/mysql2/mysql2.sock port=3307 user=mysql old_passwords=1 [mysqld_safe] log-error=/var/log/mysqld2.log pid-file=/var/run/mysqld/mysqld2.pid
要连接到端口3307上运行的mysql服务器,请使用:
$ mysql --socket=/var/lib/mysql2/mysql2.sock
--port只是改变TCP / IP端口号,但是当你通过套接字连接时,你需要给它另一个套接字名称。
问题是,当你运行mysql并且没有明确地指定一个除localhost以外的主机名(我build议使用本地机器的IP地址:127.0.0.1),所有的MySQL命令(包括mysql本身)将假定一个套接字连接。 你的–port参数被有效地忽略了,mysql客户端通过/var/lib/mysql/mysql.sock连接,如果是第一个实例的socket。
看一下这个:
$ mysql --host=localhost --port=3306 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
与:
$ mysql --host=127.0.0.1 --port=3306 ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)