mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge work:/home/bk/mysql
into mysql.sashanet.com:/home/sasha/src/bk/mysql
This commit is contained in:
commit
0ee9e34a72
37 changed files with 281 additions and 63 deletions
|
@ -425,7 +425,7 @@ extern int my_printf_error _VARARGS((uint my_err, const char *format,
|
|||
__attribute__ ((format (printf, 2, 4))));
|
||||
extern int my_vsnprintf( char *str, size_t n,
|
||||
const char *format, va_list ap );
|
||||
|
||||
extern int my_snprintf(char* to, size_t n, const char* fmt, ...);
|
||||
extern int my_message(uint my_err, const char *str,myf MyFlags);
|
||||
extern int my_message_no_curses(uint my_err, const char *str,myf MyFlags);
|
||||
extern int my_message_curses(uint my_err, const char *str,myf MyFlags);
|
||||
|
|
|
@ -198,4 +198,9 @@
|
|||
#define ER_CRASHED_ON_REPAIR 1195
|
||||
#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196
|
||||
#define ER_TRANS_CACHE_FULL 1197
|
||||
#define ER_ERROR_MESSAGES 198
|
||||
#define ER_SLAVE_MUST_STOP 1198
|
||||
#define ER_SLAVE_NOT_RUNNING 1199
|
||||
#define ER_BAD_SLAVE 1200
|
||||
#define ER_MASTER_INFO 1201
|
||||
#define ER_SLAVE_THREAD 1202
|
||||
#define ER_ERROR_MESSAGES 203
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
File Position Binlog_do_db Binlog_ignore_db
|
||||
master-bin.001 73
|
||||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
127.0.0.1 root 9306 1 master-bin.001 73 Yes
|
||||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
127.0.0.1 root 9306 1 master-bin.001 73 No
|
||||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
127.0.0.1 root 9306 1 master-bin.001 73 Yes
|
||||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
127.0.0.1 root 9306 1 master-bin.001 173 Yes
|
||||
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
|
||||
127.0.0.1 root 9306 1 master-bin.001 73 Yes 0 0
|
||||
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
|
||||
127.0.0.1 root 9306 1 master-bin.001 73 No 0 0
|
||||
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
|
||||
127.0.0.1 root 9306 1 master-bin.001 73 Yes 0 0
|
||||
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
|
||||
127.0.0.1 root 9306 1 master-bin.001 173 Yes 0 0
|
||||
File Position Binlog_do_db Binlog_ignore_db
|
||||
master-bin.001 73
|
||||
n
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
File Position Binlog_do_db Binlog_ignore_db
|
||||
master-bin.001 73
|
||||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
0 0 0 No
|
||||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
127.0.0.1 test 3306 60 4 No
|
||||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
127.0.0.1 root 9306 60 4 No
|
||||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
127.0.0.1 root 9306 60 master-bin.001 73 Yes
|
||||
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
|
||||
0 0 0 No 0 0
|
||||
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
|
||||
127.0.0.1 test 3306 60 4 No 0 0
|
||||
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
|
||||
127.0.0.1 root 9306 60 4 No 0 0
|
||||
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
|
||||
127.0.0.1 root 9306 60 master-bin.001 73 Yes 0 0
|
||||
n
|
||||
10
|
||||
45
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
127.0.0.1 root 9306 60 master-bin.001 216 Yes
|
||||
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
|
||||
127.0.0.1 root 9306 60 master-bin.001 216 Yes 0 0
|
||||
s
|
||||
Could not break slave
|
||||
Tried hard
|
||||
|
@ -7,12 +7,21 @@ Log_name
|
|||
master-bin.001
|
||||
master-bin.002
|
||||
master-bin.003
|
||||
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
|
||||
127.0.0.1 root 9306 60 master-bin.003 129 Yes 1062 error 'Duplicate entry '1234' for key 1' on query 'insert into t2 values(1234)' 0
|
||||
Log_name
|
||||
master-bin.003
|
||||
Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db
|
||||
127.0.0.1 root 9306 60 master-bin.003 128 Yes
|
||||
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
|
||||
127.0.0.1 root 9306 60 master-bin.003 184 Yes 0 0
|
||||
m
|
||||
34
|
||||
65
|
||||
67
|
||||
123
|
||||
65
|
||||
1234
|
||||
Log_name
|
||||
master-bin.003
|
||||
master-bin.004
|
||||
master-bin.005
|
||||
count(*)
|
||||
100
|
||||
|
|
1
mysql-test/t/rpl000016-master.opt
Normal file
1
mysql-test/t/rpl000016-master.opt
Normal file
|
@ -0,0 +1 @@
|
|||
-O max_binlog_size=2048
|
|
@ -26,14 +26,33 @@ select * from t1;
|
|||
connection master;
|
||||
flush logs;
|
||||
drop table if exists t2;
|
||||
create table t2(m int);
|
||||
create table t2(m int not null primary key);
|
||||
insert into t2 values (34),(67),(123);
|
||||
save_master_pos;
|
||||
flush logs;
|
||||
show master logs;
|
||||
#now lets make some duplicate key mess and see if we can recover from it
|
||||
#first insert a value on the slave
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
insert into t2 values(1234);
|
||||
#same value on the master
|
||||
connection master;
|
||||
save_master_pos;
|
||||
insert into t2 values(1234);
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
#the slave may have already stopped, so we ignore the error
|
||||
!slave stop;
|
||||
#restart slave skipping one event
|
||||
set sql_slave_skip_counter=1;
|
||||
slave start;
|
||||
connection master;
|
||||
save_master_pos;
|
||||
#let slave catch up
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
show slave status;
|
||||
connection master;
|
||||
purge master logs to 'master-bin.003';
|
||||
show master logs;
|
||||
|
@ -43,6 +62,23 @@ connection slave;
|
|||
sync_with_master;
|
||||
show slave status;
|
||||
select * from t2;
|
||||
drop table if exists t1,t2;
|
||||
connection master;
|
||||
drop table if exists t1,t2;
|
||||
let $1=100;
|
||||
drop table if exists t3;
|
||||
create table t3 (n int);
|
||||
while ($1)
|
||||
{
|
||||
insert into t3 values(4);
|
||||
dec $1;
|
||||
}
|
||||
show master logs;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
select count(*) from t3 where n = 4;
|
||||
#clean up
|
||||
connection master;
|
||||
drop table if exists t1,t2,t3;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
|
|
@ -21,6 +21,13 @@
|
|||
#include <stdarg.h>
|
||||
#include <m_ctype.h>
|
||||
|
||||
int my_snprintf(char* to, size_t n, const char* fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args,fmt);
|
||||
return my_vsnprintf(to, n, fmt, args);
|
||||
}
|
||||
|
||||
int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
|
||||
{
|
||||
char *start=to, *end=to+n-1;
|
||||
|
|
|
@ -472,8 +472,8 @@ int main(int argc,char **argv)
|
|||
int error;
|
||||
|
||||
MY_INIT(argv[0]);
|
||||
start_value=4424889L; best_t1=3207460L; best_t2=481534L; best_type=0; /* mode=4451 add=8 type: 0 */
|
||||
if (get_options(argc,(char **) argv))
|
||||
start_value=5315771L; best_t1=6916833L; best_t2=3813748L; best_type=3; /* mode=5839 add=5 type: 0 */
|
||||
if (get_options(argc,(char **) argv))
|
||||
exit(1);
|
||||
|
||||
make_max_length_table();
|
||||
|
|
|
@ -283,6 +283,7 @@ static SYMBOL symbols[] = {
|
|||
{ "SQL_QUOTE_SHOW_CREATE",SYM(SQL_QUOTE_SHOW_CREATE), 0, 0},
|
||||
{ "SQL_SAFE_UPDATES", SYM(SQL_SAFE_UPDATES),0,0},
|
||||
{ "SQL_SELECT_LIMIT", SYM(SQL_SELECT_LIMIT),0,0},
|
||||
{ "SQL_SLAVE_SKIP_COUNTER", SYM(SQL_SLAVE_SKIP_COUNTER),0,0},
|
||||
{ "SQL_SMALL_RESULT", SYM(SQL_SMALL_RESULT),0,0},
|
||||
{ "SQL_WARNINGS", SYM(SQL_WARNINGS),0,0},
|
||||
{ "STRAIGHT_JOIN", SYM(STRAIGHT_JOIN),0,0},
|
||||
|
|
18
sql/log.cc
18
sql/log.cc
|
@ -28,6 +28,7 @@
|
|||
|
||||
MYSQL_LOG mysql_log,mysql_update_log,mysql_slow_log,mysql_bin_log;
|
||||
extern I_List<i_string> binlog_do_db, binlog_ignore_db;
|
||||
extern ulong max_binlog_size;
|
||||
|
||||
static bool test_if_number(const char *str,
|
||||
long *res, bool allow_wildcards);
|
||||
|
@ -609,6 +610,8 @@ bool MYSQL_LOG::write(Query_log_event* event_info)
|
|||
{
|
||||
/* In most cases this is only called if 'is_open()' is true */
|
||||
bool error=0;
|
||||
bool should_rotate = 0;
|
||||
|
||||
if (!inited) // Can't use mutex if not init
|
||||
return 0;
|
||||
VOID(pthread_mutex_lock(&LOCK_log));
|
||||
|
@ -655,7 +658,7 @@ bool MYSQL_LOG::write(Query_log_event* event_info)
|
|||
file == &log_file && flush_io_cache(file))
|
||||
goto err;
|
||||
error=0;
|
||||
|
||||
should_rotate = (file == &log_file && my_b_tell(file) >= max_binlog_size);
|
||||
err:
|
||||
if (error)
|
||||
{
|
||||
|
@ -669,6 +672,8 @@ err:
|
|||
VOID(pthread_cond_broadcast(&COND_binlog_update));
|
||||
}
|
||||
VOID(pthread_mutex_unlock(&LOCK_log));
|
||||
if(should_rotate)
|
||||
new_file();
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -682,6 +687,7 @@ bool MYSQL_LOG::write(IO_CACHE *cache)
|
|||
{
|
||||
VOID(pthread_mutex_lock(&LOCK_log));
|
||||
bool error=1;
|
||||
|
||||
if (is_open())
|
||||
{
|
||||
uint length;
|
||||
|
@ -722,7 +728,8 @@ err:
|
|||
else
|
||||
VOID(pthread_cond_broadcast(&COND_binlog_update));
|
||||
|
||||
VOID(pthread_mutex_unlock(&LOCK_log));
|
||||
VOID(pthread_mutex_unlock(&LOCK_log));
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -730,6 +737,8 @@ err:
|
|||
bool MYSQL_LOG::write(Load_log_event* event_info)
|
||||
{
|
||||
bool error=0;
|
||||
bool should_rotate = 0;
|
||||
|
||||
if (inited)
|
||||
{
|
||||
VOID(pthread_mutex_lock(&LOCK_log));
|
||||
|
@ -745,11 +754,16 @@ bool MYSQL_LOG::write(Load_log_event* event_info)
|
|||
sql_print_error(ER(ER_ERROR_ON_WRITE), name, errno);
|
||||
error=write_error=1;
|
||||
}
|
||||
should_rotate = (my_b_tell(&log_file) >= max_binlog_size);
|
||||
VOID(pthread_cond_broadcast(&COND_binlog_update));
|
||||
}
|
||||
}
|
||||
VOID(pthread_mutex_unlock(&LOCK_log));
|
||||
}
|
||||
|
||||
if(should_rotate)
|
||||
new_file();
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
|
@ -238,7 +238,7 @@ ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
|
|||
query_buff_size, lower_case_table_names, mysqld_net_retry_count,
|
||||
net_interactive_timeout, slow_launch_time = 2L,
|
||||
net_read_timeout,net_write_timeout,slave_open_temp_tables=0,
|
||||
open_files_limit=0;
|
||||
open_files_limit=0, max_binlog_size;
|
||||
ulong thread_cache_size=0, binlog_cache_size=0, max_binlog_cache_size=0;
|
||||
volatile ulong cached_thread_count=0;
|
||||
|
||||
|
@ -2571,6 +2571,8 @@ CHANGEABLE_VAR changeable_vars[] = {
|
|||
1024*1024L, 80, 64*1024*1024L, MALLOC_OVERHEAD, 1024 },
|
||||
{ "max_binlog_cache_size", (long*) &max_binlog_cache_size,
|
||||
~0L, IO_SIZE, ~0L, 0, IO_SIZE },
|
||||
{ "max_binlog_size", (long*) &max_binlog_size,
|
||||
1024*1024L*1024L, 1024, 1024*1024L*1024L, 0, 1 },
|
||||
{ "max_connections", (long*) &max_connections,
|
||||
100, 1, 16384, 0, 1 },
|
||||
{ "max_connect_errors", (long*) &max_connect_errors,
|
||||
|
@ -2672,7 +2674,8 @@ struct show_var_st init_vars[]= {
|
|||
{"low_priority_updates", (char*) &low_priority_updates, SHOW_BOOL},
|
||||
{"lower_case_table_names", (char*) &lower_case_table_names, SHOW_LONG},
|
||||
{"max_allowed_packet", (char*) &max_allowed_packet, SHOW_LONG},
|
||||
{"max_binlog_cache_size", (char*) &max_binlog_cache_size, SHOW_LONG},
|
||||
{"max_binlog_cache_size", (char*) &max_binlog_cache_size, SHOW_LONG},
|
||||
{"max_binlog_size", (char*) &max_binlog_size, SHOW_LONG},
|
||||
{"max_connections", (char*) &max_connections, SHOW_LONG},
|
||||
{"max_connect_errors", (char*) &max_connect_errors, SHOW_LONG},
|
||||
{"max_delayed_threads", (char*) &max_insert_delayed_threads, SHOW_LONG},
|
||||
|
|
|
@ -208,3 +208,8 @@
|
|||
"Tabulka '%-.64s' je ozna-Bèena jako poru¹ená a poslední (automatická?) oprava se nezdaøila",-A
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -202,3 +202,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -199,3 +199,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -187,7 +187,7 @@
|
|||
"Got error %d during CHECKPOINT",
|
||||
"Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: `%-.64s' (%-.64s)",
|
||||
"The handler for the table does not support binary table dump",
|
||||
"Binlog closed while trying to FLUSH MASTER",
|
||||
"Binlog closed, cannot RESET MASTER",
|
||||
"Failed rebuilding the index of dumped table '%-.64s'",
|
||||
"Error from master: '%-.64s'",
|
||||
"Net error reading from master",
|
||||
|
@ -199,3 +199,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -203,3 +203,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -199,3 +199,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -202,3 +202,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -199,3 +199,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -201,3 +201,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -199,3 +199,8 @@
|
|||
"La tabella '%-.64s' e' segnalata come rovinata e l'ultima ricostruzione (automatica?) e' fallita",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -201,3 +201,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -199,3 +199,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -201,3 +201,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -201,3 +201,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -203,3 +203,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -199,3 +199,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -203,3 +203,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -179,7 +179,7 @@
|
|||
"Результат содержит больше одной строки",
|
||||
"Таблица этого типа обязана иметь PRIMARY KEY",
|
||||
"Эта копия MySQL скомпилирована без поддержки RAID",
|
||||
"You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column",
|
||||
"MySQL работает в режиме защиты от дураков (safe_mode) - не могу UPDATE без WHERE с каким-небудь KEY",
|
||||
"Индекс '%-.64s' не найден в таблице '%-.64s'",
|
||||
"Не могу открыть таблицу",
|
||||
"Данный тип таблиц не поддерживает check/repair",
|
||||
|
@ -190,15 +190,20 @@
|
|||
"Ошибка %d во время CHECKPOINT",
|
||||
"Прерванное соединение %ld к базе данных: '%-.64s' пользователь: '%-.32s' хост: `%-.64s' (%-.64s)",
|
||||
"Этот тип таблиц не поддерживает binary table dump",
|
||||
"Binlog closed while trying to FLUSH MASTER",
|
||||
"Failed rebuilding the index of dumped table '%-.64s'",
|
||||
"Error from master: '%-.64s'",
|
||||
"Net error reading from master",
|
||||
"Net error writing to master",
|
||||
"Репликационный лог закрыт, не могу сделать RESET MASTER",
|
||||
"Ошибка при восстановлении индекса перекачанной таблицы '%-.64s'",
|
||||
"Ошибка на мастере: '%-.64s'",
|
||||
"Сетевая ошибка при чтении с мастера",
|
||||
"Сетевая ошибка при писании мастеру",
|
||||
"FULLTEXT индекс, соответствующий заданному списку столбцов, не найден",
|
||||
"Can't execute the given command because you have active locked tables or an active transaction",
|
||||
"Не могу выполнить комманду из-за активных locked таблиц или активной транзакции",
|
||||
"Неизвестная системная переменная '%-.64'",
|
||||
"Таблица '%-.64s' помечена как испорченная и должна быть исправлена",
|
||||
"Таблица '%-.64s' помечена как испорченная и последняя попытка исправления (автоматическая?) не удалась",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"Предупреждение: некоторые нетранзакционные таблицы не подчиняются ROLLBACK",
|
||||
"Многозапросная транзакция требует увеличения 'max_binlog_cache_size' - увеличте эту переменную и попробуйте еще раз",
|
||||
"Эта операция невозможна с активным slave, надо SLAVE STOP",
|
||||
"Эта операция невозможна с пассивным slave, надо SLAVE START",
|
||||
"Этот сервер не slave, исправьте в конфигурационном файле или коммандой CHANGE MASTER TO",
|
||||
"Не получилось инициализировать структуру master info, проверте persmissions на файле master.info",
|
||||
"Не могу создать процесс SLAVE, проверьте системные ресурсы",
|
||||
|
|
|
@ -207,3 +207,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -200,3 +200,8 @@
|
|||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
|
@ -199,3 +199,8 @@
|
|||
"Tabell '%-.64s' är crashad och senast (automatiska?) reparation misslyckades",
|
||||
"Warning: Några icke transaktionella tabeller kunde inte återställas vid ROLLBACK",
|
||||
"Transaktionen krävde mera än 'max_binlog_cache_size' minne. Utöka denna mysqld variabel och försök på nytt",
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
|
|
39
sql/slave.cc
39
sql/slave.cc
|
@ -34,10 +34,13 @@ DYNAMIC_ARRAY replicate_wild_do_table, replicate_wild_ignore_table;
|
|||
bool do_table_inited = 0, ignore_table_inited = 0;
|
||||
bool wild_do_table_inited = 0, wild_ignore_table_inited = 0;
|
||||
bool table_rules_on = 0;
|
||||
|
||||
uint32 slave_skip_counter = 0;
|
||||
static TABLE* save_temporary_tables = 0;
|
||||
// when slave thread exits, we need to remember the temporary tables so we
|
||||
// can re-use them on slave start
|
||||
static TABLE* save_temporary_tables = 0;
|
||||
|
||||
static int last_slave_errno = 0;
|
||||
static char last_slave_error[1024] = "";
|
||||
#ifndef DBUG_OFF
|
||||
int disconnect_slave_event_count = 0, abort_slave_event_count = 0;
|
||||
static int events_till_disconnect = -1, events_till_abort = -1;
|
||||
|
@ -570,6 +573,9 @@ int show_master_info(THD* thd)
|
|||
field_list.push_back(new Item_empty_string("Slave_Running", 3));
|
||||
field_list.push_back(new Item_empty_string("Replicate_do_db", 20));
|
||||
field_list.push_back(new Item_empty_string("Replicate_ignore_db", 20));
|
||||
field_list.push_back(new Item_empty_string("Last_errno", 4));
|
||||
field_list.push_back(new Item_empty_string("Last_error", 20));
|
||||
field_list.push_back(new Item_empty_string("Skip_counter", 12));
|
||||
if(send_fields(thd, field_list, 1))
|
||||
DBUG_RETURN(-1);
|
||||
|
||||
|
@ -589,6 +595,9 @@ int show_master_info(THD* thd)
|
|||
pthread_mutex_unlock(&LOCK_slave);
|
||||
net_store_data(packet, &replicate_do_db);
|
||||
net_store_data(packet, &replicate_ignore_db);
|
||||
net_store_data(packet, (uint32)last_slave_errno);
|
||||
net_store_data(packet, last_slave_error);
|
||||
net_store_data(packet, slave_skip_counter);
|
||||
|
||||
if (my_net_write(&thd->net, (char*)thd->packet.ptr(), packet->length()))
|
||||
DBUG_RETURN(-1);
|
||||
|
@ -833,13 +842,14 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)
|
|||
if (ev)
|
||||
{
|
||||
int type_code = ev->get_type_code();
|
||||
if (ev->server_id == ::server_id)
|
||||
if (ev->server_id == ::server_id || slave_skip_counter)
|
||||
{
|
||||
if(type_code == LOAD_EVENT)
|
||||
skip_load_data_infile(net);
|
||||
|
||||
mi->inc_pos(event_len);
|
||||
flush_master_info(mi);
|
||||
--slave_skip_counter;
|
||||
delete ev;
|
||||
return 0; // avoid infinite update loops
|
||||
}
|
||||
|
@ -853,6 +863,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)
|
|||
{
|
||||
Query_log_event* qev = (Query_log_event*)ev;
|
||||
int q_len = qev->q_len;
|
||||
int expected_error,actual_error = 0;
|
||||
init_sql_alloc(&thd->mem_root, 8192,0);
|
||||
thd->db = rewrite_db((char*)qev->db);
|
||||
if (db_ok(thd->db, replicate_do_db, replicate_ignore_db))
|
||||
|
@ -869,19 +880,22 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)
|
|||
thd->net.last_error[0] = 0;
|
||||
thd->slave_proxy_id = qev->thread_id; // for temp tables
|
||||
mysql_parse(thd, thd->query, q_len);
|
||||
int expected_error,actual_error;
|
||||
if ((expected_error = qev->error_code) !=
|
||||
(actual_error = thd->net.last_errno) && expected_error)
|
||||
{
|
||||
sql_print_error("Slave: did not get the expected error\
|
||||
running query from master - expected: '%s', got '%s'",
|
||||
ER(expected_error),
|
||||
actual_error ? ER(actual_error):"no error"
|
||||
const char* errmsg = "Slave: did not get the expected error\
|
||||
running query from master - expected: '%s', got '%s'";
|
||||
sql_print_error(errmsg, ER(expected_error),
|
||||
actual_error ? thd->net.last_error:"no error"
|
||||
);
|
||||
thd->query_error = 1;
|
||||
}
|
||||
else if (expected_error == actual_error)
|
||||
thd->query_error = 0;
|
||||
{
|
||||
thd->query_error = 0;
|
||||
*last_slave_error = 0;
|
||||
last_slave_errno = 0;
|
||||
}
|
||||
}
|
||||
thd->db = 0; // prevent db from being freed
|
||||
thd->query = 0; // just to be sure
|
||||
|
@ -893,6 +907,13 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)
|
|||
{
|
||||
sql_print_error("Slave: error running query '%s' ",
|
||||
qev->query);
|
||||
last_slave_errno = actual_error ? actual_error : -1;
|
||||
my_snprintf(last_slave_error, sizeof(last_slave_error),
|
||||
"error '%s' on query '%s'",
|
||||
actual_error ? thd->net.last_error :
|
||||
"unexpected success or fatal error",
|
||||
qev->query
|
||||
);
|
||||
free_root(&thd->mem_root,0);
|
||||
delete ev;
|
||||
return 1;
|
||||
|
|
|
@ -93,6 +93,11 @@ extern bool opt_log_slave_updates ;
|
|||
pthread_handler_decl(handle_slave,arg);
|
||||
extern bool volatile abort_loop, abort_slave;
|
||||
extern bool slave_running;
|
||||
extern uint32 slave_skip_counter;
|
||||
// needed for problems when slave stops and
|
||||
// we want to restart it skipping one or more events in the master log that
|
||||
// have caused errors, and have been manually applied by DBA already
|
||||
|
||||
extern pthread_t slave_real_id;
|
||||
extern MASTER_INFO glob_mi;
|
||||
extern HASH replicate_do_table, replicate_ignore_table;
|
||||
|
|
|
@ -519,34 +519,34 @@ int start_slave(THD* thd , bool net_report)
|
|||
{
|
||||
if(!thd) thd = current_thd;
|
||||
NET* net = &thd->net;
|
||||
const char* err = 0;
|
||||
int slave_errno = 0;
|
||||
if (check_access(thd, PROCESS_ACL, any_db))
|
||||
return 1;
|
||||
pthread_mutex_lock(&LOCK_slave);
|
||||
if(!slave_running)
|
||||
{
|
||||
if(init_master_info(&glob_mi))
|
||||
err = "Could not initialize master info";
|
||||
slave_errno = ER_MASTER_INFO;
|
||||
else if(server_id_supplied && *glob_mi.host)
|
||||
{
|
||||
pthread_t hThread;
|
||||
if(pthread_create(&hThread, &connection_attrib, handle_slave, 0))
|
||||
{
|
||||
err = "cannot create slave thread";
|
||||
slave_errno = ER_SLAVE_THREAD;
|
||||
}
|
||||
while(!slave_running) // slave might already be running by now
|
||||
pthread_cond_wait(&COND_slave_start, &LOCK_slave);
|
||||
}
|
||||
else
|
||||
err = "Master host not set, or server id not configured";
|
||||
slave_errno = ER_BAD_SLAVE;
|
||||
}
|
||||
else
|
||||
err = "Slave already running";
|
||||
slave_errno = ER_SLAVE_MUST_STOP;
|
||||
|
||||
pthread_mutex_unlock(&LOCK_slave);
|
||||
if(err)
|
||||
if(slave_errno)
|
||||
{
|
||||
if(net_report) send_error(net, 0, err);
|
||||
if(net_report) send_error(net, slave_errno);
|
||||
return 1;
|
||||
}
|
||||
else if(net_report)
|
||||
|
@ -559,8 +559,8 @@ int stop_slave(THD* thd, bool net_report )
|
|||
{
|
||||
if(!thd) thd = current_thd;
|
||||
NET* net = &thd->net;
|
||||
const char* err = 0;
|
||||
|
||||
int slave_errno = 0;
|
||||
|
||||
if (check_access(thd, PROCESS_ACL, any_db))
|
||||
return 1;
|
||||
|
||||
|
@ -576,14 +576,14 @@ int stop_slave(THD* thd, bool net_report )
|
|||
pthread_cond_wait(&COND_slave_stopped, &LOCK_slave);
|
||||
}
|
||||
else
|
||||
err = "Slave is not running";
|
||||
slave_errno = ER_SLAVE_NOT_RUNNING;
|
||||
|
||||
pthread_mutex_unlock(&LOCK_slave);
|
||||
thd->proc_info = 0;
|
||||
|
||||
if(err)
|
||||
if(slave_errno)
|
||||
{
|
||||
if(net_report) send_error(net, 0, err);
|
||||
if(net_report) send_error(net, slave_errno);
|
||||
return 1;
|
||||
}
|
||||
else if(net_report)
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#define YYMAXDEPTH 3200 /* Because of 64K stack */
|
||||
#define Lex current_lex
|
||||
#include "mysql_priv.h"
|
||||
#include "slave.h"
|
||||
#include "sql_acl.h"
|
||||
#include "lex_symbol.h"
|
||||
#include <myisam.h>
|
||||
|
@ -408,6 +409,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
|
|||
%token SQL_AUTO_IS_NULL
|
||||
%token SQL_SAFE_UPDATES
|
||||
%token SQL_QUOTE_SHOW_CREATE
|
||||
%token SQL_SLAVE_SKIP_COUNTER
|
||||
|
||||
%left SET_VAR
|
||||
%left OR_OR_CONCAT OR
|
||||
|
@ -2662,6 +2664,15 @@ option_value:
|
|||
if (item->fix_fields(current_thd,0) || item->update())
|
||||
YYABORT;
|
||||
}
|
||||
| SQL_SLAVE_SKIP_COUNTER equal ULONG_NUM
|
||||
{
|
||||
pthread_mutex_lock(&LOCK_slave);
|
||||
if(slave_running)
|
||||
send_error(¤t_thd->net, ER_SLAVE_MUST_STOP);
|
||||
else
|
||||
slave_skip_counter = $3;
|
||||
pthread_mutex_unlock(&LOCK_slave);
|
||||
}
|
||||
|
||||
text_or_password:
|
||||
TEXT_STRING { $$=$1.str;}
|
||||
|
|
Loading…
Reference in a new issue