New option --sync-binlog=x (and global settable variable) which will fsync the binlog
after every x-th disk write to it. That is, if in autocommit mode, after every x-th statement
written to the binlog; if using transactions, after every x-th transaction written to the binlog.
x==0 means no fsync. x==1 is the slowest.
There is no test added for this, I have just checked that it works as --sync-binlog=1 dramatically
slows down mysqld.
Made sync-frm a global settable variable.
sql/log.cc:
every sync_binlog_period-th disk binlog write, we fsync the binlog
sql/mysql_priv.h:
new option sync_binlog
sql/mysqld.cc:
new option sync_binlog
sql/set_var.cc:
Making sync-frm a settable global option.
New settable global option sync-binlog.
sql/set_var.h:
new global settable variable sync_binlog needs a specific ::update because it needs to take LOCK_log
error messages when a query goes wrong.
Note that from now on, if you run with --slave-skip-error=xx, then nothing will
be printed to the error log when the slave is having this error xx and
skipping it (but you don't care as you want to skip it).
sql/repl_failsafe.cc:
a comment about the use of thd->bootstrap in failsafe (unused code)
/***********************************************************************
This function stores binlog offset and flushes logs */
void innobase_store_binlog_offset_and_flush_log(char *binlog_name,longlong offset)
requested by Guilhem to ha_innodb.cc and ha_innodb.h.
Change made by Jan.Lindstrom@innodb.com
binlog even if they changed nothing, and a test for this.
This is useful when users use these commands to clean up their master and slave by issuing
one command on master (assume master and slave have slightly different data for some
reason and you want to clean up both).
Note that I have not changed multi-table DELETE and multi-table UPDATE because their
error-reporting mechanism is more complicated.
mysql-test/r/mysqlbinlog.result:
result update
mysql-test/r/rpl_charset.result:
result update
mysql-test/r/rpl_flush_log_loop.result:
result update
mysql-test/r/rpl_replicate_do.result:
result update
mysql-test/r/rpl_temporary.result:
result update
mysql-test/t/mysqlbinlog.test:
moving SET TIMESTAMP up as DROP shows up in binlog
sql/sql_db.cc:
DROP DATABASE IF EXISTS is now always logged to binlog, even if db did not exist
sql/sql_delete.cc:
DELETE FROM t is now always logged to binlog even if no rows deleted (but in this case, only if really no error).
sql/sql_table.cc:
DROP TABLE IF EXISTS is now always logged to binlog even if table did not exist
sql/sql_update.cc:
UPDATE is now always logged to binlog even if no rows updated (but in this case, only if really no error).
is broken (prepared statements)": fixed date handling in many places
of prepared statements code.
libmysql/libmysql.c:
Fix for Bug#4026:
- now buffer_length is defined for any buffer type. Network buffer
preallocation cleaned up.
- added constants for maximum buffer sizes necessary for MYSQL_TYPE_DATE,
MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME types.
- TIME/DATETIME packing/unpacking functions fixed
- now result set metadata is always updated from fields sent to COM_EXECUTE.
This is necessary to make 'SELECT ?' queries work without conversions.
sql/item.cc:
- added implementatoin of Item_param::get_date
sql/item.h:
- added enum_field_types Item_param::param_type. First step for proper
handling of placeholders.
- added get_date() implementation to prevent date -> string -> date
conversions when MYSQL_TYPE_DATE/DATETIME parameter is used in temporal
context.
sql/protocol.cc:
Fix for Bug#4026:
- PACKET_BUFFET_EXTRA_ALLOC -> PACKET_BUFFER_EXTRA_ALLOC.
The define itself was moved to .cc as it's used only in protocol.cc
- fixed Protocol_prep::store_time() call.
sql/protocol.h:
- PACKET_BUFFER_EXTRA_ALLOC moved to protocol.cc
sql/sql_prepare.cc:
Fix for Bug#4026:
- MYSQL_TYPE_TIME/DATETIME handling fixed.
- added initialization for Item_param::param_type in
setup_one_conversion_function
tests/client_test.c:
Test case for Bug#4026
In mysqlbinlog, there was a problem with how we escaped the content of a string user variable.
To be perfect, we should have escaped with character_set_client. But this charset is unknown
to mysqlbinlog. So the simplest is to print the string in hex. This is unreadable but
100% safe with any charset (checked with Bar), no more need to bother with character_set_client.
mysql-test/r/rpl_charset.result:
hex strings
mysql-test/r/rpl_user_variables.result:
hex strings
mysql-test/r/user_var.result:
hex strings
sql/log_event.cc:
In mysqlbinlog, there was a problem with how we escaped the content of a string user variable.
To be perfect, we should have escaped with character_set_client. But this charset is unknown
to mysqlbinlog. So the simplest is to print the string in hex. This is unreadable but
100% safe with any charset (checked with Bar), no more need to bother with character_set_client.
Fix Bug #4047: remove the improvement ported from 4.0 that made InnoDB to remember the original select_lock_type inside LOCK TABLES
sql/ha_innodb.cc:
Fix Bug #4047: remove the improvement ported from 4.0 that made InnoDB to remember the original select_lock_type inside LOCK TABLES
mysql-test/r/ctype_ucs.result:
Test for bug#3946: Error in LPAD() when padstring is longer than 1 character
mysql-test/t/ctype_ucs.test:
Test for bug#3946: Error in LPAD() when padstring is longer than 1 character
WL#1160.
Adding variable-conformant startup options for --default-character-set and --default-collation
sql/mysqld.cc:
WL#1160.
Adding variable-conformant startup options for --default-character-set and --default-collation
A couple of small changes to ha_example (mainly comments).
sql/examples/ha_archive.cc:
Changes from Serg.
A few styles changes, fix for potential hash insert gone wrong, removed bad tables if create fails, gzflush used for flushing by default (had problems with OSX 10.2), and some spelling corrections.
sql/examples/ha_archive.h:
Removed fast_key_read() and changed the name of a conflicting variable.
sql/examples/ha_example.cc:
Added a few new comments.
sql/examples/ha_example.h:
Added pragma interface. Removed fast_key_read() and Serg's request
mysql-test/r/ps.result:
Better error message
mysys/my_error.c:
Comments added
sql/item.cc:
Moved a chunk of code from sql_prepare.cc to Item_param::set_from_user_var
sql/item.h:
Moved a chunk of code from sql_prepare.cc to Item_param::set_from_user_var
sql/item_func.cc:
Code cleanup
sql/mysql_priv.h:
Code cleanup
sql/sql_class.cc:
Code cleanup
sql/sql_parse.cc:
use user_var_entry::val_str in PREPARE stmt FROM @var.
sql/sql_prepare.cc:
Post-review fixes and code cleanup.
sql/sql_yacc.yy:
Coding style fixes
libmysql/libmysql.c:
Extended comments for mysql_stmt_init, mysql_stmt_prepare,
mysql_stmt_result_metadata.
Few bits of code moved around and cleaned up.
sql/sql_prepare.cc:
Commented case with ulonglong length in get_param_length
into brian-akers-computer.local:/Users/brian/mysql/mysql-4.1
BitKeeper/etc/logging_ok:
auto-union
acconfig.h:
Auto merged
acinclude.m4:
Auto merged
configure.in:
Auto merged
sql/handler.cc:
Auto merged
sql/handler.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
into mysql.com:/dbdata/psergey/mysql-4.1-ps-merge
sql/lex.h:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
into mysql.com:/home/mysql_src/mysql-4.1
sql/set_var.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
by binlogging some SET ONE_SHOT CHARACTER_SETetc,
which will be enough until we have it more compact and more complete in 5.0. With the present patch,
replication will work ok between 4.1.3 master and slaves, as long as:
- master and slave have the same GLOBAL.COLLATION_SERVER
- COLLATION_DATABASE and CHARACTER_SET_DATABASE are not used
- application does not use the fact that table is created with charset of the USEd db (BUG#2326).
all of which are not too hard to fulfill.
ONE_SHOT is reserved for internal use of mysqlbinlog|mysql and works only for charsets,
so we give error if used for non-charset vars.
Fix for BUG#3875 "mysqlbinlog produces wrong ouput if query uses
variables containing quotes" and BUG#3943 "Queries with non-ASCII literals are not replicated
properly after SET NAMES".
Detecting that master and slave have different global charsets or server ids.
mysql-test/r/rpl_server_id1.result:
it's normal to not run as I have added a test to compare server ids of master and slave
at startup and stop if equal (unless --replicate-same-server-id)
mysql-test/r/rpl_user_variables.result:
result update (as we now print charset of user var).
mysql-test/r/user_var.result:
result update
mysql-test/t/rpl_server_id1.test:
no need to select as slave is not running
mysql-test/t/user_var.test:
testing if the content of user vars is escaped when mysqlbinlog prints them,
and if the name is backquoted.
sql/lex.h:
new keyword ONE_SHOT
sql/log.cc:
when writing to the binlog, before writing the actual statement, write some SET ONE_SHOT CHARACTER_SET_CLIENT etc
for the slave to know the charset variables (which are important as they affect the inserted data).
sql/log_event.cc:
print charset and collation of user var in mysqlbinlog and SHOW BINLOG EVENTS.
escape the content of the var. Backquote its name.
Will ask Bar to check that using my_charset_bin for escaping is ok.
sql/set_var.cc:
understand SET CHARACTER_SET_CLIENT=10 (don't require a string, accept a number).
Refuse changing of GLOBAL CHARACTER_SET_SERVER/COLLATION_SERVER if binlog or slave,
as it will make the master or slave make wrong assumptions.
A function to catch SET ONE_SHOT on non-charset variables (which is forbidden)
sql/set_var.h:
no_support_one_shot to know if the var supports ONE_SHOT (only charset vars do, soon timezones).
Accept int arg in SET CHARACTER_SET_etc
sql/slave.cc:
when I/O slave thread starts, verify that master's and slave charsets match.
And by the way verify that server ids are different.
Don't fail if UNIX_TIMESTAMP() can't be done on master (very old master), that's
not fatal.
sql/sql_class.cc:
one_shot
sql/sql_class.h:
one_shot
sql/sql_lex.h:
one_shot
sql/sql_parse.cc:
when SET ONE_SHOT is used, verify that it's only used for charset/collation vars;
otherwise refuse.
sql/sql_yacc.yy:
ONE_SHOT keyword in SET
into mysql.com:/dbdata/psergey/mysql-4.1-ps-merge
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/share/romanian/errmsg.txt:
Auto merged
(Note: This affects only comments, not variable names.)
extra/perror.c:
Fix skipp -> skip once and for all.
heap/hp_hash.c:
Fix skipp -> skip once and for all.
isam/_dynrec.c:
Fix skipp -> skip once and for all.
isam/isamchk.c:
Fix skipp -> skip once and for all.
isam/isamlog.c:
Fix skipp -> skip once and for all.
isam/pack_isam.c:
Fix skipp -> skip once and for all.
isam/test1.c:
Fix skipp -> skip once and for all.
merge/mrg_open.c:
Fix skipp -> skip once and for all.
myisam/mi_check.c:
Fix skipp -> skip once and for all.
myisam/mi_delete.c:
Fix skipp -> skip once and for all.
myisam/mi_key.c:
Fix skipp -> skip once and for all.
myisam/mi_search.c:
Fix skipp -> skip once and for all.
myisam/myisamlog.c:
Fix skipp -> skip once and for all.
mysys/ChangeLog:
Fix skipp -> skip once and for all.
mysys/default.c:
Fix skipp -> skip once and for all.
mysys/mf_iocache.c:
Fix skipp -> skip once and for all.
mysys/mf_iocache2.c:
Fix skipp -> skip once and for all.
mysys/mf_pack.c:
Fix skipp -> skip once and for all.
mysys/mf_soundex.c:
Fix skipp -> skip once and for all.
mysys/mf_wfile.c:
Fix skipp -> skip once and for all.
mysys/my_error.c:
Fix skipp -> skip once and for all.
mysys/my_getwd.c:
Fix skipp -> skip once and for all.
scripts/mysql_find_rows.sh:
Fix skipp -> skip once and for all.
sql/sql_yacc.yy:
Fix skipp -> skip once and for all.
sql/time.cc:
Fix skipp -> skip once and for all.
strings/ctype-big5.c:
Fix skipp -> skip once and for all.
strings/ctype-gbk.c:
Fix skipp -> skip once and for all.
strings/ctype-tis620.c:
Fix skipp -> skip once and for all.
myisam/rt_index.c:
Auto merged
myisam/rt_index.h:
Auto merged
myisam/rt_mbr.c:
Auto merged
myisam/rt_mbr.h:
Auto merged
myisam/rt_split.c:
Auto merged
myisam/rt_test.c:
Auto merged
sql/spatial.cc:
Auto merged
innobase/os/os0file.c:
after merge fix
sql/ha_innodb.cc:
after merge fix
sql/sql_select.cc:
after merge fix (The patch for 4.0 didn't make sence in 4.1)
client/mysqltest.c:
Auto merged
include/mysql.h:
Auto merged
innobase/dict/dict0dict.c:
Auto merged
innobase/include/row0mysql.h:
Auto merged
innobase/lock/lock0lock.c:
Auto merged
innobase/row/row0mysql.c:
Auto merged
libmysql/libmysql.c:
Auto merged
mysql-test/README:
Auto merged
mysql-test/r/select_found.result:
Auto merged
mysql-test/t/select_found.test:
Auto merged
mysys/mf_wcomp.c:
Auto merged
mysys/mf_wfile.c:
Auto merged
sql/ha_innodb.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_base.cc:
Auto merged
configure.in:
Get changes for netware
include/my_sys.h:
Use local file
innobase/include/os0file.h:
auto merge
innobase/os/os0file.c:
auto merge
sql/mysqld.cc:
auto merge
sql/sql_acl.cc:
indentation change
sql/sql_acl.h:
use local file
sql/sql_class.h:
auto merge
sql/sql_db.cc:
use local file
sql/sql_parse.cc:
use local file
sql/sql_select.cc:
Merge
sql/sql_show.cc:
use local file
libmysqld/Makefile.am:
Removed define that is now defined by configure and my_global.h
mysql-test/r/func_gconcat.result:
Fixed test result after removing end space
sql/share/romanian/errmsg.txt:
Fixed wrong error message
sql/sql_insert.cc:
Removed compiler warning
Fixed serbian error messages
Fix for windows regarding changed variable name
configure.in:
Update version number
Added serbian error messages
libmysqld/libmysqld.def:
Fix changed variable names
mysql-test/t/func_gconcat.test:
remove some \r
sql/share/serbian/errmsg.txt:
Added missing error messages