Description:
After some shutdowns/restarts and a CHANGE MASTER, one gets:
030716 22:14:56 Failed to open the relay log (relay_log_name='./gbichot2-relay-bin.004', relay_log_pos=47)
030716 22:14:56 Could not find target log during relay log initialization
030716 22:14:56 Failed to initialize the master info structure
in the .err file of the slave.
How to repeat:
Found by Dmitri Lenev (quoting his email to me):
------------------------------------------------
1) i set up two servers a master and a slave, and set up replication
between them as described in manual.
2) Now i shutdown slave via mysqladmin shutdown
3) Start up slave server
4) Now i shutdown slave via mysqladmin shutdown
5) Start up slave server
6) Now i shutdown slave via mysqladmin shutdown
7) Start up slave server
Now slave data directory looks like:
---------------
[dlenev@dlenev mysql-4.1]$ ls -l ../../mysql_data2/
итого 20580
-rw-rw---- 1 dlenev dlenev 4 Июл 16 23:30 dlenev.pid
-rw-rw---- 1 dlenev dlenev 4 Июл 16 23:30
dlenev-relay-bin.000004
-rw-rw---- 1 dlenev dlenev 26 Июл 16 23:30
dlenev-relay-bin.index
drwx------ 2 dlenev dlenev 4096 Июл 1 22:01 foo
-rw-r----- 1 dlenev dlenev 25088 Июл 1 22:01
ib_arch_log_0000000000
-rw-r----- 1 dlenev dlenev 10485760 Июл 16 23:30 ibdata1
-rw-r----- 1 dlenev dlenev 5242880 Июл 16 23:30 ib_logfile0
-rw-r----- 1 dlenev dlenev 5242880 Июл 1 22:01 ib_logfile1
-rw-rw---- 1 dlenev dlenev 157 Июл 16 23:30 master.info
drwxr-xr-x 2 dlenev dlenev 4096 Июл 1 22:01 mysql
-rw-rw---- 1 dlenev dlenev 51 Июл 16 23:30 relay-log.info
drwx------ 2 dlenev dlenev 4096 Июл 16 14:22 test
[dlenev@dlenev mysql-4.1]$ cat ../../mysql_data2/relay-log.info
./dlenev-relay-bin.000004
4
dlenevrepl.000023
79
9
[dlenev@dlenev mysql-4.1]$
------------
Note that 000004 suffix. I obtained it via several shutdown/start-up
iterations.
8)
---------
[dlenev@dlenev mysql-4.1]$ client/mysql -u root --protocol=tcp --port=3316
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 4.1.1-alpha-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to master_user='test';
Query OK, 0 rows affected (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> Bye
-----------
So we stop slave, setting non-existent master_user, starting up slave
9) Now we again shutdown slave server
10) Start up it again and get
-----------
[dlenev@dlenev mysql-4.1]$ ./start_mysqld2.sh
030716 23:38:02 InnoDB: Started
030716 23:38:02 Could not find target log during relay log initialization
030716 23:38:02 Note: Failed to initialized master info
/home/dlenev/src/mysql-4.1/sql/mysqld: ready for connections.
Version: '4.1.1-alpha-debug' socket: '/home/dlenev/mysql_data/mysql.sock'
port: 3316
-----------
Note that on this stage slave's data dir looks like:
-----------
[dlenev@dlenev mysql-4.1]$ cat ../../mysql_data2/relay-log.info
./dlenev-relay-bin.000004
4
dlenevrepl.000023
79
9
[dlenev@dlenev mysql-4.1]$ ls -l ../../mysql_data2/
итого 20584
-rw-rw---- 1 dlenev dlenev 4 Июл 16 23:38 dlenev.pid
-rw-rw---- 1 dlenev dlenev 4 Июл 16 23:37
dlenev-relay-bin.000001
-rw-rw---- 1 dlenev dlenev 4 Июл 16 23:38
dlenev-relay-bin.000002
-rw-rw---- 1 dlenev dlenev 52 Июл 16 23:38
dlenev-relay-bin.index
drwx------ 2 dlenev dlenev 4096 Июл 1 22:01 foo
-rw-r----- 1 dlenev dlenev 25088 Июл 1 22:01
ib_arch_log_0000000000
-rw-r----- 1 dlenev dlenev 10485760 Июл 16 23:37 ibdata1
-rw-r----- 1 dlenev dlenev 5242880 Июл 16 23:38 ib_logfile0
-rw-r----- 1 dlenev dlenev 5242880 Июл 1 22:01 ib_logfile1
-rw-rw---- 1 dlenev dlenev 157 Июл 16 23:37 master.info
drwxr-xr-x 2 dlenev dlenev 4096 Июл 1 22:01 mysql
-rw-rw---- 1 dlenev dlenev 51 Июл 16 23:35 relay-log.info
drwx------ 2 dlenev dlenev 4096 Июл 16 14:22 test
[dlenev@dlenev mysql-4.1]$
-----------
So in this case all old relay files are deleted
but relay-log.info contains the same 000004 suffix!
Suggested fix:
Something wrong in sql_repl.cc I think.