Loading client/mysqlbinlog.cc +78 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ #include <time.h> #include "log_event.h" #define PROBE_HEADER_LEN (4+EVENT_LEN_OFFSET) #define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_LOCAL_FILES) char server_version[SERVER_VERSION_LENGTH]; Loading Loading @@ -288,6 +290,52 @@ static void dump_remote_table(NET* net, const char* db, const char* table) } } static int check_master_version(MYSQL* mysql) { MYSQL_RES* res = 0; MYSQL_ROW row; const char* version; int old_format = 0; if (mysql_query(mysql, "SELECT VERSION()") || !(res = mysql_store_result(mysql))) { mysql_close(mysql); die("Error checking master version: %s", mysql_error(mysql)); } if (!(row = mysql_fetch_row(res))) { mysql_free_result(res); mysql_close(mysql); die("Master returned no rows for SELECT VERSION()"); return 1; } if (!(version = row[0])) { mysql_free_result(res); mysql_close(mysql); die("Master reported NULL for the version"); } switch (*version) { case '3': old_format = 1; break; case '4': old_format = 0; break; default: sql_print_error("Master reported unrecognized MySQL version '%s'", version); mysql_free_result(res); mysql_close(mysql); return 1; } mysql_free_result(res); return old_format; } static void dump_remote_log_entries(const char* logname) { Loading @@ -295,6 +343,9 @@ static void dump_remote_log_entries(const char* logname) char last_db[FN_REFLEN+1] = ""; uint len; NET* net = &mysql->net; int old_format; old_format = check_master_version(mysql); if(!position) position = 4; // protect the innocent from spam if (position < 4) { Loading Loading @@ -322,7 +373,7 @@ static void dump_remote_log_entries(const char* logname) len, net->read_pos[5])); Log_event * ev = Log_event::read_log_event( (const char*) net->read_pos + 1 , len - 1, &error); len - 1, &error, old_format); if (ev) { ev->print(result_file, short_form, last_db); Loading @@ -335,12 +386,34 @@ static void dump_remote_log_entries(const char* logname) } } static int check_header (IO_CACHE* file) { char buf[PROBE_HEADER_LEN]; int old_format; my_off_t pos = my_b_tell(file); my_b_seek(file, (my_off_t)0); if (my_b_read(file, buf, sizeof(buf))) die("Failed reading header"); if (buf[EVENT_TYPE_OFFSET+4] == START_EVENT) { uint event_len; event_len = uint4korr(buf + EVENT_LEN_OFFSET + 4); old_format = (event_len < LOG_EVENT_HEADER_LEN + START_HEADER_LEN); } else old_format = 0; my_b_seek(file, pos); return old_format; } static void dump_local_log_entries(const char* logname) { File fd = -1; IO_CACHE cache,*file= &cache; ulonglong rec_count = 0; char last_db[FN_REFLEN+1] = ""; bool old_format = 0; if (logname && logname[0] != '-') { Loading @@ -349,12 +422,14 @@ static void dump_local_log_entries(const char* logname) if (init_io_cache(file, fd, 0, READ_CACHE, (my_off_t) position, 0, MYF(MY_WME | MY_NABP))) exit(1); old_format = check_header(file); } else { if (init_io_cache(file, fileno(result_file), 0, READ_CACHE, (my_off_t) 0, 0, MYF(MY_WME | MY_NABP | MY_DONT_CHECK_FILESIZE))) exit(1); old_format = check_header(file); if (position) { /* skip 'position' characters from stdout */ Loading Loading @@ -385,7 +460,7 @@ static void dump_local_log_entries(const char* logname) char llbuff[21]; my_off_t old_off = my_b_tell(file); Log_event* ev = Log_event::read_log_event(file); Log_event* ev = Log_event::read_log_event(file, old_format); if (!ev) { if (file->error) Loading libmysql/Makefile.shared +2 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,8 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \ mf_loadpath.lo my_pthread.lo my_thr_init.lo \ thr_mutex.lo mulalloc.lo string.lo default.lo \ my_compress.lo array.lo my_once.lo list.lo my_net.lo \ charset.lo hash.lo mf_iocache.lo my_seek.lo \ charset.lo hash.lo mf_iocache.lo \ mf_iocache2.lo my_seek.lo \ my_pread.lo mf_cache.lo my_vsnprintf.lo md5.lo # Not needed in the minimum library Loading mysql-test/mysql-test-run.sh +7 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,9 @@ while test $# -gt 0; do USE_MANAGER=1 USE_RUNNING_SERVER= ;; --start-and-exit) START_AND_EXIT=1 ;; --skip-innobase) EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-innobase" EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-innobase" ;; Loading Loading @@ -1091,6 +1094,10 @@ then mysql_loadstd fi if [ "x$START_AND_EXIT" = "x1" ] ; then echo "Servers started, exiting" exit fi $ECHO "Starting Tests" Loading mysql-test/r/rpl000002.result +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ n 2002 show slave hosts; Server_id Host Port Rpl_recovery_rank Master_id 2 127.0.0.1 9307 2 1 2 127.0.0.1 $SLAVE_MYPORT 2 1 drop table t1; slave stop; drop table if exists t2; Loading mysql-test/r/rpl000016.result +4 −4 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ create table t1 (s text); insert into t1 values('Could not break slave'),('Tried hard'); show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9999 60 master-bin.001 234 Yes 0 0 3 127.0.0.1 root $MASTER_MYPORT 60 master-bin.001 234 Yes 0 0 3 select * from t1; s Could not break slave Loading @@ -42,7 +42,7 @@ master-bin.003 insert into t2 values (65); show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9999 60 master-bin.003 202 Yes 0 0 3 127.0.0.1 root $MASTER_MYPORT 60 master-bin.003 127 Yes 0 0 2 select * from t2; m 34 Loading @@ -60,12 +60,12 @@ master-bin.005 master-bin.006 show master status; File Position Binlog_do_db Binlog_ignore_db master-bin.006 710 master-bin.006 382 slave stop; slave start; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9999 60 master-bin.006 710 Yes 0 0 11 127.0.0.1 root $MASTER_MYPORT 60 master-bin.006 382 Yes 0 0 6 lock tables t3 read; select count(*) from t3 where n >= 4; count(*) Loading Loading
client/mysqlbinlog.cc +78 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ #include <time.h> #include "log_event.h" #define PROBE_HEADER_LEN (4+EVENT_LEN_OFFSET) #define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_LOCAL_FILES) char server_version[SERVER_VERSION_LENGTH]; Loading Loading @@ -288,6 +290,52 @@ static void dump_remote_table(NET* net, const char* db, const char* table) } } static int check_master_version(MYSQL* mysql) { MYSQL_RES* res = 0; MYSQL_ROW row; const char* version; int old_format = 0; if (mysql_query(mysql, "SELECT VERSION()") || !(res = mysql_store_result(mysql))) { mysql_close(mysql); die("Error checking master version: %s", mysql_error(mysql)); } if (!(row = mysql_fetch_row(res))) { mysql_free_result(res); mysql_close(mysql); die("Master returned no rows for SELECT VERSION()"); return 1; } if (!(version = row[0])) { mysql_free_result(res); mysql_close(mysql); die("Master reported NULL for the version"); } switch (*version) { case '3': old_format = 1; break; case '4': old_format = 0; break; default: sql_print_error("Master reported unrecognized MySQL version '%s'", version); mysql_free_result(res); mysql_close(mysql); return 1; } mysql_free_result(res); return old_format; } static void dump_remote_log_entries(const char* logname) { Loading @@ -295,6 +343,9 @@ static void dump_remote_log_entries(const char* logname) char last_db[FN_REFLEN+1] = ""; uint len; NET* net = &mysql->net; int old_format; old_format = check_master_version(mysql); if(!position) position = 4; // protect the innocent from spam if (position < 4) { Loading Loading @@ -322,7 +373,7 @@ static void dump_remote_log_entries(const char* logname) len, net->read_pos[5])); Log_event * ev = Log_event::read_log_event( (const char*) net->read_pos + 1 , len - 1, &error); len - 1, &error, old_format); if (ev) { ev->print(result_file, short_form, last_db); Loading @@ -335,12 +386,34 @@ static void dump_remote_log_entries(const char* logname) } } static int check_header (IO_CACHE* file) { char buf[PROBE_HEADER_LEN]; int old_format; my_off_t pos = my_b_tell(file); my_b_seek(file, (my_off_t)0); if (my_b_read(file, buf, sizeof(buf))) die("Failed reading header"); if (buf[EVENT_TYPE_OFFSET+4] == START_EVENT) { uint event_len; event_len = uint4korr(buf + EVENT_LEN_OFFSET + 4); old_format = (event_len < LOG_EVENT_HEADER_LEN + START_HEADER_LEN); } else old_format = 0; my_b_seek(file, pos); return old_format; } static void dump_local_log_entries(const char* logname) { File fd = -1; IO_CACHE cache,*file= &cache; ulonglong rec_count = 0; char last_db[FN_REFLEN+1] = ""; bool old_format = 0; if (logname && logname[0] != '-') { Loading @@ -349,12 +422,14 @@ static void dump_local_log_entries(const char* logname) if (init_io_cache(file, fd, 0, READ_CACHE, (my_off_t) position, 0, MYF(MY_WME | MY_NABP))) exit(1); old_format = check_header(file); } else { if (init_io_cache(file, fileno(result_file), 0, READ_CACHE, (my_off_t) 0, 0, MYF(MY_WME | MY_NABP | MY_DONT_CHECK_FILESIZE))) exit(1); old_format = check_header(file); if (position) { /* skip 'position' characters from stdout */ Loading Loading @@ -385,7 +460,7 @@ static void dump_local_log_entries(const char* logname) char llbuff[21]; my_off_t old_off = my_b_tell(file); Log_event* ev = Log_event::read_log_event(file); Log_event* ev = Log_event::read_log_event(file, old_format); if (!ev) { if (file->error) Loading
libmysql/Makefile.shared +2 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,8 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \ mf_loadpath.lo my_pthread.lo my_thr_init.lo \ thr_mutex.lo mulalloc.lo string.lo default.lo \ my_compress.lo array.lo my_once.lo list.lo my_net.lo \ charset.lo hash.lo mf_iocache.lo my_seek.lo \ charset.lo hash.lo mf_iocache.lo \ mf_iocache2.lo my_seek.lo \ my_pread.lo mf_cache.lo my_vsnprintf.lo md5.lo # Not needed in the minimum library Loading
mysql-test/mysql-test-run.sh +7 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,9 @@ while test $# -gt 0; do USE_MANAGER=1 USE_RUNNING_SERVER= ;; --start-and-exit) START_AND_EXIT=1 ;; --skip-innobase) EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-innobase" EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-innobase" ;; Loading Loading @@ -1091,6 +1094,10 @@ then mysql_loadstd fi if [ "x$START_AND_EXIT" = "x1" ] ; then echo "Servers started, exiting" exit fi $ECHO "Starting Tests" Loading
mysql-test/r/rpl000002.result +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ n 2002 show slave hosts; Server_id Host Port Rpl_recovery_rank Master_id 2 127.0.0.1 9307 2 1 2 127.0.0.1 $SLAVE_MYPORT 2 1 drop table t1; slave stop; drop table if exists t2; Loading
mysql-test/r/rpl000016.result +4 −4 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ create table t1 (s text); insert into t1 values('Could not break slave'),('Tried hard'); show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9999 60 master-bin.001 234 Yes 0 0 3 127.0.0.1 root $MASTER_MYPORT 60 master-bin.001 234 Yes 0 0 3 select * from t1; s Could not break slave Loading @@ -42,7 +42,7 @@ master-bin.003 insert into t2 values (65); show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9999 60 master-bin.003 202 Yes 0 0 3 127.0.0.1 root $MASTER_MYPORT 60 master-bin.003 127 Yes 0 0 2 select * from t2; m 34 Loading @@ -60,12 +60,12 @@ master-bin.005 master-bin.006 show master status; File Position Binlog_do_db Binlog_ignore_db master-bin.006 710 master-bin.006 382 slave stop; slave start; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9999 60 master-bin.006 710 Yes 0 0 11 127.0.0.1 root $MASTER_MYPORT 60 master-bin.006 382 Yes 0 0 6 lock tables t3 read; select count(*) from t3 where n >= 4; count(*) Loading