Commit 016fe413 authored by unknown's avatar unknown

Merge mysql.com:/home/jimw/my/mysql-4.1-clean

into  mysql.com:/home/jimw/my/mysql-5.0-clean


client/mysql.cc:
  Auto merged
configure.in:
  Auto merged
mysql-test/t/mix_innodb_myisam_binlog.test:
  Auto merged
mysql-test/r/mix_innodb_myisam_binlog.result:
  Resolve conflict
sql/item_func.cc:
  Resolve conflict
sql/sql_show.cc:
  Resolve conflicts
parents 57ad6b20 421dadf7
...@@ -1872,9 +1872,13 @@ com_help(String *buffer __attribute__((unused)), ...@@ -1872,9 +1872,13 @@ com_help(String *buffer __attribute__((unused)),
if (help_arg) if (help_arg)
return com_server_help(buffer,line,help_arg+1); return com_server_help(buffer,line,help_arg+1);
put_info("\nFor the complete MySQL Manual online, visit:\n http://www.mysql.com/documentation\n", INFO_INFO); put_info("\nFor information about MySQL products and services, visit:\n"
put_info("For info on technical support from MySQL developers, visit:\n http://www.mysql.com/support\n", INFO_INFO); " http://www.mysql.com/\n"
put_info("For info on MySQL books, utilities, consultants, etc., visit:\n http://www.mysql.com/portal\n", INFO_INFO); "For developer information, including the MySQL Reference Manual, "
"visit:\n"
" http://dev.mysql.com/\n"
"To buy MySQL Network Support, training, or other products, visit:\n"
" https://shop.mysql.com/\n", INFO_INFO);
put_info("List of all MySQL commands:", INFO_INFO); put_info("List of all MySQL commands:", INFO_INFO);
if (!named_cmds) if (!named_cmds)
put_info("Note that all text commands must be first on line and end with ';'",INFO_INFO); put_info("Note that all text commands must be first on line and end with ';'",INFO_INFO);
......
...@@ -1587,6 +1587,19 @@ if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null; then ...@@ -1587,6 +1587,19 @@ if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null; then
OPTIMIZE_CXXFLAGS="-O3 -DNDEBUG" OPTIMIZE_CXXFLAGS="-O3 -DNDEBUG"
fi fi
# If the user specified CFLAGS, we won't add any optimizations
if test -n "$SAVE_CFLAGS"
then
OPTIMIZE_CFLAGS=""
DEBUG_OPTIMIZE_CC=""
fi
# Ditto for CXXFLAGS
if test -n "$SAVE_CXXFLAGS"
then
OPTIMIZE_CXXFLAGS=""
DEBUG_OPTIMIZE_CXX=""
fi
AC_ARG_WITH(debug, AC_ARG_WITH(debug,
[ --without-debug Build a production version without debugging code], [ --without-debug Build a production version without debugging code],
[with_debug=$withval], [with_debug=$withval],
......
...@@ -87,12 +87,13 @@ insert into t2 select * from t1; ...@@ -87,12 +87,13 @@ insert into t2 select * from t1;
select get_lock("a",10); select get_lock("a",10);
get_lock("a",10) get_lock("a",10)
1 1
show binlog events from 98; show binlog events from 79;
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 98 Query 1 # use `test`; BEGIN master-bin.000001 79 Query 1 79 use `test`; BEGIN
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(8) master-bin.000001 119 Query 1 79 use `test`; insert into t1 values(8)
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1 master-bin.000001 178 Query 1 79 use `test`; insert into t2 select * from t1
master-bin.000001 347 Query 1 # use `test`; ROLLBACK master-bin.000001 244 Query 1 244 use `test`; ROLLBACK
master-bin.000001 287 Query 1 287 use `test`; DO RELEASE_LOCK("a")
delete from t1; delete from t1;
delete from t2; delete from t2;
reset master; reset master;
...@@ -205,3 +206,53 @@ select (@after-@before) >= 2; ...@@ -205,3 +206,53 @@ select (@after-@before) >= 2;
(@after-@before) >= 2 (@after-@before) >= 2
1 1
drop table t1,t2; drop table t1,t2;
commit;
begin;
create temporary table ti (a int) engine=innodb;
rollback;
Warnings:
Warning 1196 Some non-transactional changed tables couldn't be rolled back
insert into ti values(1);
set autocommit=0;
create temporary table t1 (a int) engine=myisam;
commit;
insert t1 values (1);
rollback;
create table t0 (n int);
insert t0 select * from t1;
set autocommit=1;
insert into t0 select GET_LOCK("lock1",null);
set autocommit=0;
create table t2 (n int) engine=innodb;
insert into t2 values (3);
select get_lock("lock1",60);
get_lock("lock1",60)
1
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 79 Query 1 79 use `test`; BEGIN
master-bin.000001 119 Query 1 79 use `test`; insert into t1 values(16)
master-bin.000001 179 Query 1 79 use `test`; insert into t1 values(18)
master-bin.000001 239 Query 1 239 use `test`; COMMIT
master-bin.000001 280 Query 1 280 use `test`; delete from t1
master-bin.000001 329 Query 1 329 use `test`; delete from t2
master-bin.000001 378 Query 1 378 use `test`; alter table t2 type=MyISAM
master-bin.000001 439 Query 1 439 use `test`; insert into t1 values (1)
master-bin.000001 499 Query 1 499 use `test`; insert into t2 values (20)
master-bin.000001 560 Query 1 560 use `test`; drop table t1,t2
master-bin.000001 611 Query 1 611 use `test`; BEGIN
master-bin.000001 651 Query 1 611 use `test`; create temporary table ti (a int) engine=innodb
master-bin.000001 733 Query 1 733 use `test`; ROLLBACK
master-bin.000001 776 Query 1 776 use `test`; insert into ti values(1)
master-bin.000001 835 Query 1 835 use `test`; BEGIN
master-bin.000001 875 Query 1 835 use `test`; create temporary table t1 (a int) engine=myisam
master-bin.000001 957 Query 1 957 use `test`; COMMIT
master-bin.000001 998 Query 1 998 use `test`; create table t0 (n int)
master-bin.000001 1056 Query 1 1056 use `test`; insert t0 select * from t1
master-bin.000001 1117 Query 1 1117 use `test`; DO RELEASE_LOCK("a")
master-bin.000001 1172 Query 1 1172 use `test`; insert into t0 select GET_LOCK("lock1",null)
master-bin.000001 1251 Query 1 1251 use `test`; create table t2 (n int) engine=innodb
master-bin.000001 1323 Query 1 1323 use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
master-bin.000001 1424 Query 1 1424 use `test`; DO RELEASE_LOCK("lock1")
do release_lock("lock1");
drop table t0,t2;
...@@ -227,7 +227,35 @@ select (@after:=unix_timestamp())*0; # always give repeatable output ...@@ -227,7 +227,35 @@ select (@after:=unix_timestamp())*0; # always give repeatable output
# the bug, the reap would return immediately after the insert into t2. # the bug, the reap would return immediately after the insert into t2.
select (@after-@before) >= 2; select (@after-@before) >= 2;
# cleanup
drop table t1,t2; drop table t1,t2;
commit;
# test for BUG#7947 - DO RELEASE_LOCK() not written to binlog on rollback in the middle
# of a transaction
connection con2;
begin;
create temporary table ti (a int) engine=innodb;
rollback;
insert into ti values(1);
set autocommit=0;
create temporary table t1 (a int) engine=myisam;
commit;
insert t1 values (1);
rollback;
create table t0 (n int);
insert t0 select * from t1;
set autocommit=1;
insert into t0 select GET_LOCK("lock1",null);
set autocommit=0;
create table t2 (n int) engine=innodb;
insert into t2 values (3);
disconnect con2;
connection con3;
select get_lock("lock1",60);
show binlog events from 79;
do release_lock("lock1");
drop table t0,t2;
# End of 4.1 tests # End of 4.1 tests
...@@ -26,24 +26,33 @@ use HTML::Template; ...@@ -26,24 +26,33 @@ use HTML::Template;
# BUGS # BUGS
# ---- # ----
# - enum/set is 0 byte storage! Woah - efficient! # - enum/set is 0 byte storage! Woah - efficient!
# - DECIMAL is 0 byte storage. A bit too efficient.
# - some float stores come out weird (when there's a comma e.g. 'float(4,1)') # - some float stores come out weird (when there's a comma e.g. 'float(4,1)')
# - no disk data values # - no disk data values
# - computes the storage requirements of views (and probably MERGE) # - computes the storage requirements of views (and probably MERGE)
# - ignores character sets. # - ignores character sets.
my $template = HTML::Template->new(filename => 'ndb_size.tmpl', my $template = HTML::Template->new(filename => 'ndb_size.tmpl',
die_on_bad_params => 0); die_on_bad_params => 0)
or die "Could not open ndb_size.tmpl.";
my $dbh; my $dbh;
if(@ARGV < 3 || $ARGV[0] eq '--usage' || $ARGV[0] eq '--help')
{
print STDERR "Usage:\n";
print STDERR "\tndb_size.pl database hostname user password\n\n";
print STDERR "If you need to specify a port number, use host:port\n\n";
exit(1);
}
{ {
my $database= $ARGV[0]; my $database= $ARGV[0];
my $hostname= $ARGV[1]; my $hostname= $ARGV[1];
my $port= $ARGV[2]; my $user= $ARGV[2];
my $user= $ARGV[3]; my $password= $ARGV[3];
my $password= $ARGV[4]; my $dsn = "DBI:mysql:database=$database;host=$hostname";
my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port"; $dbh= DBI->connect($dsn, $user, $password) or exit(1);
$dbh= DBI->connect($dsn, $user, $password);
$template->param(db => $database); $template->param(db => $database);
$template->param(dsn => $dsn); $template->param(dsn => $dsn);
} }
...@@ -55,6 +64,14 @@ my $tables = $dbh->selectall_arrayref("show tables"); ...@@ -55,6 +64,14 @@ my $tables = $dbh->selectall_arrayref("show tables");
my @table_size; my @table_size;
my @dbDataMemory;
my @dbIndexMemory;
my @NoOfAttributes;
my @NoOfIndexes;
my @NoOfTables;
$NoOfTables[$_]{val} = @{$tables} foreach 0..$#releases;
sub align { sub align {
my($to,@unaligned) = @_; my($to,@unaligned) = @_;
my @aligned; my @aligned;
...@@ -68,9 +85,8 @@ foreach(@{$tables}) ...@@ -68,9 +85,8 @@ foreach(@{$tables})
{ {
my $table= @{$_}[0]; my $table= @{$_}[0];
my @columns; my @columns;
my $info= $dbh->selectall_hashref("describe ".$dbh->quote($table),"Field"); my $info= $dbh->selectall_hashref('describe `'.$table.'`',"Field");
my @count = $dbh->selectrow_array("select count(*) from " my @count = $dbh->selectrow_array('select count(*) from `'.$table.'`');
.$dbh->quote($table));
my %columnsize; # used for index calculations my %columnsize; # used for index calculations
# We now work out the DataMemory usage # We now work out the DataMemory usage
...@@ -132,14 +148,17 @@ foreach(@{$tables}) ...@@ -132,14 +148,17 @@ foreach(@{$tables})
my $fixed= 1+$size; my $fixed= 1+$size;
my @dynamic=$dbh->selectrow_array("select avg(length(" my @dynamic=$dbh->selectrow_array("select avg(length("
.$dbh->quote($name) .$dbh->quote($name)
.")) from ".$dbh->quote($table)); .")) from `".$table.'`');
$dynamic[0]=0 if !$dynamic[0]; $dynamic[0]=0 if !$dynamic[0];
@realsize= ($fixed,$fixed,ceil($dynamic[0])); @realsize= ($fixed,$fixed,ceil($dynamic[0]));
} }
elsif($type =~ /binary/ || $type =~ /char/) elsif($type =~ /binary/ || $type =~ /char/)
{@realsize=($size,$size,$size)} {@realsize=($size,$size,$size)}
elsif($type =~ /text/ || $type =~ /blob/) elsif($type =~ /text/ || $type =~ /blob/)
{@realsize=(256,256,1)} # FIXME check if 5.1 is correct {
@realsize=(256,256,1);
$NoOfTables[$_]{val} += 1 foreach 0..$#releases; # blob uses table
} # FIXME check if 5.1 is correct
@realsize= align(4,@realsize); @realsize= align(4,@realsize);
...@@ -166,7 +185,7 @@ foreach(@{$tables}) ...@@ -166,7 +185,7 @@ foreach(@{$tables})
# we can still connect to pre-5.0 mysqlds. # we can still connect to pre-5.0 mysqlds.
my %indexes; my %indexes;
{ {
my $sth= $dbh->prepare("show index from "$dbh->quote($table)); my $sth= $dbh->prepare("show index from `".$table.'`');
$sth->execute; $sth->execute;
while(my $i = $sth->fetchrow_hashref) while(my $i = $sth->fetchrow_hashref)
{ {
...@@ -257,7 +276,51 @@ foreach(@{$tables}) ...@@ -257,7 +276,51 @@ foreach(@{$tables})
IndexMemory=>\@IndexMemory, IndexMemory=>\@IndexMemory,
}; };
$dbDataMemory[$_]{val} += $DataMemory[$_]{val} foreach 0..$#releases;
$dbIndexMemory[$_]{val} += $IndexMemory[$_]{val} foreach 0..$#releases;
$NoOfAttributes[$_]{val} += @columns foreach 0..$#releases;
$NoOfIndexes[$_]{val} += @indexes foreach 0..$#releases;
}
my @NoOfTriggers;
# for unique hash indexes
$NoOfTriggers[$_]{val} += $NoOfIndexes[$_]{val}*3 foreach 0..$#releases;
# for ordered index
$NoOfTriggers[$_]{val} += $NoOfIndexes[$_]{val} foreach 0..$#releases;
my @ParamMemory;
foreach (0..$#releases) {
$ParamMemory[0]{releases}[$_]{val}= POSIX::ceil(200*$NoOfAttributes[$_]{val}/1024);
$ParamMemory[0]{name}= 'Attributes';
$ParamMemory[1]{releases}[$_]{val}= 20*$NoOfTables[$_]{val};
$ParamMemory[1]{name}= 'Tables';
$ParamMemory[2]{releases}[$_]{val}= 10*$NoOfIndexes[$_]{val};
$ParamMemory[2]{name}= 'OrderedIndexes';
$ParamMemory[3]{releases}[$_]{val}= 15*$NoOfIndexes[$_]{val};
$ParamMemory[3]{name}= 'UniqueHashIndexes';
} }
$template->param(tables => \@table_size); $template->param(tables => \@table_size);
$template->param(Parameters => [{name=>'DataMemory (kb)',
releases=>\@dbDataMemory},
{name=>'IndexMemory (kb)',
releases=>\@dbIndexMemory},
{name=>'MaxNoOfTables',
releases=>\@NoOfTables},
{name=>'MaxNoOfAttributes',
releases=>\@NoOfAttributes},
{name=>'MaxNoOfOrderedIndexes',
releases=>\@NoOfIndexes},
{name=>'MaxNoOfUniqueHashIndexes',
releases=>\@NoOfIndexes},
{name=>'MaxNoOfTriggers',
releases=>\@NoOfTriggers}
]
);
$template->param(ParamMemory => \@ParamMemory);
print $template->output; print $template->output;
...@@ -13,18 +13,58 @@ td,th { border: 1px solid black } ...@@ -13,18 +13,58 @@ td,th { border: 1px solid black }
<h1>MySQL Cluster analysis for <TMPL_VAR NAME="db" escape="html"></h1> <h1>MySQL Cluster analysis for <TMPL_VAR NAME="db" escape="html"></h1>
<p>This is an automated analysis of the <TMPL_VAR NAME="DSN" escape="html"> database for migration into <a href="http://www.mysql.com/">MySQL</a> Cluster. No warranty is made to the accuracy of the information.</p> <p>This is an automated analysis of the <TMPL_VAR NAME="DSN" escape="html"> database for migration into <a href="http://www.mysql.com/">MySQL</a> Cluster. No warranty is made to the accuracy of the information.</p>
<p>This information should be valid for MySQL 4.1</p> <p>This information should be valid for MySQL 4.1 and 5.0. Since 5.1 is not a final release yet, the numbers should be used as a guide only.</p>
<h2>Parameter Settings</h2>
<p><b>NOTE</b> the configuration parameters below do not take into account system tables and other requirements.</p>
<table>
<tr>
<th>Parameter</th>
<TMPL_LOOP NAME=releases>
<th><TMPL_VAR NAME=rel></th>
</TMPL_LOOP>
</tr>
<TMPL_LOOP NAME=Parameters>
<tr>
<td><TMPL_VAR NAME=name></td>
<TMPL_LOOP NAME=releases>
<td><TMPL_VAR NAME=val></td>
</TMPL_LOOP>
</tr>
</TMPL_LOOP>
</table>
<h2>Memory usage because of parameters</h2>
<p>Usage is in kilobytes. Actual usage will vary as you should set the parameters larger than those listed in the table above.</p>
<table>
<tr>
<th>Parameter</th>
<TMPL_LOOP NAME=releases>
<th><TMPL_VAR NAME=rel></th>
</TMPL_LOOP>
</tr>
<TMPL_LOOP NAME=ParamMemory>
<tr>
<td><TMPL_VAR NAME=name></td>
<TMPL_LOOP NAME=releases>
<td><TMPL_VAR NAME=val></td>
</TMPL_LOOP>
</tr>
</TMPL_LOOP>
</table>
<h2>Table List</h2>
<ul> <ul>
<TMPL_LOOP NAME="tables"> <TMPL_LOOP NAME="tables">
<li><TMPL_VAR NAME="table"></li> <li><a href="#<TMPL_VAR NAME="table">"><TMPL_VAR NAME="table"></a></li>
</TMPL_LOOP> </TMPL_LOOP>
</ul> </ul>
<hr/> <hr/>
<TMPL_LOOP NAME="tables"> <TMPL_LOOP NAME="tables">
<h2><TMPL_VAR NAME="table"></h2> <h2><a name="<TMPL_VAR NAME="table">"><TMPL_VAR NAME="table"></a></h2>
<table> <table>
<tr> <tr>
<th>Column</th> <th>Column</th>
......
...@@ -1426,7 +1426,7 @@ static bool show_status_array(THD *thd, const char *wild, ...@@ -1426,7 +1426,7 @@ static bool show_status_array(THD *thd, const char *wild,
case SHOW_SLAVE_RUNNING: case SHOW_SLAVE_RUNNING:
{ {
pthread_mutex_lock(&LOCK_active_mi); pthread_mutex_lock(&LOCK_active_mi);
end= strmov(buff, (active_mi->slave_running && end= strmov(buff, (active_mi && active_mi->slave_running &&
active_mi->rli.slave_running) ? "ON" : "OFF"); active_mi->rli.slave_running) ? "ON" : "OFF");
pthread_mutex_unlock(&LOCK_active_mi); pthread_mutex_unlock(&LOCK_active_mi);
break; break;
...@@ -1438,9 +1438,12 @@ static bool show_status_array(THD *thd, const char *wild, ...@@ -1438,9 +1438,12 @@ static bool show_status_array(THD *thd, const char *wild,
SHOW SLAVE STATUS, and have the sum over all lines here. SHOW SLAVE STATUS, and have the sum over all lines here.
*/ */
pthread_mutex_lock(&LOCK_active_mi); pthread_mutex_lock(&LOCK_active_mi);
if (active_mi)
{
pthread_mutex_lock(&active_mi->rli.data_lock); pthread_mutex_lock(&active_mi->rli.data_lock);
end= int10_to_str(active_mi->rli.retried_trans, buff, 10); end= int10_to_str(active_mi->rli.retried_trans, buff, 10);
pthread_mutex_unlock(&active_mi->rli.data_lock); pthread_mutex_unlock(&active_mi->rli.data_lock);
}
pthread_mutex_unlock(&LOCK_active_mi); pthread_mutex_unlock(&LOCK_active_mi);
break; break;
} }
......
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