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
836f1608
Commit
836f1608
authored
Dec 15, 2001
by
monty@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Plain Diff
Merge with 3.23.47
parents
3b95f257
ee9a6f54
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
252 additions
and
18 deletions
+252
-18
Docs/manual.texi
Docs/manual.texi
+33
-2
extra/mysql_install.c
extra/mysql_install.c
+62
-0
extra/resolve_stack_dump.c
extra/resolve_stack_dump.c
+2
-1
include/my_bitmap.h
include/my_bitmap.h
+11
-1
innobase/buf/buf0buf.c
innobase/buf/buf0buf.c
+3
-0
innobase/dict/dict0crea.c
innobase/dict/dict0crea.c
+4
-1
innobase/include/rem0rec.ic
innobase/include/rem0rec.ic
+13
-1
mysql-test/r/rpl_skip_error.result
mysql-test/r/rpl_skip_error.result
+4
-0
mysql-test/t/rpl_get_lock.test
mysql-test/t/rpl_get_lock.test
+2
-0
mysql-test/t/rpl_skip_error-slave.opt
mysql-test/t/rpl_skip_error-slave.opt
+1
-0
mysql-test/t/rpl_skip_error.test
mysql-test/t/rpl_skip_error.test
+15
-0
mysys/my_bitmap.c
mysys/my_bitmap.c
+50
-9
sql/mysqld.cc
sql/mysqld.cc
+9
-2
sql/slave.cc
sql/slave.cc
+39
-0
sql/slave.h
sql/slave.h
+4
-1
No files found.
Docs/manual.texi
View file @
836f1608
...
@@ -23452,6 +23452,33 @@ Updates to a database with a different name than the original
...
@@ -23452,6 +23452,33 @@ Updates to a database with a different name than the original
Example: @code{replicate-rewrite-db=master_db_name->slave_db_name}.
Example: @code{replicate-rewrite-db=master_db_name->slave_db_name}.
@item @code{slave-skip-errors=err_code1,err_code2,..} @tab
Available only in 3.23.47 and later. Tells the slave thread to continue
replication when a query returns an error from the provided
list. Normally, replication will discontinue when an error is
encountered giving the user a chance to resolve the inconsistency in the
data manually. Do not use this option unless you fully understand why
you are getting the errors. If there are no bugs in your
replication setup and client programs, and no bugs in MySQL itself, you
should never get an abort with error.Indiscriminate use of this option
will result in slaves being hopelessly out of sync with the master and
you having no idea how the problem happened.
For error codes, you should use the numbers provided by the error message in
your slave error log and in the output of @code{SHOW SLAVE STATUS}. Full list
of error messages can be found in the source distribution in
@code{Docs/mysqld_error.txt}.
You can ( but should not) also use a very non-recommended value of @code{all}
which will ignore all error messages and keep barging along regardless.
Needless to say, if you use it, we make no promises regarding your data
integrity. Please do not complain if your data on the slave is not anywhere
close to what it is on the master in this case - you have been warned.
Example:
@code{slave-skip-errors=1062,1053} or @code{slave-skip-errors=all}
@item @code{skip-slave-start} @tab
@item @code{skip-slave-start} @tab
Tells the slave server not to start the slave on the startup. The user
Tells the slave server not to start the slave on the startup. The user
can start it later with @code{SLAVE START}.
can start it later with @code{SLAVE START}.
...
@@ -48035,22 +48062,26 @@ not yet 100% confident in this code.
...
@@ -48035,22 +48062,26 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.47
@appendixsubsec Changes in release 3.23.47
@itemize @bullet
@itemize @bullet
@item
@item
Added @code{slave-skip-errors} option
@item
Added statistics variables for all MySQL commands. (@code{SHOW STATUS} is
Added statistics variables for all MySQL commands. (@code{SHOW STATUS} is
now much longer).
now much longer).
@item
@item
Fix default values for InnoDB tables.
Fix
ed
default values for InnoDB tables.
@item
@item
Fixed that @code{GROUP BY expr DESC} works.
Fixed that @code{GROUP BY expr DESC} works.
@item
@item
Fixed bug when using @code{t1 LEFT JOIN t2 ON t2.key=constant}.
Fixed bug when using @code{t1 LEFT JOIN t2 ON t2.key=constant}.
@item
@item
@code{mysqlconfig} now also work with binary (relocated) distributions.
@code{mysql
_
config} now also work with binary (relocated) distributions.
@end itemize
@end itemize
@node News-3.23.46, News-3.23.45, News-3.23.47, News-3.23.x
@node News-3.23.46, News-3.23.45, News-3.23.47, News-3.23.x
@appendixsubsec Changes in release 3.23.46
@appendixsubsec Changes in release 3.23.46
@itemize @bullet
@itemize @bullet
@item
@item
Fixed problem with aliased temporary tables replication
@item
InnoDB and BDB tables will now use index when doing an @code{ORDER BY}
InnoDB and BDB tables will now use index when doing an @code{ORDER BY}
on the whole table.
on the whole table.
@item
@item
extra/mysql_install.c
0 → 100644
View file @
836f1608
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/* Install or upgrade MySQL server. By Sasha Pachev <sasha@mysql.com>
*/
#define INSTALL_VERSION "1.0"
#define DONT_USE_RAID
#include <global.h>
#include <m_ctype.h>
#include <my_sys.h>
#include <m_string.h>
#include <mysql_version.h>
#include <errno.h>
#include <getopt.h>
struct
option
long_options
[]
=
{
{
"help"
,
no_argument
,
0
,
'h'
},
{
"version"
,
no_argument
,
0
,
'V'
},
{
0
,
0
,
0
,
0
}
};
static
void
print_version
(
void
)
{
printf
(
"%s Ver %s Distrib %s, for %s (%s)
\n
"
,
my_progname
,
INSTALL_VERSION
,
MYSQL_SERVER_VERSION
,
SYSTEM_TYPE
,
MACHINE_TYPE
);
}
static
void
usage
()
{
print_version
();
printf
(
"MySQL AB, by Sasha Pachev
\n
"
);
printf
(
"This software comes with ABSOLUTELY NO WARRANTY
\n\n
"
);
printf
(
"Install or upgrade MySQL server.
\n\n
"
);
printf
(
"Usage: %s [OPTIONS]
\n
"
,
my_progname
);
printf
(
"
\n
\
-?, --help Display this help and exit.
\n
\
-h, --host=... Connect to host.
\n
\
-V, --version Output version information and exit.
\n
"
);
}
extra/resolve_stack_dump.c
View file @
836f1608
...
@@ -74,7 +74,8 @@ static void usage()
...
@@ -74,7 +74,8 @@ static void usage()
printf
(
"Usage: %s [OPTIONS] symbols-file [numeric-dump-file]
\n
"
,
my_progname
);
printf
(
"Usage: %s [OPTIONS] symbols-file [numeric-dump-file]
\n
"
,
my_progname
);
printf
(
"
\n
\
printf
(
"
\n
\
-?, --help Display this help and exit.
\n
\
-?, --help Display this help and exit.
\n
\
-h, --host=... Connect to host.
\n
\
-s, --symbols-file=... Use specified symbols file.
\n
\
-n, --numeric-dump-file=... Read the dump from specified file.
\n
\
-V, --version Output version information and exit.
\n
"
);
-V, --version Output version information and exit.
\n
"
);
printf
(
"
\n
\
printf
(
"
\n
\
The symbols-file should include the output from: 'nm --numeric-sort mysqld'.
\n
\
The symbols-file should include the output from: 'nm --numeric-sort mysqld'.
\n
\
...
...
include/my_bitmap.h
View file @
836f1608
...
@@ -25,6 +25,12 @@ typedef struct st_bitmap
...
@@ -25,6 +25,12 @@ typedef struct st_bitmap
{
{
uchar
*
bitmap
;
uchar
*
bitmap
;
uint
bitmap_size
;
uint
bitmap_size
;
my_bool
thread_safe
;
/* set if several threads access the bitmap */
/*
mutex will be acquired for the duration of each bitmap operation if
thread_safe flag is set. Otherwise, we optimize by not acquiring the
mutex
*/
#ifdef THREAD
#ifdef THREAD
pthread_mutex_t
mutex
;
pthread_mutex_t
mutex
;
#endif
#endif
...
@@ -33,10 +39,14 @@ typedef struct st_bitmap
...
@@ -33,10 +39,14 @@ typedef struct st_bitmap
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
#endif
#endif
extern
my_bool
bitmap_init
(
MY_BITMAP
*
bitmap
,
uint
bitmap_size
);
extern
my_bool
bitmap_init
(
MY_BITMAP
*
bitmap
,
uint
bitmap_size
,
my_bool
thread_safe
);
extern
void
bitmap_free
(
MY_BITMAP
*
bitmap
);
extern
void
bitmap_free
(
MY_BITMAP
*
bitmap
);
extern
void
bitmap_set_bit
(
MY_BITMAP
*
bitmap
,
uint
bitmap_bit
);
extern
void
bitmap_set_bit
(
MY_BITMAP
*
bitmap
,
uint
bitmap_bit
);
extern
uint
bitmap_set_next
(
MY_BITMAP
*
bitmap
);
extern
uint
bitmap_set_next
(
MY_BITMAP
*
bitmap
);
extern
void
bitmap_set_all
(
MY_BITMAP
*
bitmap
);
extern
my_bool
bitmap_is_set
(
MY_BITMAP
*
bitmap
,
uint
bitmap_bit
);
extern
void
bitmap_clear_all
(
MY_BITMAP
*
bitmap
);
extern
void
bitmap_clear_bit
(
MY_BITMAP
*
bitmap
,
uint
bitmap_bit
);
extern
void
bitmap_clear_bit
(
MY_BITMAP
*
bitmap
,
uint
bitmap_bit
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
innobase/buf/buf0buf.c
View file @
836f1608
...
@@ -1158,6 +1158,9 @@ buf_page_init(
...
@@ -1158,6 +1158,9 @@ buf_page_init(
block
->
n_hash_helps
=
0
;
block
->
n_hash_helps
=
0
;
block
->
is_hashed
=
FALSE
;
block
->
is_hashed
=
FALSE
;
block
->
n_fields
=
1
;
block
->
n_bytes
=
0
;
block
->
side
=
BTR_SEARCH_LEFT_SIDE
;
block
->
file_page_was_freed
=
FALSE
;
block
->
file_page_was_freed
=
FALSE
;
}
}
...
...
innobase/dict/dict0crea.c
View file @
836f1608
...
@@ -1234,9 +1234,12 @@ loop:
...
@@ -1234,9 +1234,12 @@ loop:
que_graph_free
(
graph
);
que_graph_free
(
graph
);
if
(
error
!=
DB_SUCCESS
)
{
if
(
error
!=
DB_SUCCESS
)
{
fprintf
(
stderr
,
"InnoDB: foreign constraint creation failed;
\n
"
"InnoDB: internal error number %lu
\n
"
,
error
);
ut_a
(
error
==
DB_OUT_OF_FILE_SPACE
);
ut_a
(
error
==
DB_OUT_OF_FILE_SPACE
);
fprintf
(
stderr
,
"InnoDB: foreign constraint creation failed
\n
"
);
fprintf
(
stderr
,
"InnoDB: tablespace is full
\n
"
);
fprintf
(
stderr
,
"InnoDB: tablespace is full
\n
"
);
trx_general_rollback_for_mysql
(
trx
,
FALSE
,
NULL
);
trx_general_rollback_for_mysql
(
trx
,
FALSE
,
NULL
);
...
...
innobase/include/rem0rec.ic
View file @
836f1608
...
@@ -947,7 +947,8 @@ rec_get_converted_size(
...
@@ -947,7 +947,8 @@ rec_get_converted_size(
}
}
/****************************************************************
/****************************************************************
Folds a prefix of a physical record to a ulint. */
Folds a prefix of a physical record to a ulint. Folds only existing fields,
that is, checks that we do not run out of the record. */
UNIV_INLINE
UNIV_INLINE
ulint
ulint
rec_fold(
rec_fold(
...
@@ -963,6 +964,7 @@ rec_fold(
...
@@ -963,6 +964,7 @@ rec_fold(
byte* data;
byte* data;
ulint len;
ulint len;
ulint fold;
ulint fold;
ulint n_fields_rec;
ut_ad(rec_validate(rec));
ut_ad(rec_validate(rec));
ut_ad(n_fields <= rec_get_n_fields(rec));
ut_ad(n_fields <= rec_get_n_fields(rec));
...
@@ -971,6 +973,16 @@ rec_fold(
...
@@ -971,6 +973,16 @@ rec_fold(
/* Only the page supremum and infimum records have 1 field: */
/* Only the page supremum and infimum records have 1 field: */
ut_ad(rec_get_n_fields(rec) > 1);
ut_ad(rec_get_n_fields(rec) > 1);
n_fields_rec = rec_get_n_fields(rec);
if (n_fields > n_fields_rec) {
n_fields = n_fields_rec;
}
if (n_fields == n_fields_rec) {
n_bytes = 0;
}
fold = ut_fold_dulint(tree_id);
fold = ut_fold_dulint(tree_id);
for (i = 0; i < n_fields; i++) {
for (i = 0; i < n_fields; i++) {
...
...
mysql-test/r/rpl_skip_error.result
0 → 100644
View file @
836f1608
n
1
2
3
mysql-test/t/rpl_get_lock.test
View file @
836f1608
...
@@ -4,6 +4,8 @@ create table t1(n int);
...
@@ -4,6 +4,8 @@ create table t1(n int);
insert
into
t1
values
(
get_lock
(
"lock"
,
2
));
insert
into
t1
values
(
get_lock
(
"lock"
,
2
));
dirty_close
master
;
dirty_close
master
;
connection
master1
;
connection
master1
;
select
get_lock
(
"lock"
,
2
);
select
release_lock
(
"lock"
);
save_master_pos
;
save_master_pos
;
connection
slave
;
connection
slave
;
sync_with_master
;
sync_with_master
;
...
...
mysql-test/t/rpl_skip_error-slave.opt
0 → 100644
View file @
836f1608
--slave-skip-error=1053,1062
mysql-test/t/rpl_skip_error.test
0 → 100644
View file @
836f1608
source
include
/
master
-
slave
.
inc
;
connection
master
;
drop
table
if
exists
t1
;
create
table
t1
(
n
int
not
null
primary
key
);
save_master_pos
;
connection
slave
;
sync_with_master
;
insert
into
t1
values
(
1
);
connection
master
;
insert
into
t1
values
(
1
);
insert
into
t1
values
(
2
),(
3
);
save_master_pos
;
connection
slave
;
sync_with_master
;
select
*
from
t1
;
mysys/my_bitmap.c
View file @
836f1608
...
@@ -25,15 +25,33 @@
...
@@ -25,15 +25,33 @@
#include "mysys_priv.h"
#include "mysys_priv.h"
#include <my_bitmap.h>
#include <my_bitmap.h>
#include <assert.h>
#include <assert.h>
#include <string.h>
my_bool
bitmap_init
(
MY_BITMAP
*
map
,
uint
bitmap_size
)
inline
void
bitmap_lock
(
MY_BITMAP
*
map
)
{
#ifdef THREAD
if
(
map
->
thread_safe
)
pthread_mutex_lock
(
&
map
->
mutex
);
#endif
}
inline
void
bitmap_unlock
(
MY_BITMAP
*
map
)
{
#ifdef THREAD
if
(
map
->
thread_safe
)
pthread_mutex_unlock
(
&
map
->
mutex
);
#endif
}
my_bool
bitmap_init
(
MY_BITMAP
*
map
,
uint
bitmap_size
,
my_bool
thread_safe
)
{
{
if
(
!
(
map
->
bitmap
=
(
uchar
*
)
my_malloc
((
bitmap_size
+
7
)
/
8
,
if
(
!
(
map
->
bitmap
=
(
uchar
*
)
my_malloc
((
bitmap_size
+
7
)
/
8
,
MYF
(
MY_WME
|
MY_ZEROFILL
))))
MYF
(
MY_WME
|
MY_ZEROFILL
))))
return
1
;
return
1
;
DBUG_ASSERT
(
bitmap_size
!=
~
(
uint
)
0
);
DBUG_ASSERT
(
bitmap_size
!=
~
(
uint
)
0
);
#ifdef THREAD
#ifdef THREAD
pthread_mutex_init
(
&
map
->
mutex
,
MY_MUTEX_INIT_FAST
);
if
((
map
->
thread_safe
=
thread_safe
))
pthread_mutex_init
(
&
map
->
mutex
,
MY_MUTEX_INIT_FAST
);
#endif
#endif
map
->
bitmap_size
=
bitmap_size
;
map
->
bitmap_size
=
bitmap_size
;
return
0
;
return
0
;
...
@@ -46,7 +64,8 @@ void bitmap_free(MY_BITMAP *map)
...
@@ -46,7 +64,8 @@ void bitmap_free(MY_BITMAP *map)
my_free
((
char
*
)
map
->
bitmap
,
MYF
(
0
));
my_free
((
char
*
)
map
->
bitmap
,
MYF
(
0
));
map
->
bitmap
=
0
;
map
->
bitmap
=
0
;
#ifdef THREAD
#ifdef THREAD
pthread_mutex_destroy
(
&
map
->
mutex
);
if
(
map
->
thread_safe
)
pthread_mutex_destroy
(
&
map
->
mutex
);
#endif
#endif
}
}
}
}
...
@@ -55,9 +74,9 @@ void bitmap_set_bit(MY_BITMAP *map, uint bitmap_bit)
...
@@ -55,9 +74,9 @@ void bitmap_set_bit(MY_BITMAP *map, uint bitmap_bit)
{
{
if
(
bitmap_bit
<
map
->
bitmap_size
)
if
(
bitmap_bit
<
map
->
bitmap_size
)
{
{
pthread_mutex_lock
(
&
map
->
mutex
);
bitmap_lock
(
map
);
map
->
bitmap
[
bitmap_bit
/
8
]
|=
(
1
<<
(
bitmap_bit
&
7
));
map
->
bitmap
[
bitmap_bit
/
8
]
|=
(
1
<<
(
bitmap_bit
&
7
));
pthread_mutex_unlock
(
&
map
->
mutex
);
bitmap_unlock
(
map
);
}
}
}
}
...
@@ -69,7 +88,7 @@ uint bitmap_set_next(MY_BITMAP *map)
...
@@ -69,7 +88,7 @@ uint bitmap_set_next(MY_BITMAP *map)
uint
bitmap_size
=
map
->
bitmap_size
;
uint
bitmap_size
=
map
->
bitmap_size
;
uint
i
;
uint
i
;
pthread_mutex_lock
(
&
map
->
mutex
);
bitmap_lock
(
map
);
for
(
i
=
0
;
i
<
bitmap_size
;
i
++
,
bitmap
++
)
for
(
i
=
0
;
i
<
bitmap_size
;
i
++
,
bitmap
++
)
{
{
if
(
*
bitmap
!=
0xff
)
if
(
*
bitmap
!=
0xff
)
...
@@ -87,7 +106,7 @@ uint bitmap_set_next(MY_BITMAP *map)
...
@@ -87,7 +106,7 @@ uint bitmap_set_next(MY_BITMAP *map)
break
;
/* Found bit */
break
;
/* Found bit */
}
}
}
}
pthread_mutex_unlock
(
&
map
->
mutex
);
bitmap_unlock
(
map
);
return
bit_found
;
return
bit_found
;
}
}
...
@@ -96,8 +115,30 @@ void bitmap_clear_bit(MY_BITMAP *map, uint bitmap_bit)
...
@@ -96,8 +115,30 @@ void bitmap_clear_bit(MY_BITMAP *map, uint bitmap_bit)
{
{
if
(
bitmap_bit
<
map
->
bitmap_size
)
if
(
bitmap_bit
<
map
->
bitmap_size
)
{
{
pthread_mutex_lock
(
&
map
->
mutex
);
bitmap_lock
(
map
);
map
->
bitmap
[
bitmap_bit
/
8
]
&=
~
(
1
<<
(
bitmap_bit
&
7
));
map
->
bitmap
[
bitmap_bit
/
8
]
&=
~
(
1
<<
(
bitmap_bit
&
7
));
pthread_mutex_unlock
(
&
map
->
mutex
);
bitmap_unlock
(
map
);
}
}
}
}
void
bitmap_set_all
(
MY_BITMAP
*
map
)
{
bitmap_lock
(
map
);
memset
(
map
->
bitmap
,
0xff
,
(
map
->
bitmap_size
+
7
)
/
8
);
bitmap_unlock
(
map
);
}
my_bool
bitmap_is_set
(
MY_BITMAP
*
map
,
uint
bitmap_bit
)
{
return
(
bitmap_bit
<
map
->
bitmap_size
)
?
(
map
->
bitmap
[
bitmap_bit
/
8
]
&
(
1
<<
(
bitmap_bit
&
7
)))
:
0
;
}
void
bitmap_clear_all
(
MY_BITMAP
*
map
)
{
bitmap_lock
(
map
);
bzero
(
map
->
bitmap
,(
map
->
bitmap_size
+
7
)
/
8
);
bitmap_unlock
(
map
);
}
sql/mysqld.cc
View file @
836f1608
...
@@ -735,6 +735,8 @@ void clean_up(bool print_message)
...
@@ -735,6 +735,8 @@ void clean_up(bool print_message)
DBUG_PRINT
(
"exit"
,(
"clean_up"
));
DBUG_PRINT
(
"exit"
,(
"clean_up"
));
if
(
cleanup_done
++
)
if
(
cleanup_done
++
)
return
;
/* purecov: inspected */
return
;
/* purecov: inspected */
if
(
use_slave_mask
)
bitmap_free
(
&
slave_error_mask
);
acl_free
(
1
);
acl_free
(
1
);
grant_free
();
grant_free
();
query_cache
.
resize
(
0
);
query_cache
.
resize
(
0
);
...
@@ -1801,7 +1803,7 @@ int main(int argc, char **argv)
...
@@ -1801,7 +1803,7 @@ int main(int argc, char **argv)
#endif
#endif
select_thread
=
pthread_self
();
select_thread
=
pthread_self
();
select_thread_in_use
=
1
;
select_thread_in_use
=
1
;
if
(
use_temp_pool
&&
bitmap_init
(
&
temp_pool
,
1024
))
if
(
use_temp_pool
&&
bitmap_init
(
&
temp_pool
,
1024
,
1
))
unireg_abort
(
1
);
unireg_abort
(
1
);
/*
/*
...
@@ -2674,7 +2676,7 @@ enum options {
...
@@ -2674,7 +2676,7 @@ enum options {
OPT_SHOW_SLAVE_AUTH_INFO
,
OPT_OLD_RPL_COMPAT
,
OPT_SHOW_SLAVE_AUTH_INFO
,
OPT_OLD_RPL_COMPAT
,
OPT_SLAVE_LOAD_TMPDIR
,
OPT_NO_MIX_TYPE
,
OPT_SLAVE_LOAD_TMPDIR
,
OPT_NO_MIX_TYPE
,
OPT_RPL_RECOVERY_RANK
,
OPT_INIT_RPL_ROLE
,
OPT_RPL_RECOVERY_RANK
,
OPT_INIT_RPL_ROLE
,
OPT_DES_KEY_FILE
OPT_DES_KEY_FILE
,
OPT_SLAVE_SKIP_ERRORS
};
};
static
struct
option
long_options
[]
=
{
static
struct
option
long_options
[]
=
{
...
@@ -2824,6 +2826,8 @@ static struct option long_options[] = {
...
@@ -2824,6 +2826,8 @@ static struct option long_options[] = {
{
"skip-symlink"
,
no_argument
,
0
,
(
int
)
OPT_SKIP_SYMLINKS
},
{
"skip-symlink"
,
no_argument
,
0
,
(
int
)
OPT_SKIP_SYMLINKS
},
{
"skip-thread-priority"
,
no_argument
,
0
,
(
int
)
OPT_SKIP_PRIOR
},
{
"skip-thread-priority"
,
no_argument
,
0
,
(
int
)
OPT_SKIP_PRIOR
},
{
"slave-load-tmpdir"
,
required_argument
,
0
,
(
int
)
OPT_SLAVE_LOAD_TMPDIR
},
{
"slave-load-tmpdir"
,
required_argument
,
0
,
(
int
)
OPT_SLAVE_LOAD_TMPDIR
},
{
"slave-skip-errors"
,
required_argument
,
0
,
(
int
)
OPT_SLAVE_SKIP_ERRORS
},
{
"socket"
,
required_argument
,
0
,
(
int
)
OPT_SOCKET
},
{
"socket"
,
required_argument
,
0
,
(
int
)
OPT_SOCKET
},
{
"sql-bin-update-same"
,
no_argument
,
0
,
(
int
)
OPT_SQL_BIN_UPDATE_SAME
},
{
"sql-bin-update-same"
,
no_argument
,
0
,
(
int
)
OPT_SQL_BIN_UPDATE_SAME
},
{
"sql-mode"
,
required_argument
,
0
,
(
int
)
OPT_SQL_MODE
},
{
"sql-mode"
,
required_argument
,
0
,
(
int
)
OPT_SQL_MODE
},
...
@@ -3586,6 +3590,9 @@ static void get_options(int argc,char **argv)
...
@@ -3586,6 +3590,9 @@ static void get_options(int argc,char **argv)
case
'P'
:
case
'P'
:
mysql_port
=
(
unsigned
int
)
atoi
(
optarg
);
mysql_port
=
(
unsigned
int
)
atoi
(
optarg
);
break
;
break
;
case
OPT_SLAVE_SKIP_ERRORS
:
init_slave_skip_errors
(
optarg
);
break
;
case
OPT_SAFEMALLOC_MEM_LIMIT
:
case
OPT_SAFEMALLOC_MEM_LIMIT
:
#if !defined(DBUG_OFF) && defined(SAFEMALLOC)
#if !defined(DBUG_OFF) && defined(SAFEMALLOC)
safemalloc_mem_limit
=
atoi
(
optarg
);
safemalloc_mem_limit
=
atoi
(
optarg
);
...
...
sql/slave.cc
View file @
836f1608
...
@@ -29,6 +29,8 @@ volatile bool slave_running = 0;
...
@@ -29,6 +29,8 @@ volatile bool slave_running = 0;
char
*
slave_load_tmpdir
=
0
;
char
*
slave_load_tmpdir
=
0
;
pthread_t
slave_real_id
;
pthread_t
slave_real_id
;
MASTER_INFO
glob_mi
;
MASTER_INFO
glob_mi
;
MY_BITMAP
slave_error_mask
;
bool
use_slave_mask
=
0
;
HASH
replicate_do_table
,
replicate_ignore_table
;
HASH
replicate_do_table
,
replicate_ignore_table
;
DYNAMIC_ARRAY
replicate_wild_do_table
,
replicate_wild_ignore_table
;
DYNAMIC_ARRAY
replicate_wild_do_table
,
replicate_wild_ignore_table
;
bool
do_table_inited
=
0
,
ignore_table_inited
=
0
;
bool
do_table_inited
=
0
,
ignore_table_inited
=
0
;
...
@@ -81,6 +83,37 @@ static byte* get_table_key(TABLE_RULE_ENT* e, uint* len,
...
@@ -81,6 +83,37 @@ static byte* get_table_key(TABLE_RULE_ENT* e, uint* len,
}
}
/* called from get_options() in mysqld.cc on start-up */
void
init_slave_skip_errors
(
char
*
arg
)
{
char
*
p
;
my_bool
last_was_digit
=
0
;
if
(
bitmap_init
(
&
slave_error_mask
,
MAX_SLAVE_ERROR
,
0
))
{
fprintf
(
stderr
,
"Badly out of memory, please check your system status
\n
"
);
exit
(
1
);
}
use_slave_mask
=
1
;
for
(;
isspace
(
*
arg
);
++
arg
)
/* empty */
;
if
(
!
my_casecmp
(
arg
,
"all"
,
3
))
{
bitmap_set_all
(
&
slave_error_mask
);
return
;
}
for
(
p
=
arg
;
*
p
;
)
{
long
err_code
;
if
(
!
(
p
=
str2int
(
p
,
10
,
0
,
LONG_MAX
,
&
err_code
)))
break
;
if
(
err_code
<
MAX_SLAVE_ERROR
)
bitmap_set_bit
(
&
slave_error_mask
,(
uint
)
err_code
);
while
(
!
isdigit
(
*
p
)
&&
*
p
)
p
++
;
}
}
void
init_table_rule_hash
(
HASH
*
h
,
bool
*
h_inited
)
void
init_table_rule_hash
(
HASH
*
h
,
bool
*
h_inited
)
{
{
hash_init
(
h
,
TABLE_RULE_HASH_SIZE
,
0
,
0
,
hash_init
(
h
,
TABLE_RULE_HASH_SIZE
,
0
,
0
,
...
@@ -1004,6 +1037,12 @@ point. If you are sure that your master is ok, run this query manually on the\
...
@@ -1004,6 +1037,12 @@ point. If you are sure that your master is ok, run this query manually on the\
}
}
}
}
inline
int
ignored_error_code
(
int
err_code
)
{
return
use_slave_mask
&&
bitmap_is_set
(
&
slave_error_mask
,
err_code
);
}
static
int
exec_event
(
THD
*
thd
,
NET
*
net
,
MASTER_INFO
*
mi
,
int
event_len
)
static
int
exec_event
(
THD
*
thd
,
NET
*
net
,
MASTER_INFO
*
mi
,
int
event_len
)
{
{
const
char
*
error_msg
;
const
char
*
error_msg
;
...
...
sql/slave.h
View file @
836f1608
...
@@ -3,8 +3,11 @@
...
@@ -3,8 +3,11 @@
#include "mysql.h"
#include "mysql.h"
#define SLAVE_NET_TIMEOUT 3600
#define SLAVE_NET_TIMEOUT 3600
#define MAX_SLAVE_ERROR 2000
extern
ulong
slave_net_timeout
,
master_retry_count
;
extern
ulong
slave_net_timeout
,
master_retry_count
;
extern
MY_BITMAP
slave_error_mask
;
extern
bool
use_slave_mask
;
extern
char
*
slave_load_tmpdir
;
extern
char
*
slave_load_tmpdir
;
typedef
struct
st_master_info
typedef
struct
st_master_info
...
@@ -104,11 +107,11 @@ int add_table_rule(HASH* h, const char* table_spec);
...
@@ -104,11 +107,11 @@ int add_table_rule(HASH* h, const char* table_spec);
int
add_wild_table_rule
(
DYNAMIC_ARRAY
*
a
,
const
char
*
table_spec
);
int
add_wild_table_rule
(
DYNAMIC_ARRAY
*
a
,
const
char
*
table_spec
);
void
init_table_rule_hash
(
HASH
*
h
,
bool
*
h_inited
);
void
init_table_rule_hash
(
HASH
*
h
,
bool
*
h_inited
);
void
init_table_rule_array
(
DYNAMIC_ARRAY
*
a
,
bool
*
a_inited
);
void
init_table_rule_array
(
DYNAMIC_ARRAY
*
a
,
bool
*
a_inited
);
void
init_slave_skip_errors
(
char
*
arg
);
char
*
rewrite_db
(
char
*
db
);
char
*
rewrite_db
(
char
*
db
);
int
check_expected_error
(
THD
*
thd
,
int
error_code
);
int
check_expected_error
(
THD
*
thd
,
int
error_code
);
void
skip_load_data_infile
(
NET
*
net
);
void
skip_load_data_infile
(
NET
*
net
);
void
slave_print_error
(
int
err_code
,
const
char
*
msg
,
...);
void
slave_print_error
(
int
err_code
,
const
char
*
msg
,
...);
void
end_slave
();
// clean up
void
end_slave
();
// clean up
int
init_master_info
(
MASTER_INFO
*
mi
);
int
init_master_info
(
MASTER_INFO
*
mi
);
void
end_master_info
(
MASTER_INFO
*
mi
);
void
end_master_info
(
MASTER_INFO
*
mi
);
...
...
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