Bug #82939 START SLAVE with password fails with ambiguous error
Submitted: 10 Sep 2016 13:06 Modified: 11 Sep 2016 7:05
Reporter: Giuseppe Maxia (OCA) Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Replication Severity:S2 (Serious)
Version:5.7.15,8.0.0, 5.6.33 OS:Any
Assigned to: CPU Architecture:Any

[10 Sep 2016 13:06] Giuseppe Maxia
Description:
When we set replication without indicating a password in CHANGE MASTER TO, and then set the password in START SLAVE, we get an error:

mysql [localhost] {msandbox} ((none)) > change master to master_host='127.0.0.1', master_user='rsandbox', master_port=5715;

mysql [localhost] {msandbox} ((none)) > start slave password='rsandbox';
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql [localhost] {msandbox} ((none)) > show warnings\G
*************************** 1. row ***************************
  Level: Note
   Code: 1759
Message: Sending passwords in plain text without SSL/TLS is extremely insecure.
1 row in set (0.00 sec)

mysql [localhost] {msandbox} ((none)) > SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: 127.0.0.1
                  Master_User: rsandbox
                  Master_Port: 5715
                Connect_Retry: 60
              Master_Log_File:
          Read_Master_Log_Pos: 4
               Relay_Log_File: mysql-relay.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File:
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 0
              Relay_Log_Space: 154
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1593
                Last_IO_Error: Fatal error: Invalid (empty) username when attempting to connect to the master server. Connection attempt terminated.
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 0
                  Master_UUID:
             Master_Info_File: /Users/gmax/sandboxes/msb_5_7_15_a/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp: 160910 15:03:11
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

You can see that the master user is listed in SHOW SLAVE STATUS, but not used.

How to repeat:
-- Using MySQL-Sandbox

change master to master_host='127.0.0.1', master_user='rsandbox', master_port=5715;
start slave password='rsandbox';

Suggested fix:
If START SLAVE requires both user name and password, it should fail with an error if only the password is provided.

If it is only complementing the information passed via CHANGE MASTER TO, it should use the information already existing.
[11 Sep 2016 7:05] MySQL Verification Team
Hello Giuseppe,

Thank you for the report.
Observed this with 5.6.33/5.7.15 builds.

Thanks,
Umesh