diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/item_sum.h | 2 | ||||
-rw-r--r-- | sql/log.cc | 24 | ||||
-rw-r--r-- | sql/log_event.cc | 21 | ||||
-rw-r--r-- | sql/share/czech/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/danish/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/dutch/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/english/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/estonian/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/french/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/german/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/greek/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/hungarian/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/italian/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/japanese/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/korean/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/norwegian-ny/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/norwegian/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/polish/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/portuguese/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/romanian/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/russian/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/slovak/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/spanish/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/share/swedish/errmsg.txt | 3 | ||||
-rw-r--r-- | sql/slave.cc | 45 |
25 files changed, 123 insertions, 32 deletions
diff --git a/sql/item_sum.h b/sql/item_sum.h index aea4d054c62..753a9de8b48 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -173,7 +173,7 @@ class Item_sum_count_distinct :public Item_sum_int public: Item_sum_count_distinct(List<Item> &list) :Item_sum_int(list),table(0),used_table_cache(~(table_map) 0), - tmp_table_param(0),always_null(0),use_tree(0) + tmp_table_param(0),use_tree(0),always_null(0) { quick_group=0; } ~Item_sum_count_distinct(); table_map used_tables() const { return used_table_cache; } diff --git a/sql/log.cc b/sql/log.cc index f1cb1b4d50c..cacbfa85b3b 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -236,20 +236,6 @@ void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg, bool error; s.set_log_seq(0, this); s.write(&log_file); - // if we have a master, record current master info in a slave - // event - if (glob_mi.inited) - { - THD* thd = current_thd; - Slave_log_event s(thd, &glob_mi); - - if(s.master_host) - { - s.set_log_seq(thd, this); - s.write(&log_file); - } - } - flush_io_cache(&log_file); pthread_mutex_lock(&LOCK_index); error=(my_write(index_file, (byte*) log_file_name, strlen(log_file_name), @@ -548,7 +534,7 @@ void MYSQL_LOG::new_file() to change base names at some point. */ Rotate_log_event r(new_name+dirname_length(new_name)); - r.set_log_seq(current_thd, this); + r.set_log_seq(0, this); r.write(&log_file); VOID(pthread_cond_broadcast(&COND_binlog_update)); } @@ -650,8 +636,10 @@ bool MYSQL_LOG::write(Slave_log_event* event_info) if (!inited) // Can't use mutex if not init return 0; VOID(pthread_mutex_lock(&LOCK_log)); - event_info->set_log_seq(current_thd, this); + if(!event_info->log_seq) + event_info->set_log_seq(current_thd, this); error = event_info->write(&log_file); + flush_io_cache(&log_file); VOID(pthread_mutex_unlock(&LOCK_log)); return error; } @@ -688,7 +676,7 @@ bool MYSQL_LOG::write(Query_log_event* event_info) { Intvar_log_event e((uchar)LAST_INSERT_ID_EVENT, thd->last_insert_id); e.set_log_seq(thd, this); - if(thd->server_id) + if (thd->server_id) e.server_id = thd->server_id; if (e.write(file)) goto err; @@ -697,6 +685,8 @@ bool MYSQL_LOG::write(Query_log_event* event_info) { Intvar_log_event e((uchar)INSERT_ID_EVENT, thd->last_insert_id); e.set_log_seq(thd, this); + if (thd->server_id) + e.server_id = thd->server_id; if (e.write(file)) goto err; } diff --git a/sql/log_event.cc b/sql/log_event.cc index bf0875fbb5d..94ef3736cbf 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -204,7 +204,17 @@ void Intvar_log_event::pack_info(String* packet) void Slave_log_event::pack_info(String* packet) { - net_store_data(packet, "", 0); + String tmp; + char buf[22]; + tmp.append("host="); + tmp.append(master_host); + tmp.append(",port="); + tmp.append(llstr(master_port,buf)); + tmp.append(",log="); + tmp.append(master_log); + tmp.append(",pos="); + tmp.append(llstr(master_pos,buf)); + net_store_data(packet, tmp.ptr(), tmp.length()); } @@ -889,8 +899,8 @@ void Slave_log_event::init_from_mem_pool(int data_size) master_host = mem_pool + SL_MASTER_HOST_OFFSET; master_host_len = strlen(master_host); // safety - master_log = master_host + master_host_len; - if(master_log >= mem_pool + data_size) + master_log = master_host + master_host_len + 1; + if(master_log > mem_pool + data_size) { master_host = 0; return; @@ -902,9 +912,12 @@ void Slave_log_event::init_from_mem_pool(int data_size) Slave_log_event::Slave_log_event(const char* buf, int event_len): Log_event(buf),mem_pool(0),master_host(0) { + event_len -= LOG_EVENT_HEADER_LEN; + if(event_len < 0) + return; if(!(mem_pool = (char*)my_malloc(event_len + 1, MYF(MY_WME)))) return; - memcpy(mem_pool, buf, event_len); + memcpy(mem_pool, buf + LOG_EVENT_HEADER_LEN, event_len); mem_pool[event_len] = 0; init_from_mem_pool(event_len); } diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt index 6d35e913ffd..a8d7c187ad3 100644 --- a/sql/share/czech/errmsg.txt +++ b/sql/share/czech/errmsg.txt @@ -220,3 +220,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index d1e0ea71175..57a6ad3d13f 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -214,3 +214,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt index 7ae6c564283..b886ba43f6f 100644 --- a/sql/share/dutch/errmsg.txt +++ b/sql/share/dutch/errmsg.txt @@ -211,3 +211,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index efa17cf98c3..f0887f5b376 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -209,7 +209,8 @@ "Lock wait timeout exceeded", "The total number of locks exceeds the lock table size", "Update locks cannot be acquired during a READ UNCOMMITTED transaction", +"DROP DATABASE not allowed while thread is holding global read lock", +"CREATE DATABASE not allowed while thread is holding global read lock", "Error connecting to master: %-.128s", "Error running query on master: %-.128s", "Error in SHOW BINLOG EVENTS: %-.128s", - diff --git a/sql/share/estonian/errmsg.txt b/sql/share/estonian/errmsg.txt index 1418295b417..77a7d2f7841 100644 --- a/sql/share/estonian/errmsg.txt +++ b/sql/share/estonian/errmsg.txt @@ -215,3 +215,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt index 0da5cf94ed8..2e375bd5e15 100644 --- a/sql/share/french/errmsg.txt +++ b/sql/share/french/errmsg.txt @@ -211,3 +211,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt index 9abbb3a8a2f..85289b46967 100644 --- a/sql/share/german/errmsg.txt +++ b/sql/share/german/errmsg.txt @@ -214,3 +214,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt index 8f81fcfda31..bdae260f2f8 100644 --- a/sql/share/greek/errmsg.txt +++ b/sql/share/greek/errmsg.txt @@ -211,3 +211,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt index 84d8c56cd04..f2d45b94b50 100644 --- a/sql/share/hungarian/errmsg.txt +++ b/sql/share/hungarian/errmsg.txt @@ -213,3 +213,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt index ab31fa279c4..6f88845d781 100644 --- a/sql/share/italian/errmsg.txt +++ b/sql/share/italian/errmsg.txt @@ -211,3 +211,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt index 49e58079588..6d5ab99f86d 100644 --- a/sql/share/japanese/errmsg.txt +++ b/sql/share/japanese/errmsg.txt @@ -213,3 +213,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt index 2e278dbd129..5fa44f581bf 100644 --- a/sql/share/korean/errmsg.txt +++ b/sql/share/korean/errmsg.txt @@ -211,3 +211,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt index df9efbd28a4..f45daa00449 100644 --- a/sql/share/norwegian-ny/errmsg.txt +++ b/sql/share/norwegian-ny/errmsg.txt @@ -213,3 +213,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt index c95669aa016..951631cae75 100644 --- a/sql/share/norwegian/errmsg.txt +++ b/sql/share/norwegian/errmsg.txt @@ -213,3 +213,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index d708bc6fffb..79b420022bf 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -215,3 +215,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index b1cab63c0a0..cd3e948546e 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -211,3 +211,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt index 8069f9907bb..05362606c44 100644 --- a/sql/share/romanian/errmsg.txt +++ b/sql/share/romanian/errmsg.txt @@ -215,3 +215,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index 6bc845d5599..64adb134c34 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -214,3 +214,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt index 8631ee6bdeb..f951e8f9435 100644 --- a/sql/share/slovak/errmsg.txt +++ b/sql/share/slovak/errmsg.txt @@ -219,3 +219,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index ea97a282c83..3088c9b4ee1 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -212,3 +212,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index 7f43afd04b6..b8ee9e62b03 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -211,3 +211,6 @@ "Update locks cannot be acquired during a READ UNCOMMITTED transaction", "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", +"Error connecting to master: %-.128s", +"Error running query on master: %-.128s", +"Error in SHOW BINLOG EVENTS: %-.128s", diff --git a/sql/slave.cc b/sql/slave.cc index d7a0287fb85..249a45ca28f 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -928,7 +928,10 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) thd->server_id = ev->server_id; // use the original server id for logging thd->set_time(); // time the query - if(!ev->when) + if(!thd->log_seq) + thd->log_seq = ev->log_seq; + + if (!ev->when) ev->when = time(NULL); switch(type_code) { @@ -1009,6 +1012,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) } free_root(&thd->mem_root,0); delete ev; + thd->log_seq = 0; mi->inc_pos(event_len); flush_master_info(mi); @@ -1024,6 +1028,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) } delete ev; + thd->log_seq = 0; break; } @@ -1135,6 +1140,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) } delete ev; + thd->log_seq = 0; free_root(&thd->mem_root,0); if(thd->fatal_error) @@ -1154,6 +1160,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) mi->inc_pos(event_len); flush_master_info(mi); delete ev; + thd->log_seq = 0; break; case STOP_EVENT: @@ -1164,30 +1171,49 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) flush_master_info(mi); } delete ev; + thd->log_seq = 0; break; case ROTATE_EVENT: { Rotate_log_event* rev = (Rotate_log_event*)ev; int ident_len = rev->ident_len; + bool rotate_binlog = 0, write_slave_event = 0; + char* log_name = mi->log_file_name; pthread_mutex_lock(&mi->lock); - memcpy(mi->log_file_name, rev->new_log_ident,ident_len ); - mi->log_file_name[ident_len] = 0; + + // rotate local binlog only if the name of remote has changed + if (!*log_name || !(log_name[ident_len] == 0 && + !memcmp(log_name, rev->new_log_ident, ident_len))) + { + write_slave_event = mysql_bin_log.is_open(); + rotate_binlog = (*log_name && write_slave_event ); + memcpy(log_name, rev->new_log_ident,ident_len ); + log_name[ident_len] = 0; + } mi->pos = 4; // skip magic number pthread_cond_broadcast(&mi->cond); pthread_mutex_unlock(&mi->lock); flush_master_info(mi); #ifndef DBUG_OFF - if(abort_slave_event_count) + if (abort_slave_event_count) ++events_till_abort; #endif - if(mysql_bin_log.is_open()) - { + if (rotate_binlog) mysql_bin_log.new_file(); - Slave_log_event sev(slave_thd, mi); - if(sev.master_host) - mysql_bin_log.write(&sev); + + if (write_slave_event) + { + Slave_log_event s(thd, mi); + if (s.master_host) + { + s.set_log_seq(0, &mysql_bin_log); + s.server_id = ::server_id; + mysql_bin_log.write(&s); + } } + delete ev; + thd->log_seq = 0; break; } @@ -1207,6 +1233,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) } mi->inc_pending(event_len); delete ev; + // do not reset log_seq break; } } |