diff options
-rw-r--r-- | mysql-test/r/binlog-backup-restore.result | 5 | ||||
-rw-r--r-- | mysql-test/t/binlog-backup-restore.test | 18 | ||||
-rw-r--r-- | sql/slave.cc | 146 | ||||
-rw-r--r-- | sql/slave.h | 15 |
4 files changed, 7 insertions, 177 deletions
diff --git a/mysql-test/r/binlog-backup-restore.result b/mysql-test/r/binlog-backup-restore.result deleted file mode 100644 index ebfe8217906..00000000000 --- a/mysql-test/r/binlog-backup-restore.result +++ /dev/null @@ -1,5 +0,0 @@ -n -11 -12 -13 -14 diff --git a/mysql-test/t/binlog-backup-restore.test b/mysql-test/t/binlog-backup-restore.test deleted file mode 100644 index 546782c5825..00000000000 --- a/mysql-test/t/binlog-backup-restore.test +++ /dev/null @@ -1,18 +0,0 @@ -reset master; -drop table if exists t1; -create table t1(n int); -insert into t1 values (1),(2),(3),(4); -flush logs; -update t1 set n = n + 10; -save_master_pos; -flush tables with read lock; -system rm -rf var/tmp/backup; -system mkdir -p var/tmp/backup; -system cp var/master-data/master-bin.* var/tmp/backup; -unlock tables; -drop table t1; -eval change master to master_host='$MYSQL_TEST_DIR/var/tmp/backup/master-bin'; -slave start; -sync_with_master; -select * from t1; - diff --git a/sql/slave.cc b/sql/slave.cc index 1ca8324e204..aded6d558fc 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -20,7 +20,6 @@ #include <myisam.h> #include "mini_client.h" #include "slave.h" -#include "sql_repl.h" #include <thr_alarm.h> #include <my_dir.h> @@ -442,101 +441,6 @@ int fetch_nx_table(THD* thd, MASTER_INFO* mi) return error; } -void MASTER_INFO::close_virtual_master() -{ - vm_binlog.close_index(); - end_io_cache(&vm_cache); - if(vm_fd >= 0) - { - my_close(vm_fd, MYF(0)); - vm_fd = -1; - } -} - -int MASTER_INFO::setup_virtual_master() -{ - vm_binlog.init(LOG_BIN); - vm_binlog.set_index_file_name(host); - if(vm_binlog.open_index(O_RDONLY)) - { - sql_print_error("virtual master: could not open index file '%s': \ - (%d)", host, my_errno); - return 1; - } - - if(vm_binlog.find_first_log(&vm_linfo,log_file_name)) - { - sql_print_error("virtual master: could not find first log"); - return 1; - } - - if(open_log()) - return 1; - - return 0; -} - -int MASTER_INFO::open_log() -{ - const char* errmsg = "Unknown error"; - if(vm_fd >= 0) - { - end_io_cache(&vm_cache); - my_close(vm_fd, MYF(0)); - } - - // if backup-up logs have relative paths, assume they are relative to - // the directory that has the log index, not cwd - char logname_buf[FN_REFLEN+1], *logname; - if(vm_linfo.log_file_name[0] == FN_LIBCHAR) - logname = vm_linfo.log_file_name; - else - { - char* end = strnmov(logname_buf, host, - sizeof(logname_buf)); - for(; *end != FN_LIBCHAR; --end); // we will always find it, first - // char of host is always FN_LIBCHAR for virtual master - - strncpy(end + 1, vm_linfo.log_file_name, - sizeof(logname_buf) - (end - logname_buf)); - logname = logname_buf; - } - - if((vm_fd = open_binlog(&vm_cache, logname, &errmsg)) < 0) - { - sql_print_error("virtual master: error opening binlog '%s': %s", - vm_linfo.log_file_name, errmsg); - return 1; - } - - strncpy(log_file_name, vm_linfo.log_file_name, sizeof(log_file_name)); - return 0; -} - -uint MASTER_INFO::read_event() -{ - for(;!(vm_ev = Log_event::read_log_event(&vm_cache, 0));) - { - if(!vm_cache.error) // eof - try next log - { - switch(vm_binlog.find_next_log(&vm_linfo)) - { - case LOG_INFO_EOF: - return 0; - case 0: - if(open_log()) - return packet_error; - continue; - default: - sql_print_error("virtual master: could not read next log"); - return packet_error; - } - } - } - - return vm_ev->get_data_size() + LOG_EVENT_HEADER_LEN; -} - void end_master_info(MASTER_INFO* mi) { if(mi->fd >= 0) @@ -546,8 +450,6 @@ void end_master_info(MASTER_INFO* mi) mi->fd = -1; } mi->inited = 0; - if(mi->virtual_master) - mi->close_virtual_master(); } int init_master_info(MASTER_INFO* mi) @@ -643,7 +545,6 @@ int init_master_info(MASTER_INFO* mi) } mi->inited = 1; - mi->virtual_master = (mi->host[0] == FN_LIBCHAR); // now change the cache from READ to WRITE - must do this // before flush_master_info reinit_io_cache(&mi->file, WRITE_CACHE, 0L,0,1); @@ -841,9 +742,6 @@ static int safe_sleep(THD* thd, int sec) static int request_dump(MYSQL* mysql, MASTER_INFO* mi) { - if(mi->virtual_master) - return 0; - char buf[FN_REFLEN + 10]; int len; int binlog_flags = 0; // for now @@ -897,9 +795,6 @@ command"); static uint read_event(MYSQL* mysql, MASTER_INFO *mi) { - if(mi->virtual_master) - return mi->read_event(); - uint len = packet_error; // for convinience lets think we start by // being in the interrupted state :-) @@ -965,18 +860,16 @@ point. If you are sure that your master is ok, run this query manually on the\ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) { - Log_event * ev = (mi->virtual_master) ? mi->vm_ev : - Log_event::read_log_event((const char*)net->read_pos + 1, - event_len) ; + Log_event * ev = Log_event::read_log_event((const char*)net->read_pos + 1, + event_len); char llbuff[22]; if (ev) { int type_code = ev->get_type_code(); - if ((!mi->virtual_master && ev->server_id == ::server_id) - || slave_skip_counter) + if (ev->server_id == ::server_id || slave_skip_counter) { - if(type_code == LOAD_EVENT && !mi->virtual_master) + if(type_code == LOAD_EVENT) skip_load_data_infile(net); mi->inc_pos(event_len); @@ -1078,14 +971,6 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) case LOAD_EVENT: { - if(mi->virtual_master) - { - delete ev; - sql_print_error("LOAD DATA INFILE does not yet work with virtual \ -master. Perform in manually, then restart slave with SET SQL_SKIP_COUNTER=1;\ -SLAVE START"); - return 1; - } Load_log_event* lev = (Load_log_event*)ev; init_sql_alloc(&thd->mem_root, 8192,0); thd->db = rewrite_db((char*)lev->db); @@ -1108,8 +993,7 @@ SLAVE START"); // the table will be opened in mysql_load if(table_rules_on && !tables_ok(thd, &tables)) { - if(!mi->virtual_master) - skip_load_data_infile(net); + skip_load_data_infile(net); } else { @@ -1173,8 +1057,7 @@ SLAVE START"); { // we will just ask the master to send us /dev/null if we do not // want to load the data :-) - if(!mi->virtual_master) - skip_load_data_infile(net); + skip_load_data_infile(net); } thd->net.vio = 0; @@ -1410,21 +1293,9 @@ try again, log '%s' at postion %s", RPL_LOG_NAME, sql_print_error("Slave thread killed while reading event"); goto err; } - - if(!event_len && glob_mi.virtual_master) - { - sql_print_error("Virtual master replication finished"); - goto err; - } if (event_len == packet_error) { - if(glob_mi.virtual_master) - { - sql_print_error("Virtual master replication encountered \ -error while reading event, replication terminated"); - goto err; - } thd->proc_info = "Waiting to reconnect after a failed read"; if(mysql->net.vio) vio_close(mysql->net.vio); @@ -1532,8 +1403,6 @@ position %s", static int safe_connect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) { - if(mi->virtual_master) - return mi->setup_virtual_master(); int slave_was_killed; #ifndef DBUG_OFF events_till_disconnect = disconnect_slave_event_count; @@ -1563,9 +1432,6 @@ static int safe_connect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) static int safe_reconnect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) { - if(mi->virtual_master) - return mi->setup_virtual_master(); - int slave_was_killed; char llbuff[22]; diff --git a/sql/slave.h b/sql/slave.h index d04c0c13c23..311368a4b82 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -16,14 +16,8 @@ typedef struct st_master_info pthread_mutex_t lock; pthread_cond_t cond; bool inited; - bool virtual_master; // for replay of binlogs from a directory - MYSQL_LOG vm_binlog; - LOG_INFO vm_linfo; - IO_CACHE vm_cache; - int vm_fd; - Log_event* vm_ev; - st_master_info():pending(0),fd(-1),inited(0),virtual_master(0),vm_fd(-1) + st_master_info():pending(0),fd(-1),inited(0) { host[0] = 0; user[0] = 0; password[0] = 0; pthread_mutex_init(&lock, MY_MUTEX_INIT_FAST); @@ -34,8 +28,6 @@ typedef struct st_master_info { pthread_mutex_destroy(&lock); pthread_cond_destroy(&cond); - if(virtual_master) - close_virtual_master(); } inline void inc_pending(ulonglong val) { @@ -59,11 +51,6 @@ typedef struct st_master_info } int wait_for_pos(THD* thd, String* log_name, ulonglong log_pos); - int setup_virtual_master(); - void close_virtual_master(); - uint read_event(); - int open_log(); - } MASTER_INFO; typedef struct st_table_rule_ent |