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
79095419
Commit
79095419
authored
Aug 03, 2010
by
Alfranio Correia
Browse files
Options
Browse Files
Download
Plain Diff
auto-merge mysql-5.1-security (local) --> mysql-5.1-security
parents
c65e99e0
f62e89fa
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
102 additions
and
2 deletions
+102
-2
mysql-test/suite/rpl/r/rpl_drop.result
mysql-test/suite/rpl/r/rpl_drop.result
+24
-0
mysql-test/suite/rpl/t/rpl_drop.test
mysql-test/suite/rpl/t/rpl_drop.test
+52
-1
sql/log.cc
sql/log.cc
+13
-0
sql/log.h
sql/log.h
+2
-1
sql/sql_insert.cc
sql/sql_insert.cc
+11
-0
No files found.
mysql-test/suite/rpl/r/rpl_drop.result
View file @
79095419
...
@@ -8,3 +8,27 @@ drop table if exists t1, t2;
...
@@ -8,3 +8,27 @@ drop table if exists t1, t2;
create table t1 (a int);
create table t1 (a int);
drop table t1, t2;
drop table t1, t2;
ERROR 42S02: Unknown table 't2'
ERROR 42S02: Unknown table 't2'
include/stop_slave.inc
SET @old_binlog_format= @@global.binlog_format;
SET GLOBAL binlog_format = ROW;
include/start_slave.inc
SET @old_binlog_format= @@global.binlog_format;
SET binlog_format = ROW;
CREATE TABLE t2(a INT) ENGINE=MYISAM;
CREATE TABLE t3(a INT) ENGINE=INNODB;
CREATE FUNCTION f1() RETURNS INT
BEGIN
insert into t2 values(1);
insert into t3 values(1);
return 1;
END|
CREATE TABLE t1(UNIQUE(a)) ENGINE=MYISAM SELECT 1 AS a UNION ALL SELECT f1();
ERROR 23000: Duplicate entry '1' for key 'a'
CREATE TABLE t1(UNIQUE(a)) ENGINE=INNODB SELECT 1 AS a UNION ALL SELECT f1();
ERROR 23000: Duplicate entry '1' for key 'a'
show binlog events in 'master-bin.000001' from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
DROP FUNCTION f1;
DROP TABLE t2, t3;
SET @@global.binlog_format= @old_binlog_format;
SET @@global.binlog_format= @old_binlog_format;
mysql-test/suite/rpl/t/rpl_drop.test
View file @
79095419
# Testcase for BUG#4552 (DROP on two tables, one of which does not
# Testcase for BUG#4552 (DROP on two tables, one of which does not
# exist, must be binlogged with a non-zero error code)
# exist, must be binlogged with a non-zero error code)
source
include
/
master
-
slave
.
inc
;
source
include
/
master
-
slave
.
inc
;
source
include
/
have_innodb
.
inc
;
--
disable_warnings
--
disable_warnings
drop
table
if
exists
t1
,
t2
;
drop
table
if
exists
t1
,
t2
;
--
enable_warnings
--
enable_warnings
...
@@ -10,7 +11,57 @@ drop table t1, t2;
...
@@ -10,7 +11,57 @@ drop table t1, t2;
save_master_pos
;
save_master_pos
;
connection
slave
;
connection
slave
;
sync_with_master
;
sync_with_master
;
# End of 4.1 tests
# End of 4.1 tests
# BUG#55625 RBR breaks on failing 'CREATE TABLE'
# A CREATE...SELECT that fails is written to the binary log if a non-transactional
# statement is updated. If the logging format is ROW, the CREATE statement and the
# changes are written to the binary log as distinct events and by consequence the
# created table is not rolled back in the slave.
# To fix the problem, we do not write a CREATE...SELECT that fails to the binary
# log. Howerver, the changes to non-transactional tables are not replicated and
# thus the slave goes out of sync. This should be fixed after BUG#47899.
#
# In the test case, we verify if the binary log contains no information for a
# CREATE...SELECT that fails.
connection
slave
;
--
source
include
/
stop_slave
.
inc
SET
@
old_binlog_format
=
@@
global
.
binlog_format
;
SET
GLOBAL
binlog_format
=
ROW
;
--
source
include
/
start_slave
.
inc
connection
master
;
SET
@
old_binlog_format
=
@@
global
.
binlog_format
;
SET
binlog_format
=
ROW
;
CREATE
TABLE
t2
(
a
INT
)
ENGINE
=
MYISAM
;
CREATE
TABLE
t3
(
a
INT
)
ENGINE
=
INNODB
;
delimiter
|
;
CREATE
FUNCTION
f1
()
RETURNS
INT
BEGIN
insert
into
t2
values
(
1
);
insert
into
t3
values
(
1
);
return
1
;
END
|
delimiter
;
|
let
$binlog_start
=
query_get_value
(
"SHOW MASTER STATUS"
,
Position
,
1
);
let
$binlog_file
=
query_get_value
(
"SHOW MASTER STATUS"
,
File
,
1
);
--
error
1062
CREATE
TABLE
t1
(
UNIQUE
(
a
))
ENGINE
=
MYISAM
SELECT
1
AS
a
UNION
ALL
SELECT
f1
();
--
error
1062
CREATE
TABLE
t1
(
UNIQUE
(
a
))
ENGINE
=
INNODB
SELECT
1
AS
a
UNION
ALL
SELECT
f1
();
--
source
include
/
show_binlog_events
.
inc
DROP
FUNCTION
f1
;
DROP
TABLE
t2
,
t3
;
SET
@@
global
.
binlog_format
=
@
old_binlog_format
;
--
sync_slave_with_master
SET
@@
global
.
binlog_format
=
@
old_binlog_format
;
# End of 5.1 tests
sql/log.cc
View file @
79095419
...
@@ -1628,6 +1628,19 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
...
@@ -1628,6 +1628,19 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
DBUG_RETURN
(
error
);
DBUG_RETURN
(
error
);
}
}
/**
Cleanup the cache.
@param thd The client thread that wants to clean up the cache.
*/
void
MYSQL_BIN_LOG
::
reset_gathered_updates
(
THD
*
thd
)
{
binlog_trx_data
*
const
trx_data
=
(
binlog_trx_data
*
)
thd_get_ha_data
(
thd
,
binlog_hton
);
trx_data
->
reset
();
}
void
MYSQL_BIN_LOG
::
set_write_error
(
THD
*
thd
)
void
MYSQL_BIN_LOG
::
set_write_error
(
THD
*
thd
)
{
{
DBUG_ENTER
(
"MYSQL_BIN_LOG::set_write_error"
);
DBUG_ENTER
(
"MYSQL_BIN_LOG::set_write_error"
);
...
...
sql/log.h
View file @
79095419
...
@@ -356,10 +356,11 @@ public:
...
@@ -356,10 +356,11 @@ public:
/* Use this to start writing a new log file */
/* Use this to start writing a new log file */
void
new_file
();
void
new_file
();
void
reset_gathered_updates
(
THD
*
thd
);
bool
write
(
Log_event
*
event_info
);
// binary log write
bool
write
(
Log_event
*
event_info
);
// binary log write
bool
write
(
THD
*
thd
,
IO_CACHE
*
cache
,
Log_event
*
commit_event
,
bool
incident
);
bool
write
(
THD
*
thd
,
IO_CACHE
*
cache
,
Log_event
*
commit_event
,
bool
incident
);
bool
write_incident
(
THD
*
thd
,
bool
lock
);
bool
write_incident
(
THD
*
thd
,
bool
lock
);
int
write_cache
(
IO_CACHE
*
cache
,
bool
lock_log
,
bool
flush_and_sync
);
int
write_cache
(
IO_CACHE
*
cache
,
bool
lock_log
,
bool
flush_and_sync
);
void
set_write_error
(
THD
*
thd
);
void
set_write_error
(
THD
*
thd
);
bool
check_write_error
(
THD
*
thd
);
bool
check_write_error
(
THD
*
thd
);
...
...
sql/sql_insert.cc
View file @
79095419
...
@@ -3873,6 +3873,17 @@ void select_create::abort()
...
@@ -3873,6 +3873,17 @@ void select_create::abort()
if
(
table
)
if
(
table
)
{
{
if
(
thd
->
lex
->
sql_command
==
SQLCOM_CREATE_TABLE
&&
thd
->
current_stmt_binlog_row_based
&&
!
(
thd
->
lex
->
create_info
.
options
&
HA_LEX_CREATE_TMP_TABLE
)
&&
mysql_bin_log
.
is_open
())
{
/*
This should be removed after BUG#47899.
*/
mysql_bin_log
.
reset_gathered_updates
(
thd
);
}
table
->
file
->
extra
(
HA_EXTRA_NO_IGNORE_DUP_KEY
);
table
->
file
->
extra
(
HA_EXTRA_NO_IGNORE_DUP_KEY
);
table
->
file
->
extra
(
HA_EXTRA_WRITE_CANNOT_REPLACE
);
table
->
file
->
extra
(
HA_EXTRA_WRITE_CANNOT_REPLACE
);
if
(
!
create_info
->
table_existed
)
if
(
!
create_info
->
table_existed
)
...
...
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