Bug #15327 | configure: --with-tcp-port option being partially ignored | ||
---|---|---|---|
Submitted: | 29 Nov 2005 20:23 | Modified: | 23 Oct 2007 0:11 |
Reporter: | Paul DuBois | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Compiling | Severity: | S2 (Serious) |
Version: | 5.0/5.1 | OS: | Linux (linux) |
Assigned to: | Tatiana Azundris Nuernberg | CPU Architecture: | Any |
Tags: | bfsm_2007_07_19 |
[29 Nov 2005 20:23]
Paul DuBois
[19 May 2006 12:22]
Jiri Kaderavek
I confirm this bug in the case of mysql command line utility (don't tried another tools). Additionaly, you must specify --protocol-tcp option to mysql command utility to be able to connect to other localhost port then default. This bug is very confusing as it's possible, that you modify the data on inappropriate database server.
[19 May 2006 12:23]
Jiri Kaderavek
Correction --protocol=tcp
[22 Sep 2006 15:05]
Paul DuBois
Further information: The bug affects the server as well, and for clients it is not just cosmetic (that is, when clients display a port value 0 for --help output, that's not just a display problem; clients really do use 3306, not the configured-in --with-tcp-port value). You can demonstrate the problem as follows. Suppose I configure MySQL 5.1.12 using --with-tcp-port=50112. What I expect to happen is this: - mysqld should listen on port 50112 by default - client programs should connect to the server using port 50112 by default. - Instance Manager, if it starts a default ([mysqld]) server, should monitor that server by connecting to port 50112 by default. None of that happens now, due to the problem described in Bug#15327. What happens is that the server listens on 3306, clients connect to 3306, and IM also thinks it should connect to the server on 3306. If you run the server with no options, it listens on 3306, and the clients connect to it using 3306. If you explicitly configure with server at runtime with --port=50112 to use the port that *should* have been configured in, trying to connect with a client fails. (Unless you happen to have another server listening on 3306; then the 5.1.12 client connects to that server, which is not what should happen.) The bug also affects Instance Manager, which thinks the default port is 3306, not 50112. Currentl, due to the bug, IM connects to 3306 by default, which is indeed what the server is listening to by default. But that's not what *should* happen. Suppose you have a production server for some other version that uses 3306, and then you configure a 5.1.12 distribution as described above to use for testing. The newly configured distribution should use 50112 by default, but it uses 3306, causing a mess. The bug just makes it more difficult than it should be to run MySQL for lots of different versions simultaneously on the same machine. The basedir can be configured differently, and it is respected. The socket file can be configured differently, and it is respect. The TCP/IP port number can be configured differently, but it is NOT respected. This used to work before 5.0.12. Please make it work again. The problem was already bad; it's becoming worse with recent changes (in 5.1.12) that allow Instance Manager to start and monitor a default instance: The server *and* Instance Manager both use the wrong default server port now. Changing category from Command-line clients to Server: Compiling, because it's also a server problem.
[25 May 2007 15:38]
Paul DuBois
I have changed the synopsis to note that the bug affects the server and not just clients. Also, another observation: master-port and report-port do pick up the value of the --with-tcp-port option. It's only port that is affected, and does not use the correct value.
[8 Jul 2007 16:46]
Mark Leith
Further checking shows that this is because mysqld is choosing to run on the port specified within /etc/services, rather than the port set within mysql_version.h. If I set the port number to 13306 within /etc/services: [markleith@medusa:~/mysql/mysql-5.0-newport] $ 070708 17:24:17 [Warning] Setting lower_case_table_names=2 because file system for /Users/markleith/mysql/mysql-5.0-newport/var/ is case insensitive 070708 17:24:17 [Warning] No argument was provided to --log-bin, and --log-bin-index was not used; so replication may break when this MySQL server acts as a master and has his hostname changed!! Please use '--log-bin=/Users/markleith/mysql/mysql-5.0-newport/var/medusa-bin' to avoid this problem. 070708 17:24:17 InnoDB: Started; log sequence number 0 43655 070708 17:24:17 [Note] Recovering after a crash using /Users/markleith/mysql/mysql-5.0-newport/var/medusa-bin 070708 17:24:17 [Note] Starting crash recovery... 070708 17:24:17 [Note] Crash recovery finished. 070708 17:24:17 [Note] ./libexec/mysqld: ready for connections. Version: '5.0.46-log' socket: '/tmp/mysql.sock' port: 13306 Source distribution Within mysqld.cc: static void set_ports() { char *env; if (!mysqld_port && !opt_disable_networking) { // Get port if not from commandline struct servent *serv_ptr; mysqld_port= MYSQL_PORT; if ((serv_ptr= getservbyname("mysql", "tcp"))) mysqld_port= ntohs((u_short) serv_ptr->s_port); /* purecov: inspected */ if ((env = getenv("MYSQL_TCP_PORT"))) mysqld_port= (uint) atoi(env); /* purecov: inspected */ } if (!mysqld_unix_port) { #ifdef __WIN__ mysqld_unix_port= (char*) MYSQL_NAMEDPIPE; #else mysqld_unix_port= (char*) MYSQL_UNIX_ADDR; #endif if ((env = getenv("MYSQL_UNIX_PORT"))) mysqld_unix_port= env; /* purecov: inspected */ } } This looks to me as if it is actually overriding the port within mysql_version.h, i.e that set here: mysqld_port= MYSQL_PORT; With the call to getservbyname().
[8 Aug 2007 15:31]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/32255 ChangeSet@1.2476, 2007-08-08 17:34:55+02:00, tnurnberg@sin.intern.azundris.com +16 -0 Bug #15327: configure: --with-tcp-port option being partially ignored initialize default tcp port for client and server, like so: - if user configured --with-tcp-port, use that value as default - other assume "use a good default": search mysqld/tcp in /etc/services; if that doesn't exist, use factory default (3306) - environment variable MYSQL_TCP_PORT overrides this default - command-line option overrides all of the above
[21 Aug 2007 18:13]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/32827 ChangeSet@1.2476, 2007-08-21 20:17:34+02:00, tnurnberg@sin.intern.azundris.com +30 -0 Bug #15327: configure: --with-tcp-port option being partially ignored make sure that if builder configured with a non-standard (!= 3306) default TCP port that value actually gets used throughout. if they didn't configure a value, assume "use a sensible default", which will be read from /etc/services or, failing that, from the factory default. That makes the order of preference - command-line option - my.cnf, where applicable - $MYSQL_TCP_PORT environment variable - /etc/services (unless configured --with-tcp-port) - default port (--with-tcp-port=... or factory default)
[13 Sep 2007 14:13]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/34184 ChangeSet@1.2476, 2007-09-13 16:19:46+02:00, tnurnberg@mysql.com +26 -0 Bug #15327: configure: --with-tcp-port option being partially ignored make sure that if builder configured with a non-standard (!= 3306) default TCP port that value actually gets used throughout. if they didn't configure a value, assume "use a sensible default", which will be read from /etc/services or, failing that, from the factory default. That makes the order of preference - command-line option - my.cnf, where applicable - $MYSQL_TCP_PORT environment variable - /etc/services (unless configured --with-tcp-port) - default port (--with-tcp-port=... or factory default)
[15 Sep 2007 2:54]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/34309 ChangeSet@1.2578, 2007-09-15 04:59:46+02:00, tnurnberg@mysql.com +1 -0 Bug #15327: configure: --with-tcp-port option being partially ignored after merge fix :-/
[17 Sep 2007 13:29]
Timothy Smith
Queued to 5.0- and 5.1-maint
[21 Sep 2007 15:39]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/34458 ChangeSet@1.2477, 2007-09-21 11:38:23-04:00, iggy@alf.(none) +1 -0 Bug #15327: configure: --with-tcp-port option being partially ignored make sure that if builder configured with a non-standard (!= 3306) default TCP port that value actually gets used throughout.
[21 Sep 2007 16:06]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/34460 ChangeSet@1.2603, 2007-09-21 12:05:54-04:00, iggy@alf.(none) +1 -0 Bug #15327: configure: --with-tcp-port option being partially ignored make sure that if builder configured with a non-standard (!= 3306) default TCP port that value actually gets used throughout.
[18 Oct 2007 21:34]
Bugs System
Pushed into 5.1.23-beta
[18 Oct 2007 21:36]
Bugs System
Pushed into 5.0.52
[23 Oct 2007 0:11]
Paul DuBois
Noted in 5.0.52, 5.1.23 changelogs. Clients were ignoring the TCP/IP port number specified as the default port via the --with-tcp-port configuration option.