diff options
author | unknown <monty@work.mysql.com> | 2001-06-01 23:51:23 +0200 |
---|---|---|
committer | unknown <monty@work.mysql.com> | 2001-06-01 23:51:23 +0200 |
commit | 084cd11f31eb285788551c46f9ba1277dc01cc8d (patch) | |
tree | 4c917b01d5598c1df213f3810dac420e5a21a8dd | |
parent | 1fc36ec65a246c5bad403e10d3e871241a8b56a4 (diff) | |
parent | 740a7e58409dd979ed9b75ee0b1963d9b10c1fc7 (diff) | |
download | mariadb-git-084cd11f31eb285788551c46f9ba1277dc01cc8d.tar.gz |
merge
BitKeeper/etc/logging_ok:
auto-union
include/my_sys.h:
Auto merged
myisam/myisamchk.c:
Auto merged
sql/share/portuguese/errmsg.txt:
Auto merged
sql/sql_table.cc:
Auto merged
-rw-r--r-- | BitKeeper/etc/logging_ok | 1 | ||||
-rw-r--r-- | Docs/manual.texi | 189 | ||||
-rw-r--r-- | include/my_sys.h | 2 | ||||
-rw-r--r-- | libmysql/errmsg.c | 31 | ||||
-rw-r--r-- | myisam/mi_check.c | 4 | ||||
-rw-r--r-- | mysys/my_copy.c | 4 | ||||
-rw-r--r-- | mysys/my_static.c | 1 | ||||
-rw-r--r-- | mysys/my_symlink2.c | 6 | ||||
-rw-r--r-- | sql/mysqld.cc | 7 | ||||
-rw-r--r-- | sql/net_pkg.cc | 2 | ||||
-rw-r--r-- | sql/share/portuguese/errmsg.txt | 396 | ||||
-rw-r--r-- | sql/slave.cc | 118 | ||||
-rw-r--r-- | sql/sql_parse.cc | 14 | ||||
-rw-r--r-- | sql/sql_table.cc | 12 |
14 files changed, 472 insertions, 315 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 709fb003c88..79984519528 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -3,5 +3,6 @@ jani@janikt.pp.saunalahti.fi monty@hundin.mysql.fi monty@work.mysql.com mwagner@evoq.mwagner.org +paul@central.snake.net sasha@mysql.sashanet.com tonu@hundin.mysql.fi diff --git a/Docs/manual.texi b/Docs/manual.texi index 83e607b19cc..d17e51ba26b 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -688,6 +688,7 @@ System/Compile Time and Startup Parameter Tuning * Compile and link options:: How compiling and linking affects the speed of MySQL * Disk issues:: Disk issues +* Symbolic links:: * Server parameters:: Tuning server parameters * Table cache:: How MySQL opens and closes tables * Creating many tables:: Drawbacks of creating large numbers of tables in the same database @@ -697,9 +698,10 @@ System/Compile Time and Startup Parameter Tuning * Table locking:: Table locking issues * DNS:: -Disk Issues +Using Symbolic Links -* Symbolic links:: Using symbolic links for databases and tables +* Symbolic links to database:: +* Symbolic links to tables:: Speed of Queries that Access or Update Data @@ -9603,7 +9605,7 @@ shell> cd mysql_installation_directory shell> ./bin/safe_mysqld --user=mysql & @end example -For a binary distribution, do this: +For a binary distribution (not RPM or pkg packages), do this: @example shell> cd mysql_installation_directory @@ -10407,9 +10409,8 @@ recommended for systems where only local requests are allowed. @xref{DNS}. Don't use new, possible wrong routines. Implies @code{--skip-delay-key-write}. This will also set default table type to @code{ISAM}. @xref{ISAM}. -@item --skip-stack-trace -Don't write stack traces. This option is useful when you are running -@code{mysqld} under a debugger. @xref{Debugging server}. +@item --skip-symlinks +Don't delete or rename files that symlinks in the data directory points to. @item --skip-safemalloc If @strong{MySQL} is configured with @code{--with-debug=full}, all programs @@ -10421,6 +10422,10 @@ need memory checking, by using this option. Don't allow 'SHOW DATABASE' commands, unless the user has @strong{process} privilege. +@item --skip-stack-trace +Don't write stack traces. This option is useful when you are running +@code{mysqld} under a debugger. @xref{Debugging server}. + @item --skip-thread-priority Disable using thread priorities for faster response time. @@ -12155,6 +12160,13 @@ Normally this is done with the @code{su} command. For more details, see @ref{Changing MySQL user, , Changing @strong{MySQL} user}. @item +Don't support symlinks to tables (This can be disabled with the +@code{--skip-symlinks} option. This is especially important if you run +@code{mysqld} as root as anyone that has write access to the mysqld data +directories could then delete any file in the system! +@xref{Symbolic links to tables}. + +@item If you put a password for the Unix @code{root} user in the @code{mysql.server} script, make sure this script is readable only by @code{root}. @@ -18810,6 +18822,8 @@ or DELAY_KEY_WRITE = @{0 | 1@} or ROW_FORMAT= @{ default | dynamic | fixed | compressed @} or RAID_TYPE= @{1 | STRIPED | RAID0 @} RAID_CHUNKS=# RAID_CHUNKSIZE=# or UNION = (table_name,[table_name...]) +or DATA DIRECTORY="directory" +or INDEX DIRECTORY="directory" select_statement: [IGNORE | REPLACE] SELECT ... (Some legal select statement) @@ -19141,6 +19155,14 @@ In the created table the @code{PRIMARY} key will be placed first, followed by all @code{UNIQUE} keys and then the normal keys. This helps the @strong{MySQL} optimizer to prioritize which key to use and also more quickly detect duplicated @code{UNIQUE} keys. + +@item +By using @code{DATA DIRECTORY="directory"} or @code{INDEX +DIRECTORY="directory"} you can specify where the table handler should +put it's table and index files. This only works for @code{MyISAM} tables +in @code{MySQL} 4.0, when you are not using the @code{--skip-symlinks} +option. @xref{Symbolic links to tables}. + @end itemize @cindex silent column changes @@ -23691,6 +23713,10 @@ with updates and inserts. This is done by automatically combining adjacent deleted blocks and by extending blocks if the next block is deleted. @item @code{myisampack} can pack @code{BLOB} and @code{VARCHAR} columns. +@item +You can use put the datafile and index file on different directories +to get more speed (with the @code{DATA/INDEX DIRECTORY="path"} option to +@code{CREATE TABLE}). @xref{CREATE TABLE}. @end itemize @code{MyISAM} also supports the following things, which @strong{MySQL} @@ -29737,6 +29763,11 @@ Replication will be done correctly with @code{AUTO_INCREMENT}, @code{RAND()}. You can, for example, use @code{UNIX_TIMESTAMP()} for the argument to @code{RAND()}. @item +You have to use the same character set (@code{--default-character-set}) +on the master and the slave. If not, you may get duplicate key errors on +the slave, because a key that is regarded as unique on the master may +not be that in the other character set. +@item @code{LOAD DATA INFILE} will be handled properly as long as the file still resides on the master server at the time of update propagation. @code{LOAD LOCAL DATA INFILE} will be skipped. @@ -30839,6 +30870,7 @@ are using @code{--skip-locking} @menu * Compile and link options:: How compiling and linking affects the speed of MySQL * Disk issues:: Disk issues +* Symbolic links:: Using Symbolic Links * Server parameters:: Tuning server parameters * Table cache:: How MySQL opens and closes tables * Creating many tables:: Drawbacks of creating large numbers of tables in the same database @@ -30951,7 +30983,7 @@ Linux binary is linked statically to get it faster and more portable. @cindex disk issues @cindex performance, disk issues -@node Disk issues, Server parameters, Compile and link options, System +@node Disk issues, Symbolic links, Compile and link options, System @subsection Disk Issues @itemize @bullet @@ -31029,31 +31061,40 @@ really useful on a database server), you can mount your file systems with the noatime flag. @end itemize -@menu -* Symbolic links:: Using symbolic links for databases and tables -@end menu - @cindex symbolic links @cindex links, symbolic -@cindex databases, symbolic links -@cindex tables, symbolic links -@node Symbolic links, , Disk issues, Disk issues -@subsubsection Using Symbolic Links for Databases and Tables +@node Symbolic links, Server parameters, Disk issues, System +@subsection Using Symbolic Links You can move tables and databases from the database directory to other locations and replace them with symbolic links to the new locations. You might want to do this, for example, to move a database to a file -system with more free space. +system with more free space or increase the speed of your system by +spreading your tables to different disk. + +The recommended may to do this, is to just symlink databases to different +disk and only symlink tables as a last resort. +. -If @strong{MySQL} notices that a table is symbolically linked, it will -resolve the symlink and use the table it points to instead. This works -on all systems that support the @code{realpath()} call (at least Linux -and Solaris support @code{realpath()})! On systems that don't support -@code{realpath()}, you should not access the table through the real path -and through the symlink at the same time! If you do, the table will be -inconsistent after any update. +@cindex databases, symbolic links +@menu +* Symbolic links to database:: +* Symbolic links to tables:: +@end menu -@strong{MySQL} doesn't that you link one directory to multiple +@node Symbolic links to database, Symbolic links to tables, Symbolic links, Symbolic links +@subsubsection Using Symbolic Links for Databases + +The way to symlink a database is to first create a directory on some +disk where you have free space and then create a symlink to it from +the @strong{MySQL} database directory. + +@example +shell> mkdir /dr1/databases/test +shell> ln -s /dr1/databases/test mysqld-datadir +@end example + +@strong{MySQL} doesn't support that you link one directory to multiple databases. Replacing a database directory with a symbolic link will work fine as long as you don't make a symbolic link between databases. Suppose you have a database @code{db1} under the @strong{MySQL} data @@ -31085,11 +31126,82 @@ On Windows you can use internal symbolic links to directories by compiling @strong{MySQL} with @code{-DUSE_SYMDIR}. This allows you to put different databases on different disks. @xref{Windows symbolic links}. +@cindex databases, symbolic links +@node Symbolic links to tables, , Symbolic links to database, Symbolic links +@subsubsection Using Symbolic Links for Tables + +Before @strong{MySQL} 4.0 you should not symlink tables, if you are not +very carefully with them. The problem is that if you run @code{ALTER +TABLE}, @code{REPAIR TABLE} or @code{OPTIMIZE TABLE} on a symlinked +table, the symlinks will be removed and replaced by the original +files. This happens because the above command works by creating a +temporary file in the database directory and when the command is +complete, replace the original file with the temporary file. + +You should not symlink tables on system that doesn't have a fully +working @code{realpath()} call. (At least Linux and Solaris support +@code{realpath()}) + +In @strong{MySQL} 4.0 symlinks is only fully supported for @code{MyISAM} +tables. For other table types you will probably get strange problems +when doing any of the above mentioned commands. + +The handling of symbolic links in @strong{MySQL} 4.0 works the following +way (this is mostly relevant only for @code{MyISAM} tables). + +@itemize @bullet +@item +In the data directory you will always have the table definition file +and the data/index files. +@item +You can symlink the index file and the data file to different directories +independent of the other. +@item +The symlinking can be done from the operating system (if @code{mysqld} is +not running) or with the @code{INDEX/DATA DIRECTORY="path-to-dir"} command +in @code{CREATE TABLE}. @xref{CREATE TABLE}. +@item +@code{myisamchk} will not replace a symlink with the index/file but +work directly on the files the symlinks points to. Any temporary files +will be created in the same directory where the data/index file is. +@item +When you drop a table that is using symlinks, both the symlink and the +file the symlink points to is dropped. This is a good reason to why you +should NOT run @code{mysqld} as root and not allow persons to have write +access to the @strong{MySQL} database directories. +@item +If you rename a table with @code{ALTER TABLE RENAME} and you don't change +database, the symlink in the database directory will be renamed to the new +name and the data/index file will be renamed accordingly. +@item +If you use @code{ALTER TABLE RENAME} to move a table to another database, +then the table will be moved to the other database directory and the old +symlinks and the files they pointed to will be deleted. +@item +If you are not using symlinks you should use the @code{--skip-symlinks} +option to @code{mysqld} to ensure that no one can drop or rename a file +outside of the @code{mysqld} data directory. +@end itemize + +Things that are not yet fully supported: + +@cindex TODO, symlinks +@itemize @bullet +@item +@code{ALTER TABLE} ignores all @code{INDEX/DATA DIRECTORY="path"} options. +@item +@code{CREATE TABLE} doesn't report if the table has symbolic links. +@item +@code{mysqldump} doesn't include the symbolic links information in the output. +@item +@code{BACKUP TABLE} and @code{RESTORE TABLE} doesn't use symbolic links. +@end itemize + @cindex parameters, server @cindex @code{mysqld} server, buffer sizes @cindex buffer sizes, @code{mysqld} server @cindex startup parameters -@node Server parameters, Table cache, Disk issues, System +@node Server parameters, Table cache, Symbolic links, System @subsection Tuning Server Parameters You can get the default buffer sizes used by the @code{mysqld} server @@ -38862,6 +38974,12 @@ Post the test file using @code{mysqlbug} to @email{mysql@@lists.mysql.com}. @node ALTER TABLE problems, Change column order, No matching rows, Problems @section Problems with @code{ALTER TABLE}. +@code{ALTER TABLE} changes a table to the current character set. +If you during @code{ALTER TABLE} get a duplicate key error, then the cause +is either that the new character sets maps to keys to the same value +or that the table is corrupted, in which case you should run +@code{REPAIR TABLE} on the table. + If @code{ALTER TABLE} dies with an error like this: @example @@ -45422,6 +45540,8 @@ Slovak error messages. Romanian error messages. @item Peter Feher Hungarian error messages. +@item Roberto M. Serqueira +Portugise error messages. @item David Sacerdote @email{davids@@secnet.com} Ideas for secure checking of DNS hostnames. @item Wei-Jou Chen @email{jou@@nematic.ieo.nctu.edu.tw} @@ -45436,7 +45556,7 @@ Active mailing list member. Ported (and extended) the benchmark suite to @code{DBI}/@code{DBD}. Have been of great help with @code{crash-me} and running benchmarks. Some new date functions. The mysql_setpermissions script. -@item Jay Flaherty @email{fty@@utk.edu} +@item Jay Flaherty @email{fty@@mediapulse.com} Big parts of the Perl @code{DBI}/@code{DBD} section in the manual. @item Paul Southworth @email{pauls@@etext.org}, Ray Loyzaga @email{yar@@cs.su.oz.au} Proof-reading of the Reference Manual. @@ -45584,9 +45704,11 @@ Added @code{ALTER TABLE table_name DISABLE KEYS} and @item Added @code{HANDLER} command. @item -Added @code{SQL_CALC_FOUND_ROWS} and @code{FOUND_ROWS()}. This make it -possible to know how many rows a query would have returned if one hadn't -used @code{LIMIT}. +Added support for symbolic links to @code{MyISAM} tables. +@item +Added @code{SQL_CALC_FOUND_ROWS} and @code{FOUND_ROWS()}. This makes it +possible to know how many rows a query would have returned +without a @code{LIMIT} clause. @item Changed output format of @code{SHOW OPEN TABLES}. @item @@ -45598,8 +45720,6 @@ Added @code{ORDER BY} syntax to @code{UPDATE} and @code{DELETE}. @item Optimized queries of type: @code{SELECT DISTINCT * from table_name ORDER by key_part1 LIMIT #} -@item -Added support for sym-linking of MyISAM tables. @end itemize @node News-3.23.x, News-3.22.x, News-4.0.x, News @@ -45693,6 +45813,13 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.39 @itemize @bullet @item +Fixed problem that client 'hang' when @code{LOAD TABLE FROM MASTER} failed. +@item +Running @code{myisamchk --fast --force} will not anymore repair tables +that only had the open count wrong. +@item +Added functions to handle symbolic links to make life easier in 4.0. +@item We are now using the @code{-lcma} thread library on HPUX 10.20 to get @strong{MySQL} more stabile on HPUX. @item diff --git a/include/my_sys.h b/include/my_sys.h index b1008858bae..c492262d925 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -209,7 +209,7 @@ extern long lCurMemory,lMaxMemory; /* from safemalloc */ extern ulong my_default_record_cache_size; extern my_bool NEAR my_disable_locking,NEAR my_disable_async_io, - NEAR my_disable_flush_key_blocks; + NEAR my_disable_flush_key_blocks, NEAR my_disable_symlinks; extern char wild_many,wild_one,wild_prefix; extern const char *charsets_dir; extern char *defaults_extra_file; diff --git a/libmysql/errmsg.c b/libmysql/errmsg.c index 1d95e5ac84f..71fc25fd77c 100644 --- a/libmysql/errmsg.c +++ b/libmysql/errmsg.c @@ -49,6 +49,35 @@ const char *client_errors[]= "Embedded server", }; +/* Start of code added by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */ + +#elif defined PORTUGUESE +const char *client_errors[]= +{ + "Erro desconhecido do MySQL", + "Não pode criar 'UNIX socket' (%d)", + "Não pode se conectar ao servidor MySQL local através do 'socket' '%-.64s' (%d)", + "Não pode se conectar ao servidor MySQL em '%-.64s' (%d)", + "Não pode criar 'socket TCP/IP' (%d)", + "'Host' servidor MySQL '%-.64s' (%d) desconhecido", + "Servidor MySQL desapareceu", + "Incompatibilidade de protocolos. Versão do Servidor: %d - Versão do Cliente: %d", + "Cliente do MySQL com falta de memória", + "Informação inválida de 'host'", + "Localhost via 'UNIX socket'", + "%-.64s via 'TCP/IP'", + "Erro na negociação de acesso ao servidor", + "Conexão perdida com servidor MySQL durante 'query'", + "Comandos fora de sincronismo. Você não pode executar este comando agora", + "%-.64s via 'named pipe'", + "Não pode esperar pelo 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)", + "Não pode abrir 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)", + "Não pode estabelecer o estado do 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)", + "Não pode inicializar conjunto de caracteres %-.64s (caminho %-.64s)", + "Obteve pacote maior do que 'max_allowed_packet'", + "Embedded server" +}; + #else /* ENGLISH */ const char *client_errors[]= { @@ -73,7 +102,7 @@ const char *client_errors[]= "Can't set state of named pipe to host: %-.64s pipe: %-.32s (%lu)", "Can't initialize character set %-.64s (path: %-.64s)", "Got packet bigger than 'max_allowed_packet'", - "Embedded server", + "Embedded server" }; #endif diff --git a/myisam/mi_check.c b/myisam/mi_check.c index 0aa9081e996..f52446e91cf 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -117,7 +117,9 @@ int chk_status(MI_CHECK *param, register MI_INFO *info) mi_check_print_warning(param, "%d clients is using or hasn't closed the table properly", share->state.open_count); - param->warning_printed=save; + /* If this will be fixed by the check, forget the warning */ + if (param->testflag & T_UPDATE_STATE) + param->warning_printed=save; } return 0; } diff --git a/mysys/my_copy.c b/mysys/my_copy.c index bfd7e957585..be131873118 100644 --- a/mysys/my_copy.c +++ b/mysys/my_copy.c @@ -54,7 +54,7 @@ int my_copy(const char *from, const char *to, myf MyFlags) if (MyFlags & MY_HOLD_ORIGINAL_MODES) /* Copy stat if possible */ new_file_stat=stat((char*) to, &new_stat_buff); - if ((from_file=my_open(from,O_RDONLY,MyFlags)) >= 0) + if ((from_file=my_open(from,O_RDONLY | O_SHARE,MyFlags)) >= 0) { if (stat(from,&stat_buff)) { @@ -64,7 +64,7 @@ int my_copy(const char *from, const char *to, myf MyFlags) if (MyFlags & MY_HOLD_ORIGINAL_MODES && !new_file_stat) stat_buff=new_stat_buff; if ((to_file= my_create(to,(int) stat_buff.st_mode, - O_WRONLY | O_TRUNC | O_BINARY, + O_WRONLY | O_TRUNC | O_BINARY | O_SHARE, MyFlags)) < 0) goto err; diff --git a/mysys/my_static.c b/mysys/my_static.c index f1339877273..3fc68455841 100644 --- a/mysys/my_static.c +++ b/mysys/my_static.c @@ -97,4 +97,5 @@ int (*fatal_error_handler_hook)(uint error,const char *str,myf MyFlags)= my_bool NEAR my_disable_locking=0; my_bool NEAR my_disable_async_io=0; my_bool NEAR my_disable_flush_key_blocks=0; +my_bool NEAR my_disable_symlinks=0; my_bool NEAR mysys_uses_curses=0; diff --git a/mysys/my_symlink2.c b/mysys/my_symlink2.c index 671531393f7..9fcd993ac1f 100644 --- a/mysys/my_symlink2.c +++ b/mysys/my_symlink2.c @@ -62,7 +62,8 @@ File my_create_with_symlink(const char *linkname, const char *filename, int my_delete_with_symlink(const char *name, myf MyFlags) { char link_name[FN_REFLEN]; - int was_symlink= !my_readlink(link_name, name, MYF(0)); + int was_symlink= (!my_disable_symlinks && + !my_readlink(link_name, name, MYF(0))); int result; DBUG_ENTER("my_delete_with_symlink"); @@ -90,7 +91,8 @@ int my_rename_with_symlink(const char *from, const char *to, myf MyFlags) return my_rename(from, to, MyFlags); #else char link_name[FN_REFLEN], tmp_name[FN_REFLEN]; - int was_symlink= !my_readlink(link_name, name, MYF(0)); + int was_symlink= (!my_disable_symlinks && + !my_readlink(link_name, name, MYF(0))); int result; DBUG_ENTER("my_rename_with_symlink"); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 65f70e7702d..57fcb067cbc 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2484,7 +2484,7 @@ enum options { OPT_TEMP_POOL, OPT_DO_PSTACK, OPT_TX_ISOLATION, OPT_GEMINI_FLUSH_LOG, OPT_GEMINI_RECOVER, OPT_GEMINI_UNBUFFERED_IO, OPT_SKIP_SAFEMALLOC, - OPT_SKIP_STACK_TRACE, OPT_REPORT_HOST, + OPT_SKIP_STACK_TRACE, OPT_SKIP_SYMLINKS, OPT_REPORT_HOST, OPT_REPORT_USER, OPT_REPORT_PASSWORD, OPT_REPORT_PORT }; @@ -2619,6 +2619,7 @@ static struct option long_options[] = { {"skip-show-database", no_argument, 0, (int) OPT_SKIP_SHOW_DB}, {"skip-slave-start", no_argument, 0, (int) OPT_SKIP_SLAVE_START}, {"skip-stack-trace", no_argument, 0, (int) OPT_SKIP_STACK_TRACE}, + {"skip-symlinks", no_argument, 0, (int) OPT_SKIP_SYMLINKS}, {"skip-thread-priority", no_argument, 0, (int) OPT_SKIP_PRIOR}, {"sql-bin-update-same", no_argument, 0, (int) OPT_SQL_BIN_UPDATE_SAME}, #include "sslopt-longopts.h" @@ -3445,6 +3446,7 @@ static void get_options(int argc,char **argv) myisam_delay_key_write=0; myisam_concurrent_insert=0; myisam_recover_options= HA_RECOVER_NONE; + my_disable_symlinks=1; ha_open_options&= ~HA_OPEN_ABORT_IF_CRASHED; break; case (int) OPT_SAFE: @@ -3501,6 +3503,9 @@ static void get_options(int argc,char **argv) case (int) OPT_SKIP_STACK_TRACE: test_flags|=TEST_NO_STACKTRACE; break; + case (int) OPT_SKIP_SYMLINKS: + my_disable_symlinks=1; + break; case (int) OPT_BIND_ADDRESS: if (optarg && isdigit(optarg[0])) { diff --git a/sql/net_pkg.cc b/sql/net_pkg.cc index 073c716d793..0b50b34c7bd 100644 --- a/sql/net_pkg.cc +++ b/sql/net_pkg.cc @@ -140,7 +140,7 @@ net_printf(NET *net, uint errcode, ...) void send_ok(NET *net,ha_rows affected_rows,ulonglong id,const char *message) { - if(net->no_send_ok) + if (net->no_send_ok) // hack for re-parsing queries return; char buff[MYSQL_ERRMSG_SIZE+10],*pos; diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index 65a1de7b4ff..bb9e06c69b8 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -1,211 +1,211 @@ /* Copyright Abandoned 1997 TCX DataKonsult AB & Monty Program KB & Detron HB This file is public domain and comes with NO WARRANTY of any kind */ - +/* Updated by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */ "hashchk", "isamchk", -"NO", -"YES", -"Nao consegui criar o arquivo '%-.64s' (Erro: %d)", -"Nao consegui criar a tabela '%-.64s' (Erro: %d)", -"Nao consegui criar o banco de dados '%-.64s'. Erro %d", -"Nao consegui criar o banco de dados '%-.64s'. Este banco ja existe", -"Nao consegui deletar o banco de dados '%-.64s'. Este banco nao existe", -"Erro deletando o banco de dados(Nao foi possivel deletar '%-.64s', erro %d)", -"Erro deletando o banco de dados(Nao foi possivel remover o diretorio '%-.64s', erro %d)", -"Erro ao deletar '%-.64s' (Erro: %d)", -"Nao foi possivel ler o registro na tabela do sistema", -"Nao foi possivel obter o status de '%-.64s' (Erro: %d)", -"Nao foi possivel obter o diretorio corrente (Erro: %d)", -"Nao foi possivel travar o arquivo (Erro: %d)", -"Nao foi possivel abrir arquivo: '%-.64s'. (Erro: %d)", -"Nao foi possivel encontrar arquivo: '%-.64s' (Erro: %d)", -"Nao foi possivel ler o diretorio de '%-.64s' (Erro: %d)", -"Nao foi possivel ir para o diretorio '%-.64s' (Erro: %d)", -"Registro alterado apos a ultima leitura da tabela '%-.64s'", -"Disco cheio (%s). Aguardando espaco livre....", -"Nao foi possivel gravar, chave duplicada na tabela '%-.64s'", -"Erro ao fechar '%-.64s' (Erro: %d)", -"Erro lendo arquivo '%-.64s' (Erro: %d)", -"Erro ao renomear '%-.64s' to '%-.64s' (Erro: %d)", -"Error gravando arquivo '%-.64s' (Erro: %d)", -"'%-.64s' esta travado contra alteracoes", -"Ordenacao cancelada", -"Visao '%-.64s' nao existe para '%-.64s'", -"Erro %d do manipulador de tabelas", -"Manipulador da tabela '%-.64s' nao suporta esta opcao", -"Nao foi possivel encontrar o registro em '%-.64s'", -"Informacao invalida no arquivo: '%-.64s'", -"Arquivo de indice invalido na tabela: '%-.64s'. Tente conserta-lo!", -"Arquivo de indice destaualizado na tabela '%-.64s'; Conserte-o!", -"'%-.64s' esta disponivel somente para leitura", -"Sem memoria. Renicie o programa e tente novamente (Necessita de %d bytes)", -"Sem memoria para ordenacao. Aumente o espaco de memoria para ordenacao.", -"Fim de arquivo inesperado enquanto lendo o arquivo '%-.64s' (Erro: %d)", -"Excesso de conexoes", -"Thread sem memoria disponivel", -"Nao foi possivel obter o nome da maquina para este endereco IP", -"Comunicacao invalida", -"Acesso negado ao usuario : '%-.32s@%-.64s' ao banco de dados '%-.64s'", -"Acesso negado ao usuario: '%-.32s@%-.64s' (usando a senha: %s)", -"Nenhum banco de dados selecionado", +"não", +"sim", +"Não pode criar arquivo '%-.64s' (erro no. %d)", +"Não pode criar tabela '%-.64s' (erro no. %d)", +"Não pode criar banco de dados '%-.64s' (erro no. %d)", +"Não pode criar banco de dados '%-.64s'. Banco de dados já existe", +"Não pode eliminar banco de dados '%-.64s'. Banco de dados não existe", +"Erro ao eliminar banco de dados (não pode eliminar '%-.64s' - erro no. %d)", +"Erro ao eliminar banco de dados (não pode remover diretório '%-.64s' - erro no. %d)", +"Erro na deleção de '%-.64s' (erro no. %d)", +"Não pode ler registro em tabela do sistema", +"Não pode obter status de '%-.64s' (erro no. %d)", +"Não pode obter diretório corrente (erro no. %d)", +"Não pode travar arquivo (erro no. %d)", +"Não pode abrir arquivo '%-.64s' (erro no. %d)", +"Não pode encontrar arquivo '%-.64s' (erro no. %d)", +"Não pode ler diretório de '%-.64s' (erro no. %d)", +"Não pode mudar para o diretório '%-.64s' (erro no. %d)", +"Registro alterado desde a última leitura da tabela '%-.64s'", +"Disco cheio (%s). Aguardando alguém liberar algum espaço....", +"Não pode gravar. Chave duplicada na tabela '%-.64s'", +"Erro ao fechar '%-.64s' (erro no. %d)", +"Erro ao ler arquivo '%-.64s' (erro no. %d)", +"Erro ao renomear '%-.64s' para '%-.64s' (erro no. %d)", +"Erro ao gravar arquivo '%-.64s' (erro no. %d)", +"'%-.64s' está com travamento contra alterações", +"Ordenação abortada", +"'View' '%-.64s' não existe para '%-.64s'", +"Obteve erro %d no manipulador de tabelas", +"Manipulador de tabela para '%-.64s' não tem esta opção", +"Não pode encontrar registro em '%-.64s'", +"Informação incorreta no arquivo '%-.64s'", +"Arquivo chave incorreto para tabela '%-.64s'. Tente reparar", +"Arquivo chave desatualizado para tabela '%-.64s'. Repare-o!", +"Tabela '%-.64s' é somente para leitura", +"Sem memória. Reinicie o programa e tente novamente (necessita de %d bytes)", +"Sem memória para ordenação. Aumente tamanho do 'buffer' de ordenação", +"Encontrado fim de arquivo inesperado ao ler arquivo '%-.64s' (erro no. %d)", +"Excesso de conexões", +"Sem memória. Verifique se o mysqld ou algum outro processo está usando toda memória disponível. Se não, você pode ter que usar 'ulimit' para permitir ao mysqld usar mais memória ou se você pode adicionar mais área de 'swap'", +"Não pode obter nome do 'host' para seu endereço", +"Negociação de acesso falhou", +"Acesso negado para o usuário '%-.32s@%-.64s' ao banco de dados '%-.64s'", +"Acesso negado para o usuário '%-.32s@%-.64s' (uso de senha: %s)", +"Nenhum banco de dados foi selecionado", "Comando desconhecido", -"Coluna '%-.64s' nao pode ser vazia", +"Coluna '%-.64s' não pode ter NULL", "Banco de dados '%-.64s' desconhecido", -"Tabela '%-.64s' ja existe", +"Tabela '%-.64s' já existe", "Tabela '%-.64s' desconhecida", -"Coluna: '%-.64s' em %s e ambigua", -"Finalizacao do servidor em andamento", -"Coluna '%-.64s' desconhecida em %s", -"'%-.64s' utilizado nao esta em 'group by'", -"Nao foi possivel agrupar em '%-.64s'", -"Clausula contem funcoes de soma e colunas juntos", -"Contagem de colunas nao confere com a contagem de valores", -"Nome do identificador '%-.64s' muito grande", +"Coluna '%-.64s' em '%-.64s' é ambígua", +"'Shutdown' do servidor em andamento", +"Coluna '%-.64s' desconhecida em '%-.64s'", +"'%-.64s' não está em 'GROUP BY'", +"Não pode agrupar em '%-.64s'", +"Cláusula contém funções de soma e colunas juntos", +"Contagem de colunas não confere com a contagem de valores", +"Nome identificador '%-.100s' é longo demais", "Nome da coluna '%-.64s' duplicado", "Nome da chave '%-.64s' duplicado", -"Inclusao de '%-.64s' duplicada para a chave %d", -"Especificador de coluna invalido para a coluna '%-.64s'", -"%s proximo de '%-.64s' a linha %d", -"Selecao vazia", -"Tabela/alias nao e unica: '%-.64s'", -"Valor padrao invalido para '%-.64s'", -"Mais de uma chave primaria definida", -"Muitas chaves definidas. O maximo permitido sao %d chaves", -"Muitas partes de chave definidas. O maximo permitido sao %d partes", -"Chave especificada e muito longa. O comprimento maximo permitido e %d", -"Coluna chave '%-.64s' nao existe na tabela", -"Coluna binaria '%-.64s' nao pode ser utilizada na definicao de chaves", -"Comprimento da coluna '%-.64s' muito grande(max = %d). Utilize o campo binario", -"Somente e permitido um campo auto incrementado, e ele deve ser chave da tabela", -"%s: pronto para conexoes\n", -"%s: Finalizacao concluida normalmente\n", -"%s: Recebeu o sinal %d. Cancelando!\n", -"%s: Finalizacao concluida\n", -"%s: Forcando a finalizacao da tarefa %ld usuario: '%-.64s'\n", -"Nao foi possivel criar o socket IP", -"Tabela '%-.64s' nao possui um indice criado por CREATE INDEX. Recrie a tabela", -"O separador de campos nao esta conforme esperado. Confira no manual", -"Nao e possivel utilizar comprimento de linha fixo com campos binarios. Favor usar 'fields terminated by'.", -"O arquivo '%-.64s' precisa estar no diretorio do banco de dados, e sua leitura permitida a todos", -"Arquivo '%-.64s' ja existe", -"Registros: %ld Apagados: %ld Ignorados: %ld Avisos: %ld", -"Registros: %ld Duplicados: %ld", -"Parte da chave errada. A parte utilizada nao e um texto ou tem comprimento maior que o definido", -"Nao e possivel retirar todas as colunas da tabela com ALTER TABLE. Use DROP TABLE", -"Nao foi possivel DROP '%-.64s'. Confira se este campo/chave existe", -"Registros: %ld Duplicados: %ld Avisos: %ld", -"INSERT TABLE '%-.64s' nao e permitido em FROM lista de tabelas", -"Tarefa desconhecida id: %lu", -"Voce nao e o responsavel pela tarefa %lu", -"Nenhuma tabela em uso", -"Muitos textos para a coluna %s e SET", -"Nao foi possivel um unico nome para o arquivo %s.(1-999)\n", -"Tabela '%-.64s' esta travada para leitura, e nao pode ser atualizada", -"Tabela '%-.64s' nao foi travada com LOCK TABLES", -"Campo binario '%-.64s' nao pode ter um valor inicial", -"Nome de banco de dados invalido: '%-.64s'", -"Nome de tabela invalido: '%-.64s'", -"O SELECT muitos registros, e possivelmente vai demorar. Confira sua clausula WHERE e utilize SET OPTION SQL_BIG_SELECTS=1 se o SELECT esta correto", +"Entrada '%-.64s' duplicada para a chave %d", +"Especificador de coluna incorreto para a coluna '%-.64s'", +"%s próximo a '%-.80s' na linha %d", +"'Query' estava vazia", +"Tabela/alias '%-.64s' não única", +"Valor 'default' inválido para '%-.64s'", +"Definida mais de uma chave primária", +"Especificadas chaves demais. O máximo permitido são %d chaves", +"Especificadas partes de chave demais. O máximo permitido são %d partes", +"Chave especificada longa demais. O comprimento máximo permitido é %d", +"Coluna chave '%-.64s' não existe na tabela", +"Coluna BLOB '%-.64s' não pode ser utilizada na especificação de chave para o tipo de tabela usado", +"Comprimento da coluna '%-.64s' grande demais (max = %d). Use BLOB em seu lugar", +"Definição incorreta de tabela. Somente é permitido um campo auto-incrementado e ele tem que ser definido como chave", +"%s: Pronto para conexões\n", +"%s: 'Shutdown' normal\n", +"%s: Obteve sinal %d. Abortando!\n", +"%s: 'Shutdown' completo\n", +"%s: Forçando finalização da 'thread' %ld - usuário '%-.32s'\n", +"Não pode criar 'socket' IP", +"Tabela '%-.64s' não possui um índice como o usado em CREATE INDEX. Recrie a tabela", +"Argumento separador de campos não é o esperado. Confira no manual", +"Você não pode usar comprimento de linha fixo com BLOBs. Favor usar 'fields terminated by'", +"Arquivo '%-.64s' tem que estar no diretório do banco de dados ou ter leitura permitida para todos", +"Arquivo '%-.80s' já existe", +"Registros: %ld - Deletados: %ld - Ignorados: %ld - Avisos: %ld", +"Registros: %ld - Duplicados: %ld", +"Parte de chave incorreta. A parte de chave usada não é um 'string' ou o comprimento usado é maior do que a parte de chave", +"Você não pode deletar todas as colunas com ALTER TABLE. Use DROP TABLE em seu lugar", +"Não pode fazer DROP '%-.64s'. Confira se este campo/chave existe", +"Registros: %ld - Duplicados: %ld - Avisos: %ld", +"INSERT TABLE '%-.64s' não é permitido em lista de tabelas FROM", +"'Id' de 'thread' %lu desconhecido", +"Você não é proprietário da 'thread' %lu", +"Nenhuma tabela usada", +"'Strings' demais para coluna '%-.64s' e SET", +"Não pode gerar um nome de arquivo de 'log' único '%-.64s'.(1-999)\n", +"Tabela '%-.64s' foi travada com trava de READ e não pode ser atualizada", +"Tabela '%-.64s' não foi travada com LOCK TABLES", +"Coluna BLOB '%-.64s' não pode ter um valor 'default'", +"Nome de banco de dados '%-.100s' incorreto", +"Nome de tabela '%-.100s' incorreto", +"O SELECT examinaria registros demais e provavelmente tomaria um tempo muito longo. Confira sua cláusula WHERE e use SET OPTION SQL_BIG_SELECTS=1, se o SELECT estiver correto", "Erro desconhecido", -"Procedimento %s desconhecido", -"Numero de parametros para o procedimento %s esta incorreto", -"Parametro incorreto para o procedimento %s", -"Tabela '%-.64s' descohecida em %s", -"Campo '%-.64s' definido em duplicidade", -"Invalid use of group function", -"Table '%-.64s' uses a extension that doesn't exist in this MySQL version", -"A table must have at least 1 column", -"The table '%-.64s' is full", -"Unknown character set: '%-.64s'", -"Too many tables. MySQL can only use %d tables in a join", -"Too many fields", -"Too big row size. The maximum row size, not counting blobs, is %d. You have to change some fields to blobs", -"Thread stack overrun: Used: %ld of a %ld stack. Use 'mysqld -O thread_stack=#' to specify a bigger stack if needed", -"Cross dependency found in OUTER JOIN. Examine your ON conditions", -"Column '%-.32s' is used with UNIQUE or INDEX but is not defined as NOT NULL", -"Can't load function '%-.64s'", -"Can't initialize function '%-.64s'; %-.80s", -"No paths allowed for shared library", -"Function '%-.64s' already exist", -"Can't open shared library '%-.64s' (errno: %d %s)", -"Can't find function '%-.64s' in library'", -"Function '%-.64s' is not defined", -"Host '%-.64s' is blocked because of many connection errors. Unblock with 'mysqladmin flush-hosts'", -"Host '%-.64s' is not allowed to connect to this MySQL server", -"You are using MySQL as an anonymous users and anonymous users are not allowed to change passwords", -"You must have privileges to update tables in the mysql database to be able to change passwords for others", -"Can't find any matching row in the user table", -"Rows matched: %ld Changed: %ld Warnings: %ld", -"Can't create a new thread (errno %d). If you are not out of available memory you can consult the manual for any possible OS dependent bug", -"Column count doesn't match value count at row %ld", -"Can't reopen table: '%-.64s', -"Invalid use of NULL value", -"Got error '%-.64s' from regexp", -"Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause", -"There is no such grant defined for user '%-.32s' on host '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for table '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for column '%-.64s' in table '%-.64s'", -"Illegal GRANT/REVOKE command. Please consult the manual which privleges can be used.", -"The host or user argument to GRANT is too long", -"Table '%-64s.%s' doesn't exist", -"There is no such grant defined for user '%-.32s' on host '%-.64s' on table '%-.64s'", -"The used command is not allowed with this MySQL version", -"Something is wrong in your syntax", -"Delayed insert thread couldn't get requested lock for table %-.64s", -"Too many delayed threads in use", -"Aborted connection %ld to db: '%-.64s' user: '%-.64s' (%s)", -"Got a packet bigger than 'max_allowed_packet'", -"Got a read error from the connection pipe", -"Got an error from fcntl()", -"Got packets out of order", -"Couldn't uncompress communication packet", -"Got an error reading communication packets" -"Got timeout reading communication packets", -"Got an error writing communication packets", -"Got timeout writing communication packets", -"Result string is longer than max_allowed_packet", -"The used table type doesn't support BLOB/TEXT columns", -"The used table type doesn't support AUTO_INCREMENT columns", -"INSERT DELAYED can't be used with table '%-.64s', because it is locked with LOCK TABLES", -"Incorrect column name '%-.100s'", -"The used table handler can't index column '%-.64s'", -"All tables in the MERGE table are not defined identically", -"Can't write, because of unique constraint, to table '%-.64s'", -"BLOB column '%-.64s' used in key specification without a key length", -"All parts of a PRIMARY KEY must be NOT NULL; If you need NULL in a key, use UNIQUE instead", -"Result consisted of more than one row", -"This table type requires a primary key", -"This version of MySQL is not compiled with RAID support", -"You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column", -"Key '%-.64s' doesn't exist in table '%-.64s'", -"Can't open table", -"The handler for the table doesn't support check/repair", -"You are not allowed to execute this command in a transaction", -"Got error %d during COMMIT", -"Got error %d during ROLLBACK", -"Got error %d during FLUSH_LOGS", -"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", -"Failed rebuilding the index of dumped table '%-.64s'", -"Error from master: '%-.64s'", -"Net error reading from master", -"Net error writing to master", -"Can't find FULLTEXT index matching the column list", -"Can't execute the given command because you have active locked tables or an active transaction", -"Unknown system variable '%-.64'", -"Table '%-.64s' is marked as crashed and should be repaired", -"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", -"User %-.64s has already more than 'max_user_connections' active connections", -"You may only use constant expressions with SET", +"'Procedure' '%-.64s' desconhecida", +"Número de parâmetros incorreto para a 'procedure' '%-.64s'", +"Parâmetros incorretos para a 'procedure' '%-.64s'", +"Tabela '%-.64s' desconhecida em '%-.32s'", +"Coluna '%-.64s' especificada duas vezes", +"Uso inválido da função GROUP", +"Tabela '%-.64s' usa uma extensão que não existe nesta versão do MySQL", +"Uma tabela tem que ter pelo menos uma (1) coluna", +"Tabela '%-.64s' está cheia", +"Conjunto de caracteres '%-.64s' desconhecido", +"Tabelas demais. O MySQL pode usar somente %d tabelas em um JOIN", +"Colunas demais", +"Tamanho de linha grande demais. O máximo tamanho de linha, não contando BLOBs, é de %d. Você tem que mudar alguns campos para BLOBs", +"Estouro da pilha do 'thread'. Usados %ld de uma pilha de %ld . Use 'mysqld -O thread_stack=#' para especificar uma pilha maior, se necessário", +"Dependência cruzada encontrada em OUTER JOIN. Examine suas condições ON", +"Coluna '%-.64s' é usada com UNIQUE ou INDEX, mas não está definida como NOT NULL", +"Não pode carregar a função '%-.64s'", +"Não pode inicializar a função '%-.64s' - '%-.80s'", +"Não é permitido caminho para biblioteca compartilhada", +"Função '%-.64s' já existe", +"Não pode abrir biblioteca compartilhada '%-.64s' (erro no. '%d' - '%-.64s')", +"Não pode encontrar a função '%-.64s' na biblioteca", +"Função '%-.64s' não está definida", +"'Host' '%-.64s' está bloqueado devido a muitos erros de conexão. Desbloqueie com 'mysqladmin flush-hosts'", +"'Host' '%-.64s' não tem permissão para se conectar com este servidor MySQL", +"Você está usando o MySQL como usuário anônimo e usuários anônimos não têm permissão para mudar senhas", +"Você tem que ter o privilégio para atualizar tabelas no banco de dados mysql para ser capaz de mudar a senha de outros", +"Não pode encontrar nenhuma linha que combine na tabela user", +"Linhas que combinaram: %ld - Alteradas: %ld - Avisos: %ld", +"Não pode criar uma nova 'thread' (erro no. %d). Se você não estiver sem memória disponível, você pode consultar o manual sobre uma possível falha dependente do sistema operacional", +"Contagem de colunas não confere com a contagem de valores na linha %ld", +"Não pode reabrir a tabela '%-.64s', +"Uso inválido do valor NULL", +"Obteve erro '%-.64s' em regexp", +"Mistura de colunas GROUP (MIN(),MAX(),COUNT()...) com colunas não GROUP é ilegal, se não existir cláusula GROUP BY", +"Não existe tal 'grant' definido para o usuário '%-.32s' no 'host' '%-.64s'", +"Comando '%-.16s' negado para o usuário '%-.32s@%-.64s' na tabela '%-.64s'", +"Comando '%-.16s' negado para o usuário '%-.32s@%-.64s' na coluna '%-.64s', na tabela '%-.64s'", +"Comando GRANT/REVOKE ilegal. Por favor consulte no manual quais privilégios podem ser usados.", +"Argumento de 'host' ou de usuário para o GRANT é longo demais", +"Tabela '%-.64s.%-.64s' não existe", +"Não existe tal 'grant' definido para o usuário '%-.32s' no 'host' '%-.64s', na tabela '%-.64s'", +"Comando usado não é permitido para esta versão do MySQL", +"Você tem um erro de sintaxe no seu SQL", +"'Thread' de inserção retardada ('delayed') não conseguiu obter trava solicitada na tabela '%-.64s'", +"Excesso de 'threads' retardadas ('delayed') em uso", +"Conexão %ld abortou para o banco de dados '%-.64s' - usuário '%-.32s' (%-.64s)", +"Obteve um pacote maior do que 'max_allowed_packet'", +"Obteve um erro de leitura no 'pipe' de conexão", +"Obteve um erro em fcntl()", +"Obteve pacotes fora de ordem", +"Não conseguiu descomprimir pacote de comunicação", +"Obteve um erro na leitura de pacotes de comunicação", +"Obteve expiração de tempo ('timeout') na leitura de pacotes de comunicação", +"Obteve um erro na gravação de pacotes de comunicação", +"Obteve expiração de tempo ('timeout') na escrita de pacotes de comunicação", +"'String' resultante é mais longa do que 'max_allowed_packet'", +"Tipo de tabela usado não permite colunas BLOB/TEXT", +"Tipo de tabela usado não permite colunas AUTO_INCREMENT", +"INSERT DELAYED não pode ser usado com a tabela '%-.64s', porque está travada com LOCK TABLES", +"Nome de coluna '%-.100s' incorreto", +"O manipulador de tabela usado não pode indexar a coluna '%-.64s'", +"Tabelas no MERGE não estão todas definidas identicamente", +"Não pode gravar, devido à restrição UNIQUE, na tabela '%-.64s'", +"Coluna BLOB '%-.64s' usada na especificação de chave sem o comprimento da chave", +"Todas as partes de uma PRIMARY KEY têm que ser NOT NULL. Se você precisar de NULL em uma chave, use UNIQUE em seu lugar", +"O resultado consistiu em mais do que uma linha", +"Este tipo de tabela requer uma chave primária", +"Esta versão do MySQL não foi compilada com suporte a RAID", +"Você está usando modo de atualização seguro e tentou atualizar uma tabela sem um WHERE que use uma coluna tipo KEY", +"Chave '%-.64s' não existe na tabela '%-.64s'", +"Não pode abrir a tabela", +"O manipulador de tabela não suporta check/repair", +"Não lhe é permitido executar este comando em uma 'transaction'", +"Obteve erro %d durante COMMIT", +"Obteve erro %d durante ROLLBACK", +"Obteve erro %d durante FLUSH_LOGS", +"Obteve erro %d durante CHECKPOINT", +"Conexão %ld abortada ao banco de dados '%-.64s' - usuário '%-.32s' - 'host' `%-.64s' ('%-.64s')", +"O manipulador de tabela não suporta DUMP binário de tabela", +"Binlog fechado. Não pode fazer RESET MASTER", +"Falhou na reconstrução do índice da tabela 'dumped' '%-.64s'", +"Erro no 'master' '%-.64s'", +"Erro de rede na leitura do 'master'", +"Erro de rede na gravação do 'master'", +"Não pode encontrar índice FULLTEXT que combine com a lista de colunas", +"Não pode executar o comando dado porque você tem tabelas ativas travadas ou uma 'transaction' ativa", +"Variável de sistema '%-.64' desconhecida", +"Tabela '%-.64s' está marcada como danificada e deve ser reparada", +"Tabela '%-.64s' está marcada como danificada e a última reparação (automática?) falhou", +"Aviso: Algumas tabelas não-transacionais alteradas não puderam ser reconstituídas ('rolled back')", +"'Multi-statement transaction' requereu mais do que 'max_binlog_cache_size' bytes de armazenagem. Aumente o valor desta variável do mysqld e tente novamente', +"Esta operação não pode ser realizada com um 'slave' em execução. Execute SLAVE STOP primeiro", +"Esta operação requer um 'slave' em execução. Configure o 'slave' e execute SLAVE START", +"O servidor não está configurado como 'slave'. Acerte o arquivo de configuração ou use CHANGE MASTER TO", +"Não pode inicializar a estrutura de informação do 'master'. Verifique as permissões em 'master.info'", +"Não conseguiu criar 'thread' de 'slave'. Verifique os recursos do sistema", +"Usuário '%-.64s' já possui 'max_user_connections' conexões ativas", +"Você pode usar apenas expressões de constante com SET", "Lock wait timeout exceeded", "The total number of locks exceeds the lock table size", "Update locks cannot be acquired during a READ UNCOMMITTED transaction", diff --git a/sql/slave.cc b/sql/slave.cc index 7bf89fdad48..605f33209cd 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -315,28 +315,31 @@ static int create_table_from_dump(THD* thd, NET* net, const char* db, const char* table_name) { uint packet_len = my_net_read(net); // read create table statement + Vio* save_vio; + HA_CHECK_OPT check_opt; TABLE_LIST tables; - int error = 0; + int error= 1; + handler *file; - if(packet_len == packet_error) - { - send_error(&thd->net, ER_MASTER_NET_READ); - return 1; - } - if(net->read_pos[0] == 255) // error from master - { - net->read_pos[packet_len] = 0; - net_printf(&thd->net, ER_MASTER, net->read_pos + 3); - return 1; - } + if (packet_len == packet_error) + { + send_error(&thd->net, ER_MASTER_NET_READ); + return 1; + } + if (net->read_pos[0] == 255) // error from master + { + net->read_pos[packet_len] = 0; + net_printf(&thd->net, ER_MASTER, net->read_pos + 3); + return 1; + } thd->command = COM_TABLE_DUMP; thd->query = sql_alloc(packet_len + 1); - if(!thd->query) - { - sql_print_error("create_table_from_dump: out of memory"); - net_printf(&thd->net, ER_GET_ERRNO, "Out of memory"); - return 1; - } + if (!thd->query) + { + sql_print_error("create_table_from_dump: out of memory"); + net_printf(&thd->net, ER_GET_ERRNO, "Out of memory"); + return 1; + } memcpy(thd->query, net->read_pos, packet_len); thd->query[packet_len] = 0; thd->current_tablenr = 0; @@ -347,13 +350,10 @@ static int create_table_from_dump(THD* thd, NET* net, const char* db, char* save_db = thd->db; thd->db = (char*)db; mysql_parse(thd, thd->query, packet_len); // run create table - thd->db = save_db; // leave things the way the were before + thd->db = save_db; // leave things the way the were before - if(thd->query_error) - { - close_thread_tables(thd); // mysql_parse takes care of the error send - return 1; - } + if (thd->query_error) + goto err; // mysql_parse took care of the error send bzero((char*) &tables,sizeof(tables)); tables.db = (char*)db; @@ -362,41 +362,37 @@ static int create_table_from_dump(THD* thd, NET* net, const char* db, thd->proc_info = "Opening master dump table"; if (!open_ltable(thd, &tables, TL_WRITE)) { - // open tables will send the error + send_error(&thd->net,0,0); // Send error from open_ltable sql_print_error("create_table_from_dump: could not open created table"); - close_thread_tables(thd); - return 1; + goto err; } - handler *file = tables.table->file; + file = tables.table->file; thd->proc_info = "Reading master dump table data"; if (file->net_read_dump(net)) { net_printf(&thd->net, ER_MASTER_NET_READ); sql_print_error("create_table_from_dump::failed in\ handler::net_read_dump()"); - close_thread_tables(thd); - return 1; + goto err; } - HA_CHECK_OPT check_opt; check_opt.init(); check_opt.flags|= T_VERY_SILENT; check_opt.quick = 1; thd->proc_info = "Rebuilding the index on master dump table"; - Vio* save_vio = thd->net.vio; // we do not want repair() to spam us with messages // just send them to the error log, and report the failure in case of // problems + save_vio = thd->net.vio; thd->net.vio = 0; - if (file->repair(thd,&check_opt )) - { - net_printf(&thd->net, ER_INDEX_REBUILD,tables.table->real_name ); - error = 1; - } + error=file->repair(thd,&check_opt) != 0; thd->net.vio = save_vio; + if (error) + net_printf(&thd->net, ER_INDEX_REBUILD,tables.table->real_name); + +err: close_thread_tables(thd); - thd->net.no_send_ok = 0; return error; } @@ -407,16 +403,16 @@ int fetch_nx_table(THD* thd, const char* db_name, const char* table_name, int error = 1; int nx_errno = 0; bool called_connected = (mysql != NULL); - if(!called_connected && !(mysql = mc_mysql_init(NULL))) - { - sql_print_error("fetch_nx_table: Error in mysql_init()"); - nx_errno = ER_GET_ERRNO; - goto err; - } + if (!called_connected && !(mysql = mc_mysql_init(NULL))) + { + sql_print_error("fetch_nx_table: Error in mysql_init()"); + nx_errno = ER_GET_ERRNO; + goto err; + } - if(!called_connected) + if (!called_connected) { - if(connect_to_master(thd, mysql, mi)) + if (connect_to_master(thd, mysql, mi)) { sql_print_error("Could not connect to master while fetching table\ '%-64s.%-64s'", db_name, table_name); @@ -424,21 +420,24 @@ int fetch_nx_table(THD* thd, const char* db_name, const char* table_name, goto err; } } - - if(request_table_dump(mysql, db_name, table_name)) - { - nx_errno = ER_GET_ERRNO; - sql_print_error("fetch_nx_table: failed on table dump request "); - goto err; - } + safe_connect(thd, mysql, mi); + if (slave_killed(thd)) + goto err; + + if (request_table_dump(mysql, thd->last_nx_db, thd->last_nx_table)) + { + nx_errno = ER_GET_ERRNO; + sql_print_error("fetch_nx_table: failed on table dump request "); + goto err; + } - if(create_table_from_dump(thd, &mysql->net, db_name, + if (create_table_from_dump(thd, &mysql->net, db_name, table_name)) - { - // create_table_from_dump will have sent the error alread - sql_print_error("fetch_nx_table: failed on create table "); - goto err; - } + { + // create_table_from_dump will have sent the error alread + sql_print_error("fetch_nx_table: failed on create table "); + goto err; + } error = 0; @@ -447,6 +446,7 @@ int fetch_nx_table(THD* thd, const char* db_name, const char* table_name, mc_mysql_close(mysql); if (nx_errno && thd->net.vio) send_error(&thd->net, nx_errno, "Error in fetch_nx_table"); + thd->net.no_send_ok = 0; // Clear up garbage after create_table_from_dump return error; } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index c8a750c8da6..d9610a7a5ae 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1243,21 +1243,11 @@ mysql_execute_command(void) if (strlen(tables->name) > NAME_LEN) { net_printf(&thd->net,ER_WRONG_TABLE_NAME,tables->name); - res=0; break; } - if(fetch_nx_table(thd, tables->db, tables->real_name, &glob_mi, 0)) - // fetch_nx_table is responsible for sending - // the error - { - res = 0; - thd->net.no_send_ok = 0; // easier to do it here - // this way we make sure that when we are done, we are clean - break; - } - - res = 0; + if (fetch_nx_table(thd, tables->db, tables->real_name, &glob_mi, 0)) + break; // fetch_nx_table did send the error to the client send_ok(&thd->net); break; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 69aa2a2c403..fdfe6a85c7b 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -832,13 +832,13 @@ static int prepare_for_restore(THD* thd, TABLE_LIST* table) int lock_retcode; pthread_mutex_lock(&LOCK_open); - if((lock_retcode = lock_table_name(thd, table)) < 0) + if ((lock_retcode = lock_table_name(thd, table)) < 0) { pthread_mutex_unlock(&LOCK_open); DBUG_RETURN(-1); } - if(lock_retcode && wait_for_locked_table_names(thd, table)) + if (lock_retcode && wait_for_locked_table_names(thd, table)) { unlock_table_name(thd, table); pthread_mutex_unlock(&LOCK_open); @@ -846,7 +846,7 @@ static int prepare_for_restore(THD* thd, TABLE_LIST* table) } pthread_mutex_unlock(&LOCK_open); - if(my_copy(src_path, + if (my_copy(src_path, fn_format(dst_path, dst_path,"", reg_ext, 4), MYF(MY_WME))) @@ -860,7 +860,7 @@ static int prepare_for_restore(THD* thd, TABLE_LIST* table) // generate table will try to send OK which messes up the output // for the client - if(generate_table(thd, table, 0)) + if (generate_table(thd, table, 0)) { unlock_table_name(thd, table); thd->net.no_send_ok = save_no_send_ok; @@ -921,7 +921,7 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables, // now we should be able to open the partially restored table // to finish the restore in the handler later on - if(!(table->table = reopen_name_locked_table(thd, table))) + if (!(table->table = reopen_name_locked_table(thd, table))) unlock_table_name(thd, table); } @@ -1748,7 +1748,7 @@ copy_data_between_tables(TABLE *from,TABLE *to, alter table is to delete the new table so there is no need to log the changes to it. */ error = ha_recovery_logging(thd,false); - if(error) + if (error) { error = 1; goto err; |