The importance of report_host & report_port

May 13, 2009

The two server variables, report_host and report_port, are not commonly used. One of the reasons, I suspect, is that they do not appear in any of the standard .cnf files provided with a MySQL installation.

For a replication environment, I find these two variables to be very useful.

Where are these variables used?

Here's a slightly modified exerpt from a MySQL master node I have, and which has two slaves:

mysql> SHOW SLAVE HOSTS;
+-----------+------------+------+-------------------+-----------+
| Server_id | Host       | Port | Rpl_recovery_rank | Master_id |
+-----------+------------+------+-------------------+-----------+
|        21 | webhost1   | 3306 |                 0 |        25 |
|       117 | webhost2   | 3306 |                 0 |        25 |
+-----------+------------+------+-------------------+-----------+
2 rows in set (0.00 sec)

A SHOW SLAVE HOSTS command lists down all servers participating in a replicated environment. The above excerpt is very simple: it lists two slaves for the given master.

Well, the above description is misleading. What SHOW SLAVE HOSTS really shows is the entire replication setup. That is, if I ran the above on one of the replication slaves (say webhost1) - I still get the same output. Moreover, if there are second level slaves, they're listed as well. So what I actually get is a complete picture of the participating slave instances in a replication environment, and I get this picture from any of those instanced.

The relevance to this post is that the "Host" and "Port" attributes are reported as defiend in report_host & report_port per instance.

Using SHOW PROCESSLIST

When you SHOW PROCESSLIST, you also get the replicating hosts, right? Let's see the output of SHOW PROCESSLIST\G:

*************************** 1. row ***************************
     Id: 18491376
   User: replication_user
   Host: 192.168.0.21:43198
     db: NULL
Command: Binlog Dump
   Time: 61316
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL
*************************** 2. row ***************************
     Id: 18491804
   User: replication_user
   Host: 192.168.0.117:32988
     db: NULL
Command: Binlog Dump
   Time: 61208
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL
*************************** 3. row ***************************

Well, here's the difference: you do get the replicating host, but not necessarily the way you wanted it. You get the IP, or you could get a hostname if you had one declared in /etc/hosts. But you do not get the port. The reported port is the socket which is used by the replication process, not the port on which the replicating slave listens.

You also only get one level down. If you want to map the entire topology, you'd have to drill down to the slaves and recursively continue the process.

Proper reporting

If you had two MySQL instances running on the same machine, the output of SHOW PROCESSLIST would be useless. You'd get two rows listing the same host - but on which port does each one listen? Perhaps you need the host to be reported in a very specific way, so that the firewall allows you access back to the machine?

It is therefore important to properly set up the two variables. Set report_port to the same port used for [mysqld]. Set report_host to whatever value that can be used to trace back from the master (or from the monitoring machine).

SHOW SLAVE HOSTS only lists slaves which are currently replicating. Any slave which has been stopped, or which has no relay log space (therefore temporarily suspending the IO thread) - are not listed. Knowing in advance the number of machines in your replication setup is useful: if you find the same number of rows in SHOW SLAVE HOSTS - you are doing well.

tags: ,
posted in MySQL by shlomi

« | »

Follow comments via the RSS Feed | Leave a comment | Trackback URL

4 Comments to "The importance of report_host & report_port"

  1. Xaprb wrote:

    In my experience they work pretty well until changes are made without restarting servers -- and then you can start to see different things from each host in a replication topology :( This is why Maatkit kind of moved away from this, towards detecting masters and slaves from the processlist.

  2. shlomi wrote:

    Hi Baron,

    I agree there's a need to remember the manual settings. So if you change an instance's port - you need to remember changing the report_port as well.

    How do you overcome the problem of non-default ports for slaves, when going through SHOW PROCESSLIST?

  3. New and Noteworthy in openark kit | code.openark.org wrote:

    [...] by utilizing the report_port parameter on the slaves, reading the value on SHOW SLAVE HOSTS (see this post). Both utilities support skipping SHOW SLAVE HOSTS and just picking up slaves by looking at SHOW [...]

  4. Replication configuration checklist | code.openark.org wrote:

    [...] report-host, report-port: the host and port identifying the slave when looking at SHOW SLAVE HOSTS on master. Set this up on all hosts. See further discussion here. [...]

Leave Your Comment

 
Powered by Wordpress and MySQL. Theme by openark.org