5

I try to setup replication from slave to the master.

CHANGE MASTER TO
  MASTER_HOST = 'master',
  MASTER_PORT = 3306,
  MASTER_USER = 'repl',
  MASTER_PASSWORD = 'xxx';

And I did grant privileges to the user on master. I can connect with mysql command from slave machine to the master

mysql -h master -u repl -p
mysql> show grants;
GRANT RELOAD, SUPER, REPLICATION SLAVE, CREATE USER ON *.* TO 'repl'@'xxx' IDENTIFIED BY PASSWORD 'xxx'

mysql> select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.04 sec)

As you can see, privileges are correct, connection works fine, but however, the connection for replication to master always failed.

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: master
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File:
          Read_Master_Log_Pos: 4
               Relay_Log_File: slave-replay-bin.000002
                Relay_Log_Pos: 4
        Relay_Master_Log_File:
             Slave_IO_Running: Connecting
            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: 107
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1045
                Last_IO_Error: error connecting to master 'repl@master:3306' - retry-time: 60  retries: 86400
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 0
1 row in set (0.00 sec)

Is this caused by different version of MySQL server? The version of master is 5.0.77, and the slave is 5.5.13. But all articles I could find tell me that it's okay to replicate from a newer slave to old master. How to solve this problem?

-- Update --

I even try to upgrade the old MySQL, but still, the problem is not solved.

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: master
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000007
          Read_Master_Log_Pos: 107
               Relay_Log_File: slave-replay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: master-bin.000007
             Slave_IO_Running: Connecting
            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: 107
              Relay_Log_Space: 107
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1045
                Last_IO_Error: error connecting to master 'repl@master' - retry-time: 60  retries: 86400
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 0
1 row in set (0.00 sec)
Fang-Pen Lin
  • 282
  • 1
  • 3
  • 12

3 Answers3

7

Eventually, I find the reason. The password is too long. I try to use a short password, and it works. I think mysql command may truncate the password if it is too long, but it appears the replication didn't do that for you.

Fang-Pen Lin
  • 282
  • 1
  • 3
  • 12
  • 1
    Thank you so much for your follow up! I ran exactly into the same problem and using a shorter password also did the trick for me. – Michael Osl Sep 17 '12 at 18:16
  • 1
    would be great to know what the limits are. What is short? what is long? – JGurtz Nov 20 '12 at 22:33
  • As far as I know, the MySQL password length limitation is hardcored as 16 character, so, it means you should not use a password that is longer than 16 char. – Fang-Pen Lin Nov 21 '12 at 05:59
  • I just discovered a case yesterday where a 42 char password failed, but a 32 char password worked. Maybe this is version dependent? – JGurtz Dec 20 '12 at 00:43
1

I was getting the same error while I was setting replication after reinstalling mysql.

It got resolved by changing from IP to hostname as the Master_Host, though I am not sure if that was the cause as IP was being used previously and working fine.

ghitesh
  • 11
  • 2
0

Anyone else finding this nowadays, at least on MariaDB 10.4, the password length is no longer an issue. (I just tested it with a 75 char long one.) Simply doing a mysql restart or a START SLAVE is not enough, STOP SLAVE is needed first, and maybe even a CHANGE MASTER TO too.

PAStheLoD
  • 256
  • 3
  • 7