Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
e386d0e1
Commit
e386d0e1
authored
Jul 06, 2003
by
guilhem@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-4.0
into mysql.com:/home/mysql_src/mysql-4.0
parents
7be1beb2
9c73d91d
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
335 additions
and
45 deletions
+335
-45
libmysqld/lib_sql.cc
libmysqld/lib_sql.cc
+4
-4
mysql-test/r/rpl_flush_log_loop.result
mysql-test/r/rpl_flush_log_loop.result
+1
-1
mysql-test/r/rpl_log.result
mysql-test/r/rpl_log.result
+1
-1
mysql-test/r/rpl_max_relay_size.result
mysql-test/r/rpl_max_relay_size.result
+61
-0
mysql-test/r/rpl_rotate_logs.result
mysql-test/r/rpl_rotate_logs.result
+2
-4
mysql-test/t/rpl_max_relay_size.test
mysql-test/t/rpl_max_relay_size.test
+81
-0
mysql-test/t/rpl_rotate_logs-master.opt
mysql-test/t/rpl_rotate_logs-master.opt
+1
-1
sql/log.cc
sql/log.cc
+57
-15
sql/mysql_priv.h
sql/mysql_priv.h
+4
-3
sql/mysqld.cc
sql/mysqld.cc
+19
-11
sql/set_var.cc
sql/set_var.cc
+29
-1
sql/slave.cc
sql/slave.cc
+51
-1
sql/slave.h
sql/slave.h
+1
-0
sql/sql_class.h
sql/sql_class.h
+15
-3
sql/sql_parse.cc
sql/sql_parse.cc
+8
-0
No files found.
libmysqld/lib_sql.cc
View file @
e386d0e1
...
@@ -511,17 +511,17 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups)
...
@@ -511,17 +511,17 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups)
/* Setup log files */
/* Setup log files */
if
(
opt_log
)
if
(
opt_log
)
open_log
(
&
mysql_log
,
glob_hostname
,
opt_logname
,
".log"
,
NullS
,
open_log
(
&
mysql_log
,
glob_hostname
,
opt_logname
,
".log"
,
NullS
,
LOG_NORMAL
);
LOG_NORMAL
,
0
,
0
,
0
);
if
(
opt_update_log
)
if
(
opt_update_log
)
{
{
open_log
(
&
mysql_update_log
,
glob_hostname
,
opt_update_logname
,
""
,
open_log
(
&
mysql_update_log
,
glob_hostname
,
opt_update_logname
,
""
,
NullS
,
LOG_NEW
);
NullS
,
LOG_NEW
,
0
,
0
,
0
);
using_update_log
=
1
;
using_update_log
=
1
;
}
}
if
(
opt_slow_log
)
if
(
opt_slow_log
)
open_log
(
&
mysql_slow_log
,
glob_hostname
,
opt_slow_logname
,
"-slow.log"
,
open_log
(
&
mysql_slow_log
,
glob_hostname
,
opt_slow_logname
,
"-slow.log"
,
NullS
,
LOG_NORMAL
);
NullS
,
LOG_NORMAL
,
0
,
0
,
0
);
if
(
ha_init
())
if
(
ha_init
())
{
{
sql_print_error
(
"Can't init databases"
);
sql_print_error
(
"Can't init databases"
);
...
@@ -586,7 +586,7 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups)
...
@@ -586,7 +586,7 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups)
opt_bin_logname
=
my_strdup
(
tmp
,
MYF
(
MY_WME
));
opt_bin_logname
=
my_strdup
(
tmp
,
MYF
(
MY_WME
));
}
}
open_log
(
&
mysql_bin_log
,
glob_hostname
,
opt_bin_logname
,
"-bin"
,
open_log
(
&
mysql_bin_log
,
glob_hostname
,
opt_bin_logname
,
"-bin"
,
opt_binlog_index_name
,
LOG_BIN
);
opt_binlog_index_name
,
LOG_BIN
,
0
,
0
,
max_binlog_size
);
using_update_log
=
1
;
using_update_log
=
1
;
}
}
...
...
mysql-test/r/rpl_flush_log_loop.result
View file @
e386d0e1
...
@@ -14,4 +14,4 @@ slave start;
...
@@ -14,4 +14,4 @@ slave start;
flush logs;
flush logs;
show slave status;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root SLAVE_PORT 60 slave-bin.001 79 relay-log.00
1
119 slave-bin.001 Yes Yes 0 0 79 119
127.0.0.1 root SLAVE_PORT 60 slave-bin.001 79 relay-log.00
2
119 slave-bin.001 Yes Yes 0 0 79 119
mysql-test/r/rpl_log.result
View file @
e386d0e1
...
@@ -93,6 +93,6 @@ slave-bin.002 62 Query 1 168 use test; insert into t1 values (1)
...
@@ -93,6 +93,6 @@ slave-bin.002 62 Query 1 168 use test; insert into t1 values (1)
slave-bin.002 122 Query 1 228 use test; drop table t1
slave-bin.002 122 Query 1 228 use test; drop table t1
show slave status;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root MASTER_PORT 1 master-bin.002 276 slave-relay-bin.00
2 1563 master-bin.002 Yes Yes 0 0 276 1563
127.0.0.1 root MASTER_PORT 1 master-bin.002 276 slave-relay-bin.00
3 211 master-bin.002 Yes Yes 0 0 276 211
show binlog events in 'slave-bin.005' from 4;
show binlog events in 'slave-bin.005' from 4;
Error when executing command SHOW BINLOG EVENTS: Could not find target log
Error when executing command SHOW BINLOG EVENTS: Could not find target log
mysql-test/r/rpl_max_relay_size.result
0 → 100644
View file @
e386d0e1
slave stop;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
slave start;
stop slave;
create table t1 (a int);
drop table t1;
reset slave;
set global max_binlog_size=8192;
set global max_relay_log_size=8192-1;
select @@global.max_relay_log_size;
@@global.max_relay_log_size
4096
start slave;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root 9306 1 master-bin.001 50477 slave-relay-bin.014 1221 master-bin.001 Yes Yes 0 0 50477 1221
stop slave;
reset slave;
set global max_relay_log_size=(5*4096);
select @@global.max_relay_log_size;
@@global.max_relay_log_size
20480
start slave;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root 9306 1 master-bin.001 50477 slave-relay-bin.004 9457 master-bin.001 Yes Yes 0 0 50477 9457
stop slave;
reset slave;
set global max_relay_log_size=0;
select @@global.max_relay_log_size;
@@global.max_relay_log_size
0
start slave;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root 9306 1 master-bin.001 50477 slave-relay-bin.008 1283 master-bin.001 Yes Yes 0 0 50477 1283
stop slave;
reset slave;
flush logs;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root 9306 1 4 slave-relay-bin.001 4 No No 0 0 0 4
reset slave;
start slave;
flush logs;
create table t1 (a int);
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root 9306 1 master-bin.001 50535 slave-relay-bin.009 62 master-bin.001 Yes Yes 0 0 50535 62
flush logs;
drop table t1;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root 9306 1 master-bin.001 50583 slave-relay-bin.010 52 master-bin.001 Yes Yes 0 0 50583 52
flush logs;
show master status;
File Position Binlog_do_db Binlog_ignore_db
master-bin.002 4
mysql-test/r/rpl_rotate_logs.result
View file @
e386d0e1
...
@@ -65,17 +65,15 @@ show master logs;
...
@@ -65,17 +65,15 @@ show master logs;
Log_name
Log_name
master-bin.003
master-bin.003
master-bin.004
master-bin.004
master-bin.005
master-bin.006
show master status;
show master status;
File Position Binlog_do_db Binlog_ignore_db
File Position Binlog_do_db Binlog_ignore_db
master-bin.00
6 838
master-bin.00
4 2886
select * from t4;
select * from t4;
a
a
testing temporary tables part 2
testing temporary tables part 2
show slave status;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root MASTER_PORT 60 master-bin.00
6 838 slave-relay-bin.001 8034 master-bin.006 Yes Yes 0 0 838 8034
127.0.0.1 root MASTER_PORT 60 master-bin.00
4 2886 slave-relay-bin.001 7870 master-bin.004 Yes Yes 0 0 2886 7870
lock tables t3 read;
lock tables t3 read;
select count(*) from t3 where n >= 4;
select count(*) from t3 where n >= 4;
count(*)
count(*)
...
...
mysql-test/t/rpl_max_relay_size.test
0 → 100644
View file @
e386d0e1
# Test of options max_binlog_size and max_relay_log_size and
# how they act (if max_relay_log_size == 0, use max_binlog_size
# for relay logs too).
# Test of manual relay log rotation with FLUSH LOGS.
source
include
/
master
-
slave
.
inc
;
connection
slave
;
stop
slave
;
connection
master
;
# Generate a big enough master's binlog to cause relay log rotations
create
table
t1
(
a
int
);
let
$
1
=
800
;
disable_query_log
;
begin
;
while
(
$
1
)
{
# eval means expand $ expressions
eval
insert
into
t1
values
(
$
1
);
dec
$
1
;
}
enable_query_log
;
drop
table
t1
;
save_master_pos
;
connection
slave
;
reset
slave
;
set
global
max_binlog_size
=
8192
;
set
global
max_relay_log_size
=
8192
-
1
;
# mapped to 4096
select
@@
global
.
max_relay_log_size
;
start
slave
;
sync_with_master
;
show
slave
status
;
stop
slave
;
reset
slave
;
set
global
max_relay_log_size
=
(
5
*
4096
);
select
@@
global
.
max_relay_log_size
;
start
slave
;
sync_with_master
;
show
slave
status
;
stop
slave
;
reset
slave
;
set
global
max_relay_log_size
=
0
;
select
@@
global
.
max_relay_log_size
;
start
slave
;
sync_with_master
;
show
slave
status
;
# Tests below are mainly to ensure that we have not coded with wrong assumptions
stop
slave
;
reset
slave
;
# test of relay log rotation when the slave is stopped
# (to make sure it does not crash).
flush
logs
;
show
slave
status
;
reset
slave
;
start
slave
;
sync_with_master
;
# test of relay log rotation when the slave is started
flush
logs
;
# We have now easy way to be sure that the SQL thread has now deleted the
# log we just closed. But a trick to achieve this is do an update on the master.
connection
master
;
create
table
t1
(
a
int
);
save_master_pos
;
connection
slave
;
sync_with_master
;
show
slave
status
;
# one more rotation, to be sure Relay_log_space is correctly updated
flush
logs
;
connection
master
;
drop
table
t1
;
save_master_pos
;
connection
slave
;
sync_with_master
;
show
slave
status
;
connection
master
;
# test that the absence of relay logs does not make a master crash
flush
logs
;
show
master
status
;
mysql-test/t/rpl_rotate_logs-master.opt
View file @
e386d0e1
-O max_binlog_size=
2048
-O max_binlog_size=
4096
sql/log.cc
View file @
e386d0e1
...
@@ -133,11 +133,15 @@ int MYSQL_LOG::generate_new_name(char *new_name, const char *log_name)
...
@@ -133,11 +133,15 @@ int MYSQL_LOG::generate_new_name(char *new_name, const char *log_name)
void
MYSQL_LOG
::
init
(
enum_log_type
log_type_arg
,
void
MYSQL_LOG
::
init
(
enum_log_type
log_type_arg
,
enum
cache_type
io_cache_type_arg
,
enum
cache_type
io_cache_type_arg
,
bool
no_auto_events_arg
)
bool
no_auto_events_arg
,
ulong
max_size_arg
)
{
{
DBUG_ENTER
(
"MYSQL_LOG::init"
);
log_type
=
log_type_arg
;
log_type
=
log_type_arg
;
io_cache_type
=
io_cache_type_arg
;
io_cache_type
=
io_cache_type_arg
;
no_auto_events
=
no_auto_events_arg
;
no_auto_events
=
no_auto_events_arg
;
max_size
=
max_size_arg
;
DBUG_PRINT
(
"info"
,(
"log_type=%d max_size=%lu"
,
log_type
,
max_size
));
if
(
!
inited
)
if
(
!
inited
)
{
{
inited
=
1
;
inited
=
1
;
...
@@ -145,6 +149,7 @@ void MYSQL_LOG::init(enum_log_type log_type_arg,
...
@@ -145,6 +149,7 @@ void MYSQL_LOG::init(enum_log_type log_type_arg,
(
void
)
pthread_mutex_init
(
&
LOCK_index
,
MY_MUTEX_INIT_SLOW
);
(
void
)
pthread_mutex_init
(
&
LOCK_index
,
MY_MUTEX_INIT_SLOW
);
(
void
)
pthread_cond_init
(
&
update_cond
,
0
);
(
void
)
pthread_cond_init
(
&
update_cond
,
0
);
}
}
DBUG_VOID_RETURN
;
}
}
...
@@ -165,7 +170,8 @@ void MYSQL_LOG::init(enum_log_type log_type_arg,
...
@@ -165,7 +170,8 @@ void MYSQL_LOG::init(enum_log_type log_type_arg,
bool
MYSQL_LOG
::
open
(
const
char
*
log_name
,
enum_log_type
log_type_arg
,
bool
MYSQL_LOG
::
open
(
const
char
*
log_name
,
enum_log_type
log_type_arg
,
const
char
*
new_name
,
const
char
*
index_file_name_arg
,
const
char
*
new_name
,
const
char
*
index_file_name_arg
,
enum
cache_type
io_cache_type_arg
,
enum
cache_type
io_cache_type_arg
,
bool
no_auto_events_arg
)
bool
no_auto_events_arg
,
ulong
max_size
)
{
{
char
buff
[
512
];
char
buff
[
512
];
File
file
=
-
1
,
index_file_nr
=
-
1
;
File
file
=
-
1
,
index_file_nr
=
-
1
;
...
@@ -178,7 +184,7 @@ bool MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg,
...
@@ -178,7 +184,7 @@ bool MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg,
if
(
!
inited
&&
log_type_arg
==
LOG_BIN
&&
*
fn_ext
(
log_name
))
if
(
!
inited
&&
log_type_arg
==
LOG_BIN
&&
*
fn_ext
(
log_name
))
no_rotate
=
1
;
no_rotate
=
1
;
init
(
log_type_arg
,
io_cache_type_arg
,
no_auto_events_arg
);
init
(
log_type_arg
,
io_cache_type_arg
,
no_auto_events_arg
,
max_size
);
if
(
!
(
name
=
my_strdup
(
log_name
,
MYF
(
MY_WME
))))
if
(
!
(
name
=
my_strdup
(
log_name
,
MYF
(
MY_WME
))))
goto
err
;
goto
err
;
...
@@ -577,7 +583,7 @@ bool MYSQL_LOG::reset_logs(THD* thd)
...
@@ -577,7 +583,7 @@ bool MYSQL_LOG::reset_logs(THD* thd)
if
(
!
thd
->
slave_thread
)
if
(
!
thd
->
slave_thread
)
need_start_event
=
1
;
need_start_event
=
1
;
open
(
save_name
,
save_log_type
,
0
,
index_file_name
,
open
(
save_name
,
save_log_type
,
0
,
index_file_name
,
io_cache_type
,
no_auto_events
);
io_cache_type
,
no_auto_events
,
max_size
);
my_free
((
gptr
)
save_name
,
MYF
(
0
));
my_free
((
gptr
)
save_name
,
MYF
(
0
));
err:
err:
...
@@ -802,8 +808,12 @@ void MYSQL_LOG::new_file(bool need_lock)
...
@@ -802,8 +808,12 @@ void MYSQL_LOG::new_file(bool need_lock)
char
new_name
[
FN_REFLEN
],
*
new_name_ptr
,
*
old_name
;
char
new_name
[
FN_REFLEN
],
*
new_name_ptr
,
*
old_name
;
enum_log_type
save_log_type
;
enum_log_type
save_log_type
;
DBUG_ENTER
(
"MYSQL_LOG::new_file"
);
if
(
!
is_open
())
if
(
!
is_open
())
return
;
// Should never happen
{
DBUG_PRINT
(
"info"
,(
"log is closed"
));
DBUG_VOID_RETURN
;
}
if
(
need_lock
)
if
(
need_lock
)
{
{
...
@@ -865,8 +875,16 @@ void MYSQL_LOG::new_file(bool need_lock)
...
@@ -865,8 +875,16 @@ void MYSQL_LOG::new_file(bool need_lock)
save_log_type
=
log_type
;
save_log_type
=
log_type
;
name
=
0
;
// Don't free name
name
=
0
;
// Don't free name
close
();
close
();
/*
if (save_log_type == LOG_BIN)
{
printf("after close, before open; I wait for 20 seconds\n");
sleep(20);
printf("sleep finished, opening\n");
}
*/
open
(
old_name
,
save_log_type
,
new_name_ptr
,
index_file_name
,
io_cache_type
,
open
(
old_name
,
save_log_type
,
new_name_ptr
,
index_file_name
,
io_cache_type
,
no_auto_events
);
no_auto_events
,
max_size
);
my_free
(
old_name
,
MYF
(
0
));
my_free
(
old_name
,
MYF
(
0
));
end:
end:
...
@@ -875,6 +893,7 @@ end:
...
@@ -875,6 +893,7 @@ end:
pthread_mutex_unlock
(
&
LOCK_index
);
pthread_mutex_unlock
(
&
LOCK_index
);
pthread_mutex_unlock
(
&
LOCK_log
);
pthread_mutex_unlock
(
&
LOCK_log
);
}
}
DBUG_VOID_RETURN
;
}
}
...
@@ -882,6 +901,7 @@ bool MYSQL_LOG::append(Log_event* ev)
...
@@ -882,6 +901,7 @@ bool MYSQL_LOG::append(Log_event* ev)
{
{
bool
error
=
0
;
bool
error
=
0
;
pthread_mutex_lock
(
&
LOCK_log
);
pthread_mutex_lock
(
&
LOCK_log
);
DBUG_ENTER
(
"MYSQL_LOG::append"
);
DBUG_ASSERT
(
log_file
.
type
==
SEQ_READ_APPEND
);
DBUG_ASSERT
(
log_file
.
type
==
SEQ_READ_APPEND
);
/*
/*
...
@@ -894,7 +914,8 @@ bool MYSQL_LOG::append(Log_event* ev)
...
@@ -894,7 +914,8 @@ bool MYSQL_LOG::append(Log_event* ev)
goto
err
;
goto
err
;
}
}
bytes_written
+=
ev
->
get_event_len
();
bytes_written
+=
ev
->
get_event_len
();
if
((
uint
)
my_b_append_tell
(
&
log_file
)
>
max_binlog_size
)
DBUG_PRINT
(
"info"
,(
"max_size=%lu"
,
max_size
));
if
((
uint
)
my_b_append_tell
(
&
log_file
)
>
max_size
)
{
{
pthread_mutex_lock
(
&
LOCK_index
);
pthread_mutex_lock
(
&
LOCK_index
);
new_file
(
0
);
new_file
(
0
);
...
@@ -904,13 +925,14 @@ bool MYSQL_LOG::append(Log_event* ev)
...
@@ -904,13 +925,14 @@ bool MYSQL_LOG::append(Log_event* ev)
err:
err:
pthread_mutex_unlock
(
&
LOCK_log
);
pthread_mutex_unlock
(
&
LOCK_log
);
signal_update
();
// Safe as we don't call close
signal_update
();
// Safe as we don't call close
return
error
;
DBUG_RETURN
(
error
)
;
}
}
bool
MYSQL_LOG
::
appendv
(
const
char
*
buf
,
uint
len
,...)
bool
MYSQL_LOG
::
appendv
(
const
char
*
buf
,
uint
len
,...)
{
{
bool
error
=
0
;
bool
error
=
0
;
DBUG_ENTER
(
"MYSQL_LOG::appendv"
);
va_list
(
args
);
va_list
(
args
);
va_start
(
args
,
len
);
va_start
(
args
,
len
);
...
@@ -926,8 +948,8 @@ bool MYSQL_LOG::appendv(const char* buf, uint len,...)
...
@@ -926,8 +948,8 @@ bool MYSQL_LOG::appendv(const char* buf, uint len,...)
}
}
bytes_written
+=
len
;
bytes_written
+=
len
;
}
while
((
buf
=
va_arg
(
args
,
const
char
*
))
&&
(
len
=
va_arg
(
args
,
uint
)));
}
while
((
buf
=
va_arg
(
args
,
const
char
*
))
&&
(
len
=
va_arg
(
args
,
uint
)));
DBUG_PRINT
(
"info"
,(
"max_size=%lu"
,
max_size
));
if
((
uint
)
my_b_append_tell
(
&
log_file
)
>
max_
binlog_
size
)
if
((
uint
)
my_b_append_tell
(
&
log_file
)
>
max_size
)
{
{
pthread_mutex_lock
(
&
LOCK_index
);
pthread_mutex_lock
(
&
LOCK_index
);
new_file
(
0
);
new_file
(
0
);
...
@@ -938,7 +960,7 @@ err:
...
@@ -938,7 +960,7 @@ err:
pthread_mutex_unlock
(
&
LOCK_log
);
pthread_mutex_unlock
(
&
LOCK_log
);
if
(
!
error
)
if
(
!
error
)
signal_update
();
signal_update
();
return
error
;
DBUG_RETURN
(
error
)
;
}
}
...
@@ -1188,8 +1210,9 @@ bool MYSQL_LOG::write(Log_event* event_info)
...
@@ -1188,8 +1210,9 @@ bool MYSQL_LOG::write(Log_event* event_info)
called_handler_commit
=
1
;
called_handler_commit
=
1
;
}
}
}
}
/* we wrote to the real log, check automatic rotation */
/* We wrote to the real log, check automatic rotation; */
should_rotate
=
(
my_b_tell
(
file
)
>=
(
my_off_t
)
max_binlog_size
);
DBUG_PRINT
(
"info"
,(
"max_size=%lu"
,
max_size
));
should_rotate
=
(
my_b_tell
(
file
)
>=
(
my_off_t
)
max_size
);
}
}
error
=
0
;
error
=
0
;
...
@@ -1319,7 +1342,8 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache)
...
@@ -1319,7 +1342,8 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache)
log_file
.
pos_in_file
)))
log_file
.
pos_in_file
)))
goto
err
;
goto
err
;
signal_update
();
signal_update
();
if
(
my_b_tell
(
&
log_file
)
>=
(
my_off_t
)
max_binlog_size
)
DBUG_PRINT
(
"info"
,(
"max_size=%lu"
,
max_size
));
if
(
my_b_tell
(
&
log_file
)
>=
(
my_off_t
)
max_size
)
{
{
pthread_mutex_lock
(
&
LOCK_index
);
pthread_mutex_lock
(
&
LOCK_index
);
new_file
(
0
);
// inside mutex
new_file
(
0
);
// inside mutex
...
@@ -1563,6 +1587,24 @@ void MYSQL_LOG::close(bool exiting)
...
@@ -1563,6 +1587,24 @@ void MYSQL_LOG::close(bool exiting)
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
void
MYSQL_LOG
::
set_max_size
(
ulong
max_size_arg
)
{
/*
We need to take locks, otherwise this may happen:
new_file() is called, calls open(old_max_size), then before open() starts,
set_max_size() sets max_size to max_size_arg, then open() starts and
uses the old_max_size argument, so max_size_arg has been overwritten and
it's like if the SET command was never run.
*/
if
(
is_open
())
{
pthread_mutex_lock
(
&
LOCK_log
);
pthread_mutex_lock
(
&
LOCK_index
);
max_size
=
max_size_arg
;
pthread_mutex_unlock
(
&
LOCK_index
);
pthread_mutex_unlock
(
&
LOCK_log
);
}
}
/*
/*
Check if a string is a valid number
Check if a string is a valid number
...
...
sql/mysql_priv.h
View file @
e386d0e1
...
@@ -618,8 +618,8 @@ bool fn_format_relative_to_data_home(my_string to, const char *name,
...
@@ -618,8 +618,8 @@ bool fn_format_relative_to_data_home(my_string to, const char *name,
bool
open_log
(
MYSQL_LOG
*
log
,
const
char
*
hostname
,
bool
open_log
(
MYSQL_LOG
*
log
,
const
char
*
hostname
,
const
char
*
opt_name
,
const
char
*
extension
,
const
char
*
opt_name
,
const
char
*
extension
,
const
char
*
index_file_name
,
const
char
*
index_file_name
,
enum_log_type
type
,
bool
read_append
=
0
,
enum_log_type
type
,
bool
read_append
,
bool
no_auto_events
=
0
);
bool
no_auto_events
,
ulong
max_size
);
/* mysqld.cc */
/* mysqld.cc */
void
clear_error_message
(
THD
*
thd
);
void
clear_error_message
(
THD
*
thd
);
...
@@ -666,7 +666,8 @@ extern ulong max_insert_delayed_threads, max_user_connections;
...
@@ -666,7 +666,8 @@ extern ulong max_insert_delayed_threads, max_user_connections;
extern
ulong
long_query_count
,
what_to_log
,
flush_time
,
opt_sql_mode
;
extern
ulong
long_query_count
,
what_to_log
,
flush_time
,
opt_sql_mode
;
extern
ulong
query_buff_size
,
thread_stack
,
thread_stack_min
;
extern
ulong
query_buff_size
,
thread_stack
,
thread_stack_min
;
extern
ulong
binlog_cache_size
,
max_binlog_cache_size
,
open_files_limit
;
extern
ulong
binlog_cache_size
,
max_binlog_cache_size
,
open_files_limit
;
extern
ulong
max_binlog_size
,
rpl_recovery_rank
,
thread_cache_size
;
extern
ulong
max_binlog_size
,
max_relay_log_size
;
extern
ulong
rpl_recovery_rank
,
thread_cache_size
;
extern
ulong
com_stat
[(
uint
)
SQLCOM_END
],
com_other
,
back_log
;
extern
ulong
com_stat
[(
uint
)
SQLCOM_END
],
com_other
,
back_log
;
extern
ulong
specialflag
,
current_pid
;
extern
ulong
specialflag
,
current_pid
;
...
...
sql/mysqld.cc
View file @
e386d0e1
...
@@ -354,7 +354,7 @@ ulong table_cache_size,
...
@@ -354,7 +354,7 @@ ulong table_cache_size,
query_buff_size
,
query_buff_size
,
slow_launch_time
=
2L
,
slow_launch_time
=
2L
,
slave_open_temp_tables
=
0
,
slave_open_temp_tables
=
0
,
open_files_limit
=
0
,
max_binlog_size
;
open_files_limit
=
0
,
max_binlog_size
,
max_relay_log_size
;
ulong
com_stat
[(
uint
)
SQLCOM_END
],
com_other
;
ulong
com_stat
[(
uint
)
SQLCOM_END
],
com_other
;
ulong
slave_net_timeout
;
ulong
slave_net_timeout
;
ulong
thread_cache_size
=
0
,
binlog_cache_size
=
0
,
max_binlog_cache_size
=
0
;
ulong
thread_cache_size
=
0
,
binlog_cache_size
=
0
,
max_binlog_cache_size
=
0
;
...
@@ -1950,7 +1950,7 @@ bool open_log(MYSQL_LOG *log, const char *hostname,
...
@@ -1950,7 +1950,7 @@ bool open_log(MYSQL_LOG *log, const char *hostname,
const
char
*
opt_name
,
const
char
*
extension
,
const
char
*
opt_name
,
const
char
*
extension
,
const
char
*
index_file_name
,
const
char
*
index_file_name
,
enum_log_type
type
,
bool
read_append
,
enum_log_type
type
,
bool
read_append
,
bool
no_auto_events
)
bool
no_auto_events
,
ulong
max_size
)
{
{
char
tmp
[
FN_REFLEN
];
char
tmp
[
FN_REFLEN
];
if
(
!
opt_name
||
!
opt_name
[
0
])
if
(
!
opt_name
||
!
opt_name
[
0
])
...
@@ -1976,7 +1976,7 @@ bool open_log(MYSQL_LOG *log, const char *hostname,
...
@@ -1976,7 +1976,7 @@ bool open_log(MYSQL_LOG *log, const char *hostname,
}
}
return
log
->
open
(
opt_name
,
type
,
0
,
index_file_name
,
return
log
->
open
(
opt_name
,
type
,
0
,
index_file_name
,
(
read_append
)
?
SEQ_READ_APPEND
:
WRITE_CACHE
,
(
read_append
)
?
SEQ_READ_APPEND
:
WRITE_CACHE
,
no_auto_events
);
no_auto_events
,
max_size
);
}
}
...
@@ -2196,17 +2196,17 @@ int main(int argc, char **argv)
...
@@ -2196,17 +2196,17 @@ int main(int argc, char **argv)
/* Setup log files */
/* Setup log files */
if
(
opt_log
)
if
(
opt_log
)
open_log
(
&
mysql_log
,
glob_hostname
,
opt_logname
,
".log"
,
NullS
,
open_log
(
&
mysql_log
,
glob_hostname
,
opt_logname
,
".log"
,
NullS
,
LOG_NORMAL
);
LOG_NORMAL
,
0
,
0
,
0
);
if
(
opt_update_log
)
if
(
opt_update_log
)
{
{
open_log
(
&
mysql_update_log
,
glob_hostname
,
opt_update_logname
,
""
,
open_log
(
&
mysql_update_log
,
glob_hostname
,
opt_update_logname
,
""
,
NullS
,
LOG_NEW
);
NullS
,
LOG_NEW
,
0
,
0
,
0
);
using_update_log
=
1
;
using_update_log
=
1
;
}
}
if
(
opt_slow_log
)
if
(
opt_slow_log
)
open_log
(
&
mysql_slow_log
,
glob_hostname
,
opt_slow_logname
,
"-slow.log"
,
open_log
(
&
mysql_slow_log
,
glob_hostname
,
opt_slow_logname
,
"-slow.log"
,
NullS
,
LOG_NORMAL
);
NullS
,
LOG_NORMAL
,
0
,
0
,
0
);
if
(
opt_error_log
)
if
(
opt_error_log
)
{
{
...
@@ -2321,7 +2321,7 @@ The server will not act as a slave.");
...
@@ -2321,7 +2321,7 @@ The server will not act as a slave.");
if
(
opt_bin_log
)
if
(
opt_bin_log
)
{
{
open_log
(
&
mysql_bin_log
,
glob_hostname
,
opt_bin_logname
,
"-bin"
,
open_log
(
&
mysql_bin_log
,
glob_hostname
,
opt_bin_logname
,
"-bin"
,
opt_binlog_index_name
,
LOG_BIN
);
opt_binlog_index_name
,
LOG_BIN
,
0
,
0
,
max_binlog_size
);
using_update_log
=
1
;
using_update_log
=
1
;
}
}
else
if
(
opt_log_slave_updates
)
else
if
(
opt_log_slave_updates
)
...
@@ -3156,8 +3156,8 @@ enum options {
...
@@ -3156,8 +3156,8 @@ enum options {
OPT_MAX_BINLOG_CACHE_SIZE
,
OPT_MAX_BINLOG_SIZE
,
OPT_MAX_BINLOG_CACHE_SIZE
,
OPT_MAX_BINLOG_SIZE
,
OPT_MAX_CONNECTIONS
,
OPT_MAX_CONNECT_ERRORS
,
OPT_MAX_CONNECTIONS
,
OPT_MAX_CONNECT_ERRORS
,
OPT_MAX_DELAYED_THREADS
,
OPT_MAX_HEP_TABLE_SIZE
,
OPT_MAX_DELAYED_THREADS
,
OPT_MAX_HEP_TABLE_SIZE
,
OPT_MAX_JOIN_SIZE
,
OPT_MAX_
SORT_LENGTH
,
OPT_MAX_SEEKS_FOR_KEY
,
OPT_MAX_JOIN_SIZE
,
OPT_MAX_
RELAY_LOG_SIZE
,
OPT_MAX_SORT_LENGTH
,
OPT_MAX_TMP_TABLES
,
OPT_MAX_USER_CONNECTIONS
,
OPT_MAX_
SEEKS_FOR_KEY
,
OPT_MAX_
TMP_TABLES
,
OPT_MAX_USER_CONNECTIONS
,
OPT_MAX_WRITE_LOCK_COUNT
,
OPT_BULK_INSERT_BUFFER_SIZE
,
OPT_MAX_WRITE_LOCK_COUNT
,
OPT_BULK_INSERT_BUFFER_SIZE
,
OPT_MYISAM_BLOCK_SIZE
,
OPT_MYISAM_MAX_EXTRA_SORT_FILE_SIZE
,
OPT_MYISAM_BLOCK_SIZE
,
OPT_MYISAM_MAX_EXTRA_SORT_FILE_SIZE
,
OPT_MYISAM_MAX_SORT_FILE_SIZE
,
OPT_MYISAM_SORT_BUFFER_SIZE
,
OPT_MYISAM_MAX_SORT_FILE_SIZE
,
OPT_MYISAM_SORT_BUFFER_SIZE
,
...
@@ -3809,9 +3809,11 @@ replicating a LOAD DATA INFILE command",
...
@@ -3809,9 +3809,11 @@ replicating a LOAD DATA INFILE command",
(
gptr
*
)
&
max_binlog_cache_size
,
(
gptr
*
)
&
max_binlog_cache_size
,
0
,
(
gptr
*
)
&
max_binlog_cache_size
,
(
gptr
*
)
&
max_binlog_cache_size
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
~
0L
,
IO_SIZE
,
~
0L
,
0
,
IO_SIZE
,
0
},
GET_ULONG
,
REQUIRED_ARG
,
~
0L
,
IO_SIZE
,
~
0L
,
0
,
IO_SIZE
,
0
},
{
"max_binlog_size"
,
OPT_MAX_BINLOG_SIZE
,
{
"max_binlog_size"
,
OPT_MAX_BINLOG_SIZE
,
"Binary log will be rotated automatically when the size crosses the limit."
,
"Binary log will be rotated automatically when the size exceeds this \
value. Will also apply to relay logs if max_relay_log_size is 0. \
The minimum value for this variable is 4096."
,
(
gptr
*
)
&
max_binlog_size
,
(
gptr
*
)
&
max_binlog_size
,
0
,
GET_ULONG
,
(
gptr
*
)
&
max_binlog_size
,
(
gptr
*
)
&
max_binlog_size
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
1024
*
1024L
*
1024L
,
1024
,
1024
*
1024L
*
1024L
,
0
,
1
,
0
},
REQUIRED_ARG
,
1024
*
1024L
*
1024L
,
IO_SIZE
,
1024
*
1024L
*
1024L
,
0
,
IO_SIZE
,
0
},
{
"max_connections"
,
OPT_MAX_CONNECTIONS
,
{
"max_connections"
,
OPT_MAX_CONNECTIONS
,
"The number of simultaneous clients allowed."
,
(
gptr
*
)
&
max_connections
,
"The number of simultaneous clients allowed."
,
(
gptr
*
)
&
max_connections
,
(
gptr
*
)
&
max_connections
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
100
,
1
,
16384
,
0
,
1
,
(
gptr
*
)
&
max_connections
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
100
,
1
,
16384
,
0
,
1
,
...
@@ -3834,6 +3836,12 @@ replicating a LOAD DATA INFILE command",
...
@@ -3834,6 +3836,12 @@ replicating a LOAD DATA INFILE command",
(
gptr
*
)
&
global_system_variables
.
max_join_size
,
(
gptr
*
)
&
global_system_variables
.
max_join_size
,
(
gptr
*
)
&
max_system_variables
.
max_join_size
,
0
,
GET_HA_ROWS
,
REQUIRED_ARG
,
(
gptr
*
)
&
max_system_variables
.
max_join_size
,
0
,
GET_HA_ROWS
,
REQUIRED_ARG
,
~
0L
,
1
,
~
0L
,
0
,
1
,
0
},
~
0L
,
1
,
~
0L
,
0
,
1
,
0
},
{
"max_relay_log_size"
,
OPT_MAX_RELAY_LOG_SIZE
,
"If non-zero: relay log will be rotated automatically when the size exceeds \
this value; if zero (the default): when the size exceeds max_binlog_size. \
0 expected, the minimum value for this variable is 4096."
,
(
gptr
*
)
&
max_relay_log_size
,
(
gptr
*
)
&
max_relay_log_size
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
0L
,
0L
,
1024
*
1024L
*
1024L
,
0
,
IO_SIZE
,
0
},
{
"max_seeks_for_key"
,
OPT_MAX_SEEKS_FOR_KEY
,
{
"max_seeks_for_key"
,
OPT_MAX_SEEKS_FOR_KEY
,
"Limit assumed max number of seeks when looking up rows based on a key"
,
"Limit assumed max number of seeks when looking up rows based on a key"
,
(
gptr
*
)
&
global_system_variables
.
max_seeks_for_key
,
(
gptr
*
)
&
global_system_variables
.
max_seeks_for_key
,
...
...
sql/set_var.cc
View file @
e386d0e1
...
@@ -84,6 +84,8 @@ static void fix_query_cache_size(THD *thd, enum_var_type type);
...
@@ -84,6 +84,8 @@ static void fix_query_cache_size(THD *thd, enum_var_type type);
static
void
fix_key_buffer_size
(
THD
*
thd
,
enum_var_type
type
);
static
void
fix_key_buffer_size
(
THD
*
thd
,
enum_var_type
type
);
static
void
fix_myisam_max_extra_sort_file_size
(
THD
*
thd
,
enum_var_type
type
);
static
void
fix_myisam_max_extra_sort_file_size
(
THD
*
thd
,
enum_var_type
type
);
static
void
fix_myisam_max_sort_file_size
(
THD
*
thd
,
enum_var_type
type
);
static
void
fix_myisam_max_sort_file_size
(
THD
*
thd
,
enum_var_type
type
);
static
void
fix_max_binlog_size
(
THD
*
thd
,
enum_var_type
type
);
static
void
fix_max_relay_log_size
(
THD
*
thd
,
enum_var_type
type
);
/*
/*
Variable definition list
Variable definition list
...
@@ -142,7 +144,8 @@ sys_var_thd_ulong sys_max_allowed_packet("max_allowed_packet",
...
@@ -142,7 +144,8 @@ sys_var_thd_ulong sys_max_allowed_packet("max_allowed_packet",
sys_var_long_ptr
sys_max_binlog_cache_size
(
"max_binlog_cache_size"
,
sys_var_long_ptr
sys_max_binlog_cache_size
(
"max_binlog_cache_size"
,
&
max_binlog_cache_size
);
&
max_binlog_cache_size
);
sys_var_long_ptr
sys_max_binlog_size
(
"max_binlog_size"
,
sys_var_long_ptr
sys_max_binlog_size
(
"max_binlog_size"
,
&
max_binlog_size
);
&
max_binlog_size
,
fix_max_binlog_size
);
sys_var_long_ptr
sys_max_connections
(
"max_connections"
,
sys_var_long_ptr
sys_max_connections
(
"max_connections"
,
&
max_connections
);
&
max_connections
);
sys_var_long_ptr
sys_max_connect_errors
(
"max_connect_errors"
,
sys_var_long_ptr
sys_max_connect_errors
(
"max_connect_errors"
,
...
@@ -161,6 +164,9 @@ sys_var_thd_ha_rows sys_sql_max_join_size("sql_max_join_size",
...
@@ -161,6 +164,9 @@ sys_var_thd_ha_rows sys_sql_max_join_size("sql_max_join_size",
&
SV
::
max_join_size
,
&
SV
::
max_join_size
,
fix_max_join_size
);
fix_max_join_size
);
#endif
#endif
sys_var_long_ptr
sys_max_relay_log_size
(
"max_relay_log_size"
,
&
max_relay_log_size
,
fix_max_relay_log_size
);
sys_var_thd_ulong
sys_max_sort_length
(
"max_sort_length"
,
sys_var_thd_ulong
sys_max_sort_length
(
"max_sort_length"
,
&
SV
::
max_sort_length
);
&
SV
::
max_sort_length
);
sys_var_long_ptr
sys_max_user_connections
(
"max_user_connections"
,
sys_var_long_ptr
sys_max_user_connections
(
"max_user_connections"
,
...
@@ -350,6 +356,7 @@ sys_var *sys_variables[]=
...
@@ -350,6 +356,7 @@ sys_var *sys_variables[]=
&
sys_max_delayed_threads
,
&
sys_max_delayed_threads
,
&
sys_max_heap_table_size
,
&
sys_max_heap_table_size
,
&
sys_max_join_size
,
&
sys_max_join_size
,
&
sys_max_relay_log_size
,
&
sys_max_seeks_for_key
,
&
sys_max_seeks_for_key
,
&
sys_max_sort_length
,
&
sys_max_sort_length
,
&
sys_max_tmp_tables
,
&
sys_max_tmp_tables
,
...
@@ -495,6 +502,7 @@ struct show_var_st init_vars[]= {
...
@@ -495,6 +502,7 @@ struct show_var_st init_vars[]= {
{
sys_max_delayed_threads
.
name
,(
char
*
)
&
sys_max_delayed_threads
,
SHOW_SYS
},
{
sys_max_delayed_threads
.
name
,(
char
*
)
&
sys_max_delayed_threads
,
SHOW_SYS
},
{
sys_max_heap_table_size
.
name
,(
char
*
)
&
sys_max_heap_table_size
,
SHOW_SYS
},
{
sys_max_heap_table_size
.
name
,(
char
*
)
&
sys_max_heap_table_size
,
SHOW_SYS
},
{
sys_max_join_size
.
name
,
(
char
*
)
&
sys_max_join_size
,
SHOW_SYS
},
{
sys_max_join_size
.
name
,
(
char
*
)
&
sys_max_join_size
,
SHOW_SYS
},
{
sys_max_relay_log_size
.
name
,
(
char
*
)
&
sys_max_relay_log_size
,
SHOW_SYS
},
{
sys_max_seeks_for_key
.
name
,
(
char
*
)
&
sys_max_seeks_for_key
,
SHOW_SYS
},
{
sys_max_seeks_for_key
.
name
,
(
char
*
)
&
sys_max_seeks_for_key
,
SHOW_SYS
},
{
sys_max_sort_length
.
name
,
(
char
*
)
&
sys_max_sort_length
,
SHOW_SYS
},
{
sys_max_sort_length
.
name
,
(
char
*
)
&
sys_max_sort_length
,
SHOW_SYS
},
{
sys_max_user_connections
.
name
,(
char
*
)
&
sys_max_user_connections
,
SHOW_SYS
},
{
sys_max_user_connections
.
name
,(
char
*
)
&
sys_max_user_connections
,
SHOW_SYS
},
...
@@ -697,6 +705,26 @@ void fix_delay_key_write(THD *thd, enum_var_type type)
...
@@ -697,6 +705,26 @@ void fix_delay_key_write(THD *thd, enum_var_type type)
}
}
}
}
void
fix_max_binlog_size
(
THD
*
thd
,
enum_var_type
type
)
{
DBUG_ENTER
(
"fix_max_binlog_size"
);
DBUG_PRINT
(
"info"
,(
"max_binlog_size=%lu max_relay_log_size=%lu"
,
max_binlog_size
,
max_relay_log_size
));
mysql_bin_log
.
set_max_size
(
max_binlog_size
);
if
(
!
max_relay_log_size
)
active_mi
->
rli
.
relay_log
.
set_max_size
(
max_binlog_size
);
DBUG_VOID_RETURN
;
}
void
fix_max_relay_log_size
(
THD
*
thd
,
enum_var_type
type
)
{
DBUG_ENTER
(
"fix_max_relay_log_size"
);
DBUG_PRINT
(
"info"
,(
"max_binlog_size=%lu max_relay_log_size=%lu"
,
max_binlog_size
,
max_relay_log_size
));
active_mi
->
rli
.
relay_log
.
set_max_size
(
max_relay_log_size
?
max_relay_log_size:
max_binlog_size
);
DBUG_VOID_RETURN
;
}
bool
sys_var_long_ptr
::
update
(
THD
*
thd
,
set_var
*
var
)
bool
sys_var_long_ptr
::
update
(
THD
*
thd
,
set_var
*
var
)
{
{
...
...
sql/slave.cc
View file @
e386d0e1
...
@@ -1235,7 +1235,17 @@ int init_relay_log_info(RELAY_LOG_INFO* rli, const char* info_fname)
...
@@ -1235,7 +1235,17 @@ int init_relay_log_info(RELAY_LOG_INFO* rli, const char* info_fname)
if
(
open_log
(
&
rli
->
relay_log
,
glob_hostname
,
opt_relay_logname
,
if
(
open_log
(
&
rli
->
relay_log
,
glob_hostname
,
opt_relay_logname
,
"-relay-bin"
,
opt_relaylog_index_name
,
"-relay-bin"
,
opt_relaylog_index_name
,
LOG_BIN
,
1
/* read_append cache */
,
LOG_BIN
,
1
/* read_append cache */
,
1
/* no auto events */
))
1
/* no auto events */
,
/*
For the maximum size, we choose max_relay_log_size if it is
non-zero, max_binlog_size otherwise. If later the user does SET
GLOBAL on one of these variables, fix_max_binlog_size and
fix_max_relay_log_size will reconsider the choice (for example
if the user changes max_relay_log_size to zero, we have to
switch to using max_binlog_size for the relay log) and update
rli->relay_log.max_size (and mysql_bin_log.max_size).
*/
max_relay_log_size
?
max_relay_log_size
:
max_binlog_size
))
{
{
sql_print_error
(
"Failed in open_log() called from init_relay_log_info()"
);
sql_print_error
(
"Failed in open_log() called from init_relay_log_info()"
);
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
...
@@ -3421,6 +3431,46 @@ err:
...
@@ -3421,6 +3431,46 @@ err:
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
}
}
/*
Rotate a relay log (this is used only by FLUSH LOGS; the automatic rotation
because of size is simpler because when we do it we already have all relevant
locks; here we don't, so this function is mainly taking locks).
Returns nothing as we cannot catch any error (MYSQL_LOG::new_file() is void).
*/
void
rotate_relay_log
(
MASTER_INFO
*
mi
)
{
DBUG_ENTER
(
"rotate_relay_log"
);
RELAY_LOG_INFO
*
rli
=
&
mi
->
rli
;
/* If this server is not a slave (or RESET SLAVE has just been run) */
if
(
!
rli
->
inited
)
{
DBUG_PRINT
(
"info"
,
(
"rli->inited=0"
));
DBUG_VOID_RETURN
;
}
lock_slave_threads
(
mi
);
pthread_mutex_lock
(
&
rli
->
data_lock
);
/* If the relay log is closed, new_file() will do nothing. */
rli
->
relay_log
.
new_file
(
1
);
/*
We harvest now, because otherwise BIN_LOG_HEADER_SIZE will not immediately
be counted, so imagine a succession of FLUSH LOGS and assume the slave
threads are started:
relay_log_space decreases by the size of the deleted relay log, but does not
increase, so flush-after-flush we may become negative, which is wrong.
Even if this will be corrected as soon as a query is replicated on the slave
(because the I/O thread will then call harvest_bytes_written() which will
harvest all these BIN_LOG_HEADER_SIZE we forgot), it may give strange output
in SHOW SLAVE STATUS meanwhile. So we harvest now.
If the log is closed, then this will just harvest the last writes, probably
0 as they probably have been harvested.
*/
rli
->
relay_log
.
harvest_bytes_written
(
&
rli
->
log_space_total
);
pthread_mutex_unlock
(
&
rli
->
data_lock
);
unlock_slave_threads
(
mi
);
DBUG_VOID_RETURN
;
}
#ifdef __GNUC__
#ifdef __GNUC__
template
class
I_List_iterator
<
i_string
>;
template
class
I_List_iterator
<
i_string
>;
...
...
sql/slave.h
View file @
e386d0e1
...
@@ -402,6 +402,7 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log,ulonglong pos,
...
@@ -402,6 +402,7 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log,ulonglong pos,
int
purge_relay_logs
(
RELAY_LOG_INFO
*
rli
,
THD
*
thd
,
bool
just_reset
,
int
purge_relay_logs
(
RELAY_LOG_INFO
*
rli
,
THD
*
thd
,
bool
just_reset
,
const
char
**
errmsg
);
const
char
**
errmsg
);
void
rotate_relay_log
(
MASTER_INFO
*
mi
);
extern
"C"
pthread_handler_decl
(
handle_slave_io
,
arg
);
extern
"C"
pthread_handler_decl
(
handle_slave_io
,
arg
);
extern
"C"
pthread_handler_decl
(
handle_slave_sql
,
arg
);
extern
"C"
pthread_handler_decl
(
handle_slave_sql
,
arg
);
...
...
sql/sql_class.h
View file @
e386d0e1
...
@@ -84,6 +84,17 @@ class MYSQL_LOG {
...
@@ -84,6 +84,17 @@ class MYSQL_LOG {
bool
no_rotate
;
bool
no_rotate
;
bool
need_start_event
;
bool
need_start_event
;
bool
no_auto_events
;
// for relay binlog
bool
no_auto_events
;
// for relay binlog
/*
The max size before rotation (usable only if log_type == LOG_BIN: binary
logs and relay logs).
For a binlog, max_size should be max_binlog_size.
For a relay log, it should be max_relay_log_size if this is non-zero,
max_binlog_size otherwise.
max_size is set in init(), and dynamically changed (when one does SET
GLOBAL MAX_BINLOG_SIZE|MAX_RELAY_LOG_SIZE) by fix_max_binlog_size and
fix_max_relay_log_size).
*/
ulong
max_size
;
friend
class
Log_event
;
friend
class
Log_event
;
public:
public:
...
@@ -105,17 +116,18 @@ public:
...
@@ -105,17 +116,18 @@ public:
bytes_written
=
0
;
bytes_written
=
0
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
void
set_max_size
(
ulong
max_size_arg
);
void
signal_update
()
{
pthread_cond_broadcast
(
&
update_cond
);}
void
signal_update
()
{
pthread_cond_broadcast
(
&
update_cond
);}
void
wait_for_update
(
THD
*
thd
);
void
wait_for_update
(
THD
*
thd
);
void
set_need_start_event
()
{
need_start_event
=
1
;
}
void
set_need_start_event
()
{
need_start_event
=
1
;
}
void
init
(
enum_log_type
log_type_arg
,
void
init
(
enum_log_type
log_type_arg
,
enum
cache_type
io_cache_type_arg
=
WRITE_CACHE
,
enum
cache_type
io_cache_type_arg
,
bool
no_auto_events_arg
=
0
);
bool
no_auto_events_arg
,
ulong
max_size
);
void
cleanup
();
void
cleanup
();
bool
open
(
const
char
*
log_name
,
enum_log_type
log_type
,
bool
open
(
const
char
*
log_name
,
enum_log_type
log_type
,
const
char
*
new_name
,
const
char
*
index_file_name_arg
,
const
char
*
new_name
,
const
char
*
index_file_name_arg
,
enum
cache_type
io_cache_type_arg
,
enum
cache_type
io_cache_type_arg
,
bool
no_auto_events_arg
);
bool
no_auto_events_arg
,
ulong
max_size
);
void
new_file
(
bool
need_lock
=
1
);
void
new_file
(
bool
need_lock
=
1
);
bool
write
(
THD
*
thd
,
enum
enum_server_command
command
,
bool
write
(
THD
*
thd
,
enum
enum_server_command
command
,
const
char
*
format
,...);
const
char
*
format
,...);
...
...
sql/sql_parse.cc
View file @
e386d0e1
...
@@ -3574,10 +3574,18 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables)
...
@@ -3574,10 +3574,18 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables)
}
}
if
(
options
&
REFRESH_LOG
)
if
(
options
&
REFRESH_LOG
)
{
{
/*
Flush the normal query log, the update log, the binary log, the slow query
log, and the relay log (if it exists).
*/
mysql_log
.
new_file
(
1
);
mysql_log
.
new_file
(
1
);
mysql_update_log
.
new_file
(
1
);
mysql_update_log
.
new_file
(
1
);
mysql_bin_log
.
new_file
(
1
);
mysql_bin_log
.
new_file
(
1
);
mysql_slow_log
.
new_file
(
1
);
mysql_slow_log
.
new_file
(
1
);
LOCK_ACTIVE_MI
;
rotate_relay_log
(
active_mi
);
UNLOCK_ACTIVE_MI
;
if
(
ha_flush_logs
())
if
(
ha_flush_logs
())
result
=
1
;
result
=
1
;
if
(
flush_error_log
())
if
(
flush_error_log
())
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment