Commit 48e80bd5 authored by unknown's avatar unknown

Small fixes


Docs/manual.texi:
  Changelog and small fixes
mysys/my_init.c:
  Changed UMASK and UMASK_DIR to work also with octal
scripts/mysqlhotcopy.sh:
  Fixed some small bugs
sql/share/swedish/errmsg.OLD:
  Fixed wrong entry
BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
parent 7fe58c4f
monty@tramp.mysql.fi monty@donna.mysql.com
...@@ -581,7 +581,7 @@ Speed of queries that access or update data ...@@ -581,7 +581,7 @@ Speed of queries that access or update data
* Estimating performance:: Estimating query performance * Estimating performance:: Estimating query performance
* SELECT speed:: Speed of @code{SELECT} queries * SELECT speed:: Speed of @code{SELECT} queries
* Where optimizations:: How MySQL optimizes @code{WHERE} clauses * Where optimizations:: How MySQL optimizes @code{WHERE} clauses
* LEFT JOIN optimization:: How MySQL optimizes @code{LEFT JOIN} and ${RIGHT JOIN} * LEFT JOIN optimization:: How MySQL optimizes @code{LEFT JOIN} and @code{RIGHT JOIN}
* LIMIT optimization:: How MySQL optimizes @code{LIMIT} * LIMIT optimization:: How MySQL optimizes @code{LIMIT}
* Insert speed:: Speed of @code{INSERT} queries * Insert speed:: Speed of @code{INSERT} queries
* Update speed:: Speed of @code{UPDATE} queries * Update speed:: Speed of @code{UPDATE} queries
...@@ -30108,11 +30108,17 @@ clients connected to the @code{mysqld} server. ...@@ -30108,11 +30108,17 @@ clients connected to the @code{mysqld} server.
If you need more connections than the default (100), then you should restart If you need more connections than the default (100), then you should restart
@code{mysqld} with a bigger value for the @code{max_connections} variable. @code{mysqld} with a bigger value for the @code{max_connections} variable.
Note that @code{mysqld} actually allows (@code{max_connections}+1) clients to connect. Note that @code{mysqld} actually allows (@code{max_connections}+1)
The last connection is reserved for a user with the @strong{process} privilege. clients to connect. The last connection is reserved for a user with the
By not giving this privilege to normal users (they shouldn't need this), an @strong{process} privilege. By not giving this privilege to normal
administrator with this privilege can login and use @code{SHOW PROCESSLIST} users (they shouldn't need this), an administrator with this privilege
to find out what could be wrong. @xref{SHOW}. can login and use @code{SHOW PROCESSLIST} to find out what could be
wrong. @xref{SHOW}.
The maximum number of connects @strong{MySQL} is depending on how good
the thread library is on a given platform. Linux or Solaris should be
able to support 500-1000 simultaneous connections, depending on how much
RAM you have and what your clients are doing.
@node Out of memory, Packet too large, Too many connections, Common errors @node Out of memory, Packet too large, Too many connections, Common errors
@subsection @code{Out of memory} error @subsection @code{Out of memory} error
...@@ -30547,6 +30553,10 @@ shell> export UMASK_DIR ...@@ -30547,6 +30553,10 @@ shell> export UMASK_DIR
shell> /path/to/safe_mysqld & shell> /path/to/safe_mysqld &
@end example @end example
In @strong{MySQL} 3.23.25 and above, @strong{MySQL} assumes that the
value for @code{UMASK} and @code{UMASK_DIR} is in octal if it starts
with a zero.
@xref{Environment variables}. @xref{Environment variables}.
@node Not enough file handles, Using DATE, File permissions , Problems @node Not enough file handles, Using DATE, File permissions , Problems
...@@ -36774,6 +36784,10 @@ though, so 3.23 is not released as a stable version yet. ...@@ -36774,6 +36784,10 @@ though, so 3.23 is not released as a stable version yet.
@appendixsubsec Changes in release 3.23.25 @appendixsubsec Changes in release 3.23.25
@itemize @bullet @itemize @bullet
@item @item
Fixed that databasename works as second argument to @code{mysqlhotcopy}.
@item
@code{UMASK} and @code{UMASK_DIR} can now be specified in octal.
@item
Added @code{RIGHT JOIN}. This makes @code{RIGHT} a reserved word. Added @code{RIGHT JOIN}. This makes @code{RIGHT} a reserved word.
@item @item
Added @code{@@@@IDENTITY} as a synonym for @code{LAST_INSERT_ID()}. Added @code{@@@@IDENTITY} as a synonym for @code{LAST_INSERT_ID()}.
...@@ -41578,6 +41592,10 @@ If @code{mysqld} hangs you can try to use some system tools like ...@@ -41578,6 +41592,10 @@ If @code{mysqld} hangs you can try to use some system tools like
@code{strace} or @code{/usr/proc/bin/pstack} to examine where @code{strace} or @code{/usr/proc/bin/pstack} to examine where
@code{mysqld} has hung. @code{mysqld} has hung.
@example
strace /tmp/log libexec/mysqld
@end example
If @code{mysqld} starts to eat up CPU or memory or if it ``hangs'', you If @code{mysqld} starts to eat up CPU or memory or if it ``hangs'', you
can use @code{mysqladmin processlist status} to find out if someone is can use @code{mysqladmin processlist status} to find out if someone is
executing a query that takes a long time. It may be a good idea to executing a query that takes a long time. It may be a good idea to
...@@ -47,6 +47,19 @@ static my_bool win32_init_tcp_ip(); ...@@ -47,6 +47,19 @@ static my_bool win32_init_tcp_ip();
#endif #endif
static my_bool my_init_done=0; static my_bool my_init_done=0;
ulong atoi_octal(const char *str)
{
long int tmp;
while (*str && isspace(*str))
str++;
str2int(str,
(*str == '0' ? 8 : 10), /* Octalt or decimalt */
0, INT_MAX, &tmp);
return (ulong) tmp;
}
/* Init my_sys functions and my_sys variabels */ /* Init my_sys functions and my_sys variabels */
void my_init(void) void my_init(void)
...@@ -73,10 +86,12 @@ void my_init(void) ...@@ -73,10 +86,12 @@ void my_init(void)
if ((home_dir=getenv("HOME")) != 0) if ((home_dir=getenv("HOME")) != 0)
home_dir=intern_filename(home_dir_buff,home_dir); home_dir=intern_filename(home_dir_buff,home_dir);
#ifndef VMS #ifndef VMS
/* Default creation of new files */
if ((str=getenv("UMASK")) != 0) if ((str=getenv("UMASK")) != 0)
my_umask=atoi(str) | 0600; /* Default creation of new files */ my_umask=(int) (atoi_octal(str) | 0600);
/* Default creation of new dir's */
if ((str=getenv("UMASK_DIR")) != 0) if ((str=getenv("UMASK_DIR")) != 0)
my_umask_dir=atoi(str) | 0700; /* Default creation of new dir's */ my_umask_dir=(int) (atoi_octal(str) | 0700);
#endif #endif
#ifdef VMS #ifdef VMS
init_ctype(); /* Stupid linker don't link _ctype.c */ init_ctype(); /* Stupid linker don't link _ctype.c */
......
...@@ -25,11 +25,11 @@ WARNING: THIS IS VERY MUCH A FIRST-CUT ALPHA. Comments/patches welcome. ...@@ -25,11 +25,11 @@ WARNING: THIS IS VERY MUCH A FIRST-CUT ALPHA. Comments/patches welcome.
# Documentation continued at end of file # Documentation continued at end of file
my $VERSION = "1.6"; my $VERSION = "1.7";
my $OPTIONS = <<"_OPTIONS"; my $OPTIONS = <<"_OPTIONS";
Usage: $0 db_name new_db_name Usage: $0 db_name [new_db_name | directory]
-?, --help display this helpscreen and exit -?, --help display this helpscreen and exit
-u, --user=# user for database login if not current user -u, --user=# user for database login if not current user
...@@ -126,7 +126,9 @@ my $dsn = ";host=localhost"; ...@@ -126,7 +126,9 @@ my $dsn = ";host=localhost";
$dsn .= ";port=$opt{port}" if $opt{port}; $dsn .= ";port=$opt{port}" if $opt{port};
$dsn .= ";mysql_socket=$opt{socket}" if $opt{socket}; $dsn .= ";mysql_socket=$opt{socket}" if $opt{socket};
my $dbh = DBI->connect("dbi:mysql:$dsn", $opt{user}, $opt{password}, { my $dbh = DBI->connect("dbi:mysql:$dsn;mysql_read_default_group=mysqlhotcopy",
$opt{user}, $opt{password},
{
RaiseError => 1, RaiseError => 1,
PrintError => 0, PrintError => 0,
AutoCommit => 1, AutoCommit => 1,
...@@ -143,20 +145,23 @@ if ( $opt{checkpoint} ) { ...@@ -143,20 +145,23 @@ if ( $opt{checkpoint} ) {
} }
# --- get variables from database --- # --- get variables from database ---
my $sth_vars = $dbh->prepare("show variables"); my $sth_vars = $dbh->prepare("show variables like 'datadir'");
$sth_vars->execute; $sth_vars->execute;
while ( my ($var,$value) = $sth_vars->fetchrow_array ) { while ( my ($var,$value) = $sth_vars->fetchrow_array ) {
$mysqld_vars{ $var } = $value; $mysqld_vars{ $var } = $value;
} }
my $datadir = $mysqld_vars{datadir} my $datadir = $mysqld_vars{'datadir'}
|| die "datadir not in mysqld variables"; || die "datadir not in mysqld variables";
$datadir =~ s:/$::; $datadir =~ s:/$::;
# --- get target path --- # --- get target path ---
my $tgt_dirname; my ($tgt_dirname, $to_other_database);
if ($tgt_name =~ m:^\w+$:) { $to_other_database=0;
if ($tgt_name =~ m:^\w+$: && @db_desc <= 1)
{
$tgt_dirname = "$datadir/$tgt_name"; $tgt_dirname = "$datadir/$tgt_name";
$to_other_database=1;
} }
elsif ($tgt_name =~ m:/: || $tgt_name eq '.') { elsif ($tgt_name =~ m:/: || $tgt_name eq '.') {
$tgt_dirname = $tgt_name; $tgt_dirname = $tgt_name;
...@@ -209,6 +214,7 @@ foreach my $rdb ( @db_desc ) { ...@@ -209,6 +214,7 @@ foreach my $rdb ( @db_desc ) {
$hc_locks .= ", " if ( length $hc_locks && @hc_tables ); $hc_locks .= ", " if ( length $hc_locks && @hc_tables );
$hc_locks .= join ", ", map { "$_ READ" } @hc_tables; $hc_locks .= join ", ", map { "$_ READ" } @hc_tables;
$hc_tables .= ", " if ( length $hc_tables && @hc_tables );
$hc_tables .= join ", ", @hc_tables; $hc_tables .= join ", ", @hc_tables;
$num_tables += scalar @hc_tables; $num_tables += scalar @hc_tables;
...@@ -223,19 +229,30 @@ if (length $tgt_name ) { ...@@ -223,19 +229,30 @@ if (length $tgt_name ) {
# explicit destination directory specified # explicit destination directory specified
# GNU `cp -r` error message # GNU `cp -r` error message
die "copying multiple databases, but last argument ($tgt_name) is not a directory\n" die "copying multiple databases, but last argument ($tgt_dirname) is not a directory\n"
if ( @db_desc > 1 && !(-e $tgt_name && -d $tgt_name ) ); if ( @db_desc > 1 && !(-e $tgt_dirname && -d $tgt_dirname ) );
foreach my $rdb ( @db_desc ) { if ($to_other_database)
$rdb->{target} = "$tgt_name/$rdb->{src}"; {
foreach my $rdb ( @db_desc ) {
$rdb->{target} = "$tgt_dirname";
}
} }
} else
else { {
die "Error: expected \$opt{suffix} to exist" unless ( exists $opt{suffix} ); die "Last argument ($tgt_dirname) is not a directory\n"
if (!(-e $tgt_dirname && -d $tgt_dirname ) );
foreach my $rdb ( @db_desc ) { foreach my $rdb ( @db_desc ) {
$rdb->{target} = "$datadir/$rdb->{src}$opt{suffix}"; $rdb->{target} = "$tgt_dirname/$rdb->{src}";
}
} }
}
else {
die "Error: expected \$opt{suffix} to exist" unless ( exists $opt{suffix} );
foreach my $rdb ( @db_desc ) {
$rdb->{target} = "$datadir/$rdb->{src}$opt{suffix}";
}
} }
print Dumper( \@db_desc ) if ( $opt{debug} ); print Dumper( \@db_desc ) if ( $opt{debug} );
...@@ -571,6 +588,9 @@ where ":" delimits the subsets, the /^foo_/ indicates all tables ...@@ -571,6 +588,9 @@ where ":" delimits the subsets, the /^foo_/ indicates all tables
with names begining with "foo_" and the "+" indicates all tables with names begining with "foo_" and the "+" indicates all tables
not copied by the previous subsets. not copied by the previous subsets.
newdb is either another not existing database or a full path to a directory
where we can create a directory 'db'
Add option to lock each table in turn for people who don't need Add option to lock each table in turn for people who don't need
cross-table integrity. cross-table integrity.
......
...@@ -194,5 +194,4 @@ ...@@ -194,5 +194,4 @@
"Fick nätverksfel vid skrivning till master", "Fick nätverksfel vid skrivning till master",
"Hittar inte ett FULLTEXT index i kolumnlistan", "Hittar inte ett FULLTEXT index i kolumnlistan",
"Kan inte exekvera kommandot emedan du har en låst tabell eller an aktiv transaktion", "Kan inte exekvera kommandot emedan du har en låst tabell eller an aktiv transaktion",
#ER_UNKNOWN_SYSTEM_VARIABLE
"Okänd system variabel '%-.64'", "Okänd system variabel '%-.64'",
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment