~drizzle-trunk/drizzle/development

0.67.375 by Bernt M. Johnsen
Fixed some copyright headers
1
# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved. 
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
2
# Use is subject to license terms.
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; version 2 of the License.
7
#
8
# This program is distributed in the hope that it will be useful, but
9
# WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
# General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
16
# USA
17
0.67.404 by Bernt M. Johnsen
Moved server handling to lib/DBServer
18
package DBServer::MySQL::MySQLd;
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
19
0.67.404 by Bernt M. Johnsen
Moved server handling to lib/DBServer
20
@ISA = qw(DBServer::DBServer);
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
21
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
22
use DBI;
0.67.404 by Bernt M. Johnsen
Moved server handling to lib/DBServer
23
use DBServer::DBServer;
0.67.381 by Bernt M. Johnsen
Adjustments after merge
24
use if osWindows(), Win32::Process;
0.67.329 by Bernt M. Johnsen
More server stuff
25
use Time::HiRes;
0.67.310 by Bernt Johnsen
First windows adaptions for Server
26
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
27
use strict;
28
29
use Carp;
30
use Data::Dumper;
0.107.6 by John H. Embretsen
MySQLd.pm: Revert to File::Path's mkpath instead of the newer make_path. Older Perl (e.g. v5.8.8) does not have make_path.
31
use File::Path qw(mkpath);
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
32
33
use constant MYSQLD_BASEDIR => 0;
0.67.329 by Bernt M. Johnsen
More server stuff
34
use constant MYSQLD_VARDIR => 1;
35
use constant MYSQLD_DATADIR => 2;
36
use constant MYSQLD_PORT => 3;
37
use constant MYSQLD_MYSQLD => 4;
38
use constant MYSQLD_LIBMYSQL => 5;
39
use constant MYSQLD_BOOT_SQL => 6;
40
use constant MYSQLD_STDOPTS => 7;
41
use constant MYSQLD_MESSAGES => 8;
0.67.429 by Bernt M. Johnsen
Added --character-set-dir
42
use constant MYSQLD_CHARSETS => 9;
43
use constant MYSQLD_SERVER_OPTIONS => 10;
44
use constant MYSQLD_AUXPID => 11;
45
use constant MYSQLD_SERVERPID => 12;
46
use constant MYSQLD_WINDOWS_PROCESS => 13;
47
use constant MYSQLD_DBH => 14;
48
use constant MYSQLD_START_DIRTY => 15;
49
use constant MYSQLD_VALGRIND => 16;
50
use constant MYSQLD_VALGRIND_OPTIONS => 17;
51
use constant MYSQLD_VERSION => 18;
0.104.2 by Bernt M. Johnsen
Moved call to mysqldump into DBServer/MySQLd
52
use constant MYSQLD_DUMPER => 19;
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
53
54
use constant MYSQLD_PID_FILE => "mysql.pid";
0.67.314 by Bernt Johnsen
Server: Windows process start
55
use constant MYSQLD_LOG_FILE => "mysql.err";
0.67.329 by Bernt M. Johnsen
More server stuff
56
use constant MYSQLD_DEFAULT_PORT =>  19300;
0.67.319 by Bernt M. Johnsen
Server dsn and test of dsn/Executor
57
use constant MYSQLD_DEFAULT_DATABASE => "test";
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
58
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
59
60
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
61
sub new {
62
    my $class = shift;
0.67.339 by Bernt M. Johnsen
Added replicating server (actually a master/slave pair) + unit test
63
    
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
64
    my $self = $class->SUPER::new({'basedir' => MYSQLD_BASEDIR,
0.67.329 by Bernt M. Johnsen
More server stuff
65
                                   'vardir' => MYSQLD_VARDIR,
66
                                   'port' => MYSQLD_PORT,
0.67.337 by Bernt M. Johnsen
Add start dirty to Server::MySQLd.pm
67
                                   'server_options' => MYSQLD_SERVER_OPTIONS,
0.99.14 by Bernt M. Johnsen
valgrind support added to server
68
                                   'start_dirty' => MYSQLD_START_DIRTY,
69
                                   'valgrind' => MYSQLD_VALGRIND,
70
                                   'valgrind_options' => MYSQLD_VALGRIND_OPTIONS},@_);
0.67.339 by Bernt M. Johnsen
Added replicating server (actually a master/slave pair) + unit test
71
    
0.67.381 by Bernt M. Johnsen
Adjustments after merge
72
    croak "No valgrind support on windows" if osWindows() and $self->[MYSQLD_VALGRIND];
0.67.339 by Bernt M. Johnsen
Added replicating server (actually a master/slave pair) + unit test
73
    
0.67.329 by Bernt M. Johnsen
More server stuff
74
    if (not defined $self->[MYSQLD_VARDIR]) {
75
        $self->[MYSQLD_VARDIR] = "mysql-test/var";
76
    }
0.67.339 by Bernt M. Johnsen
Added replicating server (actually a master/slave pair) + unit test
77
    
0.67.381 by Bernt M. Johnsen
Adjustments after merge
78
    if (osWindows()) {
0.67.329 by Bernt M. Johnsen
More server stuff
79
        ## Use unix-style path's since that's what Perl expects...
80
        $self->[MYSQLD_BASEDIR] =~ s/\\/\//g;
81
        $self->[MYSQLD_VARDIR] =~ s/\\/\//g;
82
        $self->[MYSQLD_DATADIR] =~ s/\\/\//g;
0.67.310 by Bernt Johnsen
First windows adaptions for Server
83
    }
84
    
0.67.335 by Bernt Johnsen
Windows adaptions
85
    if (not $self->_absPath($self->vardir)) {
0.67.336 by Bernt M. Johnsen
more mysql.sock problems
86
        $self->[MYSQLD_VARDIR] = $self->basedir."/".$self->vardir;
0.67.335 by Bernt Johnsen
Windows adaptions
87
    }
0.67.336 by Bernt M. Johnsen
more mysql.sock problems
88
    
0.67.335 by Bernt Johnsen
Windows adaptions
89
    $self->[MYSQLD_DATADIR] = $self->[MYSQLD_VARDIR]."/data";
90
    
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
91
    $self->[MYSQLD_MYSQLD] = $self->_find([$self->basedir],
0.108.1 by John H. Embretsen
DBServer: Correct directory name for RelWithDebInfo builds on Windows. Was RelWithDebugInfo, should be RelWithDebInfo. Thanks to wlad for pointing this out.
92
                                          osWindows()?["sql/Debug","sql/RelWithDebInfo","sql/Release","bin"]:["sql","libexec","bin","sbin"],
0.67.381 by Bernt M. Johnsen
Adjustments after merge
93
                                          osWindows()?"mysqld.exe":"mysqld");
0.67.313 by Bernt M. Johnsen
Server: server options, better testing, some improvements
94
    $self->[MYSQLD_BOOT_SQL] = [];
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
95
0.104.2 by Bernt M. Johnsen
Moved call to mysqldump into DBServer/MySQLd
96
    $self->[MYSQLD_DUMPER] = $self->_find([$self->basedir],
0.108.1 by John H. Embretsen
DBServer: Correct directory name for RelWithDebInfo builds on Windows. Was RelWithDebugInfo, should be RelWithDebInfo. Thanks to wlad for pointing this out.
97
                                          osWindows()?["client/Debug","client/RelWithDebInfo","client/Release","bin"]:["client","bin"],
0.104.2 by Bernt M. Johnsen
Moved call to mysqldump into DBServer/MySQLd
98
                                          osWindows()?"mysqldump.exe":"mysqldump");
99
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
100
101
    ## Check for CMakestuff to get hold of source dir:
102
103
    my $source;
0.99.7 by Bernt M. Johnsen
More Cmake out-of-source stuff
104
    if (-e $self->basedir."/CMakeCache.txt") {
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
105
        open CACHE, $self->basedir."/CMakeCache.txt";
106
        while (<CACHE>){
107
            if (m/^MySQL_SOURCE_DIR:STATIC=(.*)$/) {
108
                $source = $1;
0.99.7 by Bernt M. Johnsen
More Cmake out-of-source stuff
109
                say("Found source directory at $source");
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
110
                last;
111
            }
112
        }
113
    }
114
    
0.67.313 by Bernt M. Johnsen
Server: server options, better testing, some improvements
115
    foreach my $file ("mysql_system_tables.sql", 
0.67.329 by Bernt M. Johnsen
More server stuff
116
                      "mysql_system_tables_data.sql", 
117
                      "mysql_test_data_timezone.sql",
118
                      "fill_help_tables.sql") {
0.67.336 by Bernt M. Johnsen
more mysql.sock problems
119
        push(@{$self->[MYSQLD_BOOT_SQL]}, 
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
120
             $self->_find(defined $source?[$self->basedir,$source]:[$self->basedir],
0.67.449 by Bernt M. Johnsen
Look for file more places for installed mysql
121
                          ["scripts","share/mysql","share"], $file));
0.67.313 by Bernt M. Johnsen
Server: server options, better testing, some improvements
122
    }
123
    
0.99.7 by Bernt M. Johnsen
More Cmake out-of-source stuff
124
    $self->[MYSQLD_MESSAGES] = 
125
       $self->_findDir(defined $source?[$self->basedir,$source]:[$self->basedir], 
0.67.449 by Bernt M. Johnsen
Look for file more places for installed mysql
126
                       ["sql/share","share/mysql","share"], "english/errmsg.sys");
0.67.429 by Bernt M. Johnsen
Added --character-set-dir
127
128
    $self->[MYSQLD_CHARSETS] =
129
        $self->_findDir(defined $source?[$self->basedir,$source]:[$self->basedir], 
0.67.449 by Bernt M. Johnsen
Look for file more places for installed mysql
130
                        ["sql/share/charsets","share/mysql/charsets","share/charsets"], "Index.xml");
0.67.429 by Bernt M. Johnsen
Added --character-set-dir
131
                         
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
132
    
0.99.7 by Bernt M. Johnsen
More Cmake out-of-source stuff
133
    $self->[MYSQLD_LIBMYSQL] = 
134
       $self->_findDir([$self->basedir], 
0.108.1 by John H. Embretsen
DBServer: Correct directory name for RelWithDebInfo builds on Windows. Was RelWithDebugInfo, should be RelWithDebInfo. Thanks to wlad for pointing this out.
135
                       osWindows()?["libmysql/Debug","libmysql/RelWithDebInfo","libmysql/Release","lib","lib/debug","lib/opt","bin"]:["libmysql","libmysql/.libs","lib/mysql","lib"], 
0.108.2 by John H. Embretsen
DBServer: Add basic support for Mac OS X by having utility functions to check for darwin, and looking for libmysqlclient.dylib instead of .so.
136
                       osWindows()?"libmysql.dll":osMac()?"libmysqlclient.dylib":"libmysqlclient.so");
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
137
    
0.67.332 by Bernt M. Johnsen
Handle spaces in files
138
    $self->[MYSQLD_STDOPTS] = ["--basedir=".$self->basedir,
139
                               "--datadir=".$self->datadir,
0.67.429 by Bernt M. Johnsen
Added --character-set-dir
140
                               $self->_messages,
141
                               "--character-sets-dir=".$self->[MYSQLD_CHARSETS],
0.67.332 by Bernt M. Johnsen
Handle spaces in files
142
                               "--default-storage-engine=myisam",
0.67.357 by Bernt M. Johnsen
Better version checking
143
                               "--log-warnings=0"];    
0.67.359 by Bernt M. Johnsen
Use GenTest module in runall-new.pl
144
0.67.337 by Bernt M. Johnsen
Add start dirty to Server::MySQLd.pm
145
    if ($self->[MYSQLD_START_DIRTY]) {
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
146
        say("Using existing data for MySQL " .$self->version ." at ".$self->datadir)
0.67.337 by Bernt M. Johnsen
Add start dirty to Server::MySQLd.pm
147
    } else {
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
148
        say("Creating MySQL " . $self->version . " database at ".$self->datadir);
0.67.337 by Bernt M. Johnsen
Add start dirty to Server::MySQLd.pm
149
        $self->createMysqlBase;
0.67.339 by Bernt M. Johnsen
Added replicating server (actually a master/slave pair) + unit test
150
    }
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
151
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
152
    return $self;
153
}
154
155
sub basedir {
156
    return $_[0]->[MYSQLD_BASEDIR];
157
}
158
159
sub datadir {
160
    return $_[0]->[MYSQLD_DATADIR];
161
}
162
0.67.329 by Bernt M. Johnsen
More server stuff
163
sub vardir {
164
    return $_[0]->[MYSQLD_VARDIR];
165
}
166
167
sub port {
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
168
    my ($self) = @_;
169
    
0.67.329 by Bernt M. Johnsen
More server stuff
170
    if (defined $self->[MYSQLD_PORT]) {
171
        return $self->[MYSQLD_PORT];
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
172
    } else {
0.67.329 by Bernt M. Johnsen
More server stuff
173
        return MYSQLD_DEFAULT_PORT;
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
174
    }
175
}
176
177
sub serverpid {
0.67.314 by Bernt Johnsen
Server: Windows process start
178
    return $_[0]->[MYSQLD_SERVERPID];
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
179
}
180
181
sub forkpid {
0.67.314 by Bernt Johnsen
Server: Windows process start
182
    return $_[0]->[MYSQLD_AUXPID];
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
183
}
184
185
sub socketfile {
0.67.342 by Bernt M. Johnsen
Enable runall-new test. Start replication properly and test that replication is working
186
    my ($self) = @_;
187
188
    return "/tmp/RQGmysql.".$self->port.".sock";
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
189
}
190
191
sub pidfile {
0.67.329 by Bernt M. Johnsen
More server stuff
192
    return $_[0]->vardir."/".MYSQLD_PID_FILE;
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
193
}
194
195
sub logfile {
0.67.329 by Bernt M. Johnsen
More server stuff
196
    return $_[0]->vardir."/".MYSQLD_LOG_FILE;
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
197
}
198
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
199
sub libmysqldir {
200
    return $_[0]->[MYSQLD_LIBMYSQL];
201
}
202
0.67.332 by Bernt M. Johnsen
Handle spaces in files
203
204
sub generateCommand {
205
    my ($self, @opts) = @_;
206
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
207
    my $command = '"'.$self->binary.'"';
0.67.332 by Bernt M. Johnsen
Handle spaces in files
208
    foreach my $opt (@opts) {
209
        $command .= ' '.join(' ',map{'"'.$_.'"'} @$opt);
210
    }
0.67.381 by Bernt M. Johnsen
Adjustments after merge
211
    $command =~ s/\//\\/g if osWindows();
0.67.332 by Bernt M. Johnsen
Handle spaces in files
212
    return $command;
213
}
214
0.67.383 by Bernt M. Johnsen
Possibility to create a replicating server pair from two pre-exisiting server objects
215
sub addServerOptions {
216
    my ($self,$opts) = @_;
217
218
    push(@{$self->[MYSQLD_SERVER_OPTIONS]}, @$opts);
219
}
220
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
221
sub createMysqlBase  {
222
    my ($self) = @_;
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
223
    
0.67.311 by Bernt Johnsen
Server db create on windows
224
    ## 1. Clean old db if any
0.67.329 by Bernt M. Johnsen
More server stuff
225
    if (-d $self->vardir) {
0.67.381 by Bernt M. Johnsen
Adjustments after merge
226
        if (osWindows()) {
0.67.329 by Bernt M. Johnsen
More server stuff
227
            my $vardir = $self->vardir;
228
            $vardir =~ s/\//\\/g;
0.67.332 by Bernt M. Johnsen
Handle spaces in files
229
            system('rmdir /s /q "'.$vardir.'"');
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
230
        } else {
0.67.332 by Bernt M. Johnsen
Handle spaces in files
231
            system('rm -rf "'.$self->vardir.'"');
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
232
        }
0.67.312 by Bernt Johnsen
Removed the dependncy to File::path since just one routine was needed
233
    }
0.67.335 by Bernt Johnsen
Windows adaptions
234
0.67.311 by Bernt Johnsen
Server db create on windows
235
    ## 2. Create database directory structure
0.107.6 by John H. Embretsen
MySQLd.pm: Revert to File::Path's mkpath instead of the newer make_path. Older Perl (e.g. v5.8.8) does not have make_path.
236
    mkpath($self->vardir);
237
    mkpath($self->datadir);
238
    mkpath($self->datadir."/mysql");
239
    mkpath($self->datadir."/test");
0.67.336 by Bernt M. Johnsen
more mysql.sock problems
240
    
0.67.311 by Bernt Johnsen
Server db create on windows
241
    ## 3. Create boot file
0.67.329 by Bernt M. Johnsen
More server stuff
242
    my $boot = $self->vardir."/boot.sql";
0.67.311 by Bernt Johnsen
Server db create on windows
243
    open BOOT,">$boot";
244
    
245
    ## Set curren database
246
    print BOOT  "use mysql;\n";
247
    foreach my $b (@{$self->[MYSQLD_BOOT_SQL]}) {
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
248
        open B,$b;
249
        while (<B>) { print BOOT $_;}
250
        close B;
0.67.311 by Bernt Johnsen
Server db create on windows
251
    }
252
    ## Don't want empty users
253
    print BOOT "DELETE FROM user WHERE `User` = '';\n";
254
    close BOOT;
255
    
256
    ## 4. Boot database
0.67.381 by Bernt M. Johnsen
Adjustments after merge
257
    if (osWindows()) {
0.67.359 by Bernt M. Johnsen
Use GenTest module in runall-new.pl
258
        my $command = $self->generateCommand(["--no-defaults","--bootstrap"],
259
                                             $self->[MYSQLD_STDOPTS]);
260
    
0.67.329 by Bernt M. Johnsen
More server stuff
261
        my $bootlog = $self->vardir."/boot.log";
0.67.332 by Bernt M. Johnsen
Handle spaces in files
262
        system("$command < \"$boot\" > \"$bootlog\"");
0.67.310 by Bernt Johnsen
First windows adaptions for Server
263
    } else {
0.67.359 by Bernt M. Johnsen
Use GenTest module in runall-new.pl
264
        my $command = $self->generateCommand(["--no-defaults","--bootstrap","--loose-skip-innodb"],
265
                                             $self->[MYSQLD_STDOPTS]);
0.67.329 by Bernt M. Johnsen
More server stuff
266
        my $bootlog = $self->vardir."/boot.log";
0.67.332 by Bernt M. Johnsen
Handle spaces in files
267
        system("cat \"$boot\" | $command > \"$bootlog\"  2>&1 ");
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
268
    }
269
}
270
0.67.314 by Bernt Johnsen
Server: Windows process start
271
sub _reportError {
0.67.335 by Bernt Johnsen
Windows adaptions
272
    say(Win32::FormatMessage(Win32::GetLastError()));
0.67.314 by Bernt Johnsen
Server: Windows process start
273
}
274
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
275
sub startServer {
276
    my ($self) = @_;
0.99.14 by Bernt M. Johnsen
valgrind support added to server
277
0.67.353 by Bernt M. Johnsen
5.1 and 5.0 adaptions
278
    my ($v1,$v2,@rest) = $self->versionNumbers;
279
    my $v = $v1*1000+$v2;
0.67.332 by Bernt M. Johnsen
Handle spaces in files
280
    my $command = $self->generateCommand(["--no-defaults"],
281
                                         $self->[MYSQLD_STDOPTS],
282
                                         ["--core-file",
0.67.333 by Bernt M. Johnsen
removed option
283
                                          #"--skip-ndbcluster",
0.99.30 by Bernt M. Johnsen
Added benchmarking and profiling
284
                                          #"--skip-grant",
0.67.332 by Bernt M. Johnsen
Handle spaces in files
285
                                          "--loose-new",
286
                                          "--relay-log=slave-relay-bin",
287
                                          "--loose-innodb",
288
                                          "--max-allowed-packet=16Mb",	# Allow loading bigger blobs
289
                                          "--loose-innodb-status-file=1",
290
                                          "--master-retry-count=65535",
291
                                          "--port=".$self->port,
0.67.336 by Bernt M. Johnsen
more mysql.sock problems
292
                                          "--socket=".$self->socketfile,
0.67.332 by Bernt M. Johnsen
Handle spaces in files
293
                                          "--pid-file=".$self->pidfile,
0.67.357 by Bernt M. Johnsen
Better version checking
294
                                          $self->_logOption]);
0.67.313 by Bernt M. Johnsen
Server: server options, better testing, some improvements
295
    if (defined $self->[MYSQLD_SERVER_OPTIONS]) {
0.67.339 by Bernt M. Johnsen
Added replicating server (actually a master/slave pair) + unit test
296
        $command = $command." ".join(' ',@{$self->[MYSQLD_SERVER_OPTIONS]});
0.67.313 by Bernt M. Johnsen
Server: server options, better testing, some improvements
297
    }
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
298
    
0.67.329 by Bernt M. Johnsen
More server stuff
299
    my $serverlog = $self->vardir."/".MYSQLD_LOG_FILE;
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
300
    
0.67.381 by Bernt M. Johnsen
Adjustments after merge
301
    if (osWindows) {
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
302
        my $proc;
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
303
        my $exe = $self->binary;
0.67.329 by Bernt M. Johnsen
More server stuff
304
        my $vardir = $self->[MYSQLD_VARDIR];
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
305
        $exe =~ s/\//\\/g;
0.67.329 by Bernt M. Johnsen
More server stuff
306
        $vardir =~ s/\//\\/g;
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
307
        say("Starting MySQL ".$self->version.": $exe as $command on $vardir");
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
308
        Win32::Process::Create($proc,
309
                               $exe,
310
                               $command,
311
                               0,
312
                               NORMAL_PRIORITY_CLASS(),
313
                               ".") || die _reportError();	
314
        $self->[MYSQLD_WINDOWS_PROCESS]=$proc;
315
        $self->[MYSQLD_SERVERPID]=$proc->GetProcessID();
316
    } else {
0.99.14 by Bernt M. Johnsen
valgrind support added to server
317
        if ($self->[MYSQLD_VALGRIND]) {
318
            my $val_opt ="";
319
            if (defined $self->[MYSQLD_VALGRIND_OPTIONS]) {
320
                $val_opt = join(' ',@{$self->[MYSQLD_VALGRIND_OPTIONS]});
321
            }
0.99.21 by Bernt M. Johnsen
Fix referneces to error_log, time-stamp on valgrind and some more
322
            $command = "valgrind --time-stamp=yes ".$val_opt." ".$command;
0.99.14 by Bernt M. Johnsen
valgrind support added to server
323
        }
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
324
        say("Starting MySQL ".$self->version.": $command");
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
325
        $self->[MYSQLD_AUXPID] = fork();
326
        if ($self->[MYSQLD_AUXPID]) {
0.67.332 by Bernt M. Johnsen
Handle spaces in files
327
            ## Wait for the pid file to have been created
0.67.329 by Bernt M. Johnsen
More server stuff
328
            my $waits = 0;
329
            while (!-f $self->pidfile && $waits < 100) {
330
                Time::HiRes::sleep(0.2);
331
                $waits++;
332
            }
0.99.14 by Bernt M. Johnsen
valgrind support added to server
333
            if (!-f $self->pidfile) {
334
                sayFile($self->logfile);
335
                croak("Could not start mysql server");
336
            }
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
337
            my $pidfile = $self->pidfile;
0.67.332 by Bernt M. Johnsen
Handle spaces in files
338
            my $pid = `cat \"$pidfile\"`;
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
339
            $pid =~ m/([0-9]+)/;
340
            $self->[MYSQLD_SERVERPID] = int($1);
341
        } else {
0.67.332 by Bernt M. Johnsen
Handle spaces in files
342
            exec("$command > \"$serverlog\"  2>&1") || croak("Could not start mysql server");
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
343
        }
344
    }
345
    
0.67.404 by Bernt M. Johnsen
Moved server handling to lib/DBServer
346
    return $self->dbh ? DBSTATUS_OK : DBSTATUS_FAILURE;
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
347
}
348
349
sub kill {
350
    my ($self) = @_;
0.67.332 by Bernt M. Johnsen
Handle spaces in files
351
    
0.67.381 by Bernt M. Johnsen
Adjustments after merge
352
    if (osWindows()) {
0.67.329 by Bernt M. Johnsen
More server stuff
353
        if (defined $self->[MYSQLD_WINDOWS_PROCESS]) {
354
            $self->[MYSQLD_WINDOWS_PROCESS]->Kill(0);
0.67.445 by Bernt M. Johnsen
Fixed typo in Windows mode
355
            say("Killed process ".$self->[MYSQLD_WINDOWS_PROCESS]->GetProcessID());
0.67.329 by Bernt M. Johnsen
More server stuff
356
        }
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
357
    } else {
0.67.329 by Bernt M. Johnsen
More server stuff
358
        if (defined $self->serverpid) {
359
            kill KILL => $self->serverpid;
360
            say("Killed process ".$self->serverpid);
361
        }
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
362
    }
0.67.448 by Bernt M. Johnsen
Delete socket file on server stop, look for boot-sql more places
363
    if (-e $self->socketfile) {
364
        unlink $self->socketfile;
365
    }
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
366
}
367
0.99.28 by Bernt M. Johnsen
Server crash function and unit test of Backtrace reporter
368
sub crash {
369
    my ($self) = @_;
370
    
0.67.381 by Bernt M. Johnsen
Adjustments after merge
371
    if (osWindows()) {
0.99.28 by Bernt M. Johnsen
Server crash function and unit test of Backtrace reporter
372
        ## How do i do this?????
373
        $self->kill; ## Temporary
374
    } else {
375
        if (defined $self->serverpid) {
376
            kill SEGV => $self->serverpid;
377
            say("Crashed process ".$self->serverpid);
378
        }
379
    }
0.67.450 by Bernt M. Johnsen
Delete sock file after call to server->crash
380
    if (-e $self->socketfile) {
381
        unlink $self->socketfile;
382
    }
0.99.28 by Bernt M. Johnsen
Server crash function and unit test of Backtrace reporter
383
}
384
385
sub corefile {
386
    my ($self) = @_;
387
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
388
    ## Unix variant
389
    return $self->datadir."/core.".$self->serverpid;
390
}
391
392
sub dumper {
393
    return $_[0]->[MYSQLD_DUMPER];
394
}
395
396
sub dumpdb {
397
    my ($self,$database, $file) = @_;
398
    say("Dumping MySQL server ".$self->version." on port ".$self->port);
0.107.3 by John H. Embretsen
Fix for bug#55689 (mysqldump fails with new server module against old MySQL due to --no-tablespaces).
399
    my $dump_command = '"'.$self->dumper.
400
                             "\" --hex-blob --skip-triggers --compact ".
401
                             "--order-by-primary --skip-extended-insert ".
402
                             "--no-create-info --host=127.0.0.1 ".
403
                             "--port=".$self->port;
404
    # --no-tablespaces option was introduced in version 5.1.14.
405
    if ($self->_newerThan(5,1,13)) {
406
        $dump_command = $dump_command . " --no-tablespaces";
407
    }
408
    my $dump_result = system("$dump_command | sort > $file");
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
409
    return $dump_result;
410
}
411
412
sub binary {
413
    return $_[0]->[MYSQLD_MYSQLD];
0.99.28 by Bernt M. Johnsen
Server crash function and unit test of Backtrace reporter
414
}
415
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
416
sub stopServer {
417
    my ($self) = @_;
0.67.332 by Bernt M. Johnsen
Handle spaces in files
418
    
0.67.329 by Bernt M. Johnsen
More server stuff
419
    if (defined $self->[MYSQLD_DBH]) {
420
        say("Stopping server on port ".$self->port);
0.67.382 by Bernt M. Johnsen
Fixed problem with stale dbh handlerwhich caused problem for replication
421
        my $r = $self->dbh->func('shutdown','127.0.0.1','root','admin');
0.67.338 by Bernt M. Johnsen
Do not return from stopServer util the server is properly stopped + test of start dirty
422
        my $waits = 0;
423
        if ($r) {
424
            while (-f $self->pidfile && $waits < 100) {
425
                Time::HiRes::sleep(0.2);
426
                $waits++;
427
            }
428
        }
429
        if (!$r or $waits >= 100) {
0.67.329 by Bernt M. Johnsen
More server stuff
430
            say("Server would not shut down properly");
431
            $self->kill;
0.67.448 by Bernt M. Johnsen
Delete socket file on server stop, look for boot-sql more places
432
        } else {
433
            unlink $self->socketfile;
0.67.329 by Bernt M. Johnsen
More server stuff
434
        }
435
    } else {
0.67.320 by Bernt M. Johnsen
Prpoer server shutdown
436
        $self->kill;
0.67.314 by Bernt Johnsen
Server: Windows process start
437
    }
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
438
}
439
440
sub _find {
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
441
    my($self, $bases, $subdir, $name) = @_;
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
442
    
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
443
    foreach my $base (@$bases) {
444
        foreach my $s (@$subdir) {
445
            my $path  = $base."/".$s."/".$name;
446
            return $path if -f $path;
447
        }
448
    }
449
    my $paths = "";
450
    foreach my $base (@$bases) {
451
        $paths .= join(",",map {"'".$base."/".$_."'"} @$subdir).",";
452
    }
453
    croak "Cannot find '$name' in $paths"; 
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
454
}
455
0.67.319 by Bernt M. Johnsen
Server dsn and test of dsn/Executor
456
sub dsn {
457
    my ($self,$database) = @_;
458
    $database = "test" if not defined MYSQLD_DEFAULT_DATABASE;
459
    return "dbi:mysql:host=127.0.0.1:port=".
0.67.329 by Bernt M. Johnsen
More server stuff
460
        $self->[MYSQLD_PORT].
0.67.319 by Bernt M. Johnsen
Server dsn and test of dsn/Executor
461
        ":user=root:database=".$database;
462
}
463
0.67.339 by Bernt M. Johnsen
Added replicating server (actually a master/slave pair) + unit test
464
sub dbh {
0.67.382 by Bernt M. Johnsen
Fixed problem with stale dbh handlerwhich caused problem for replication
465
    my ($self) = @_;
466
    if (defined $self->[MYSQLD_DBH]) {
467
        if (!$self->[MYSQLD_DBH]->ping) {
468
            $self->[MYSQLD_DBH] = DBI->connect($self->dsn("mysql"),
469
                                               undef,
470
                                               undef,
471
                                               {PrintError => 1,
472
                                                RaiseError => 0,
473
                                                AutoCommit => 1});
474
        }
475
    } else {
476
        $self->[MYSQLD_DBH] = DBI->connect($self->dsn("mysql"),
477
                                           undef,
478
                                           undef,
479
                                           {PrintError => 1,
480
                                            RaiseError => 0,
481
                                            AutoCommit => 1});
482
    }
483
    return $self->[MYSQLD_DBH];
0.67.339 by Bernt M. Johnsen
Added replicating server (actually a master/slave pair) + unit test
484
}
485
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
486
sub _findDir {
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
487
    my($self, $bases, $subdir, $name) = @_;
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
488
    
0.99.6 by Bernt M. Johnsen
Cmake out-of-source build adaptions
489
    foreach my $base (@$bases) {
490
        foreach my $s (@$subdir) {
491
            my $path  = $base."/".$s."/".$name;
492
            return $base."/".$s if -f $path;
493
        }
494
    }
495
    my $paths = "";
496
    foreach my $base (@$bases) {
497
        $paths .= join(",",map {"'".$base."/".$_."'"} @$subdir).",";
498
    }
499
    croak "Cannot find '$name' in $paths";
0.98.3 by Bernt M. Johnsen
MySQL server added (not used yet)
500
}
501
0.67.335 by Bernt Johnsen
Windows adaptions
502
sub _absPath {
503
    my ($self, $path) = @_;
0.67.336 by Bernt M. Johnsen
more mysql.sock problems
504
    
0.67.381 by Bernt M. Johnsen
Adjustments after merge
505
    if (osWindows()) {
0.67.336 by Bernt M. Johnsen
more mysql.sock problems
506
        return 
507
            $path =~ m/^[A-Z]:[\/\\]/i;
0.67.335 by Bernt Johnsen
Windows adaptions
508
    } else {
0.67.336 by Bernt M. Johnsen
more mysql.sock problems
509
        return $path =~ m/^\//;
0.67.335 by Bernt Johnsen
Windows adaptions
510
    }
511
}
0.67.351 by Bernt M. Johnsen
Figuring out the mysql version for Linux
512
513
sub version {
514
    my($self) = @_;
515
516
    if (not defined $self->[MYSQLD_VERSION]) {
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
517
        my $ver;
518
        if (osWindows) {
519
            my $conf = $self->_find([$self->basedir], 
520
                                    ['scripts',
521
                                     'bin',
522
                                     'sbin'], 
523
                                    'mysql_config.pl');
524
            ## This will not work if there is no perl installation,
525
            ## but without perl, RQG won't work either :-)
526
            $ver = `perl $conf --version`;
527
        } else {
528
            my $conf = $self->_find([$self->basedir], 
529
                                    ['scripts',
530
                                     'bin',
531
                                     'sbin'], 
532
                                    'mysql_config');
533
            
534
            $ver = `sh "$conf" --version`;
535
        }
536
        chop($ver);
537
        $self->[MYSQLD_VERSION] = $ver;
0.67.351 by Bernt M. Johnsen
Figuring out the mysql version for Linux
538
    }
539
    return $self->[MYSQLD_VERSION];
540
}
0.67.352 by Bernt M. Johnsen
Version numbers as ints
541
0.67.452 by Bernt M. Johnsen
Corefile stuff. Version nmbers on Windows
542
sub printInfo {
543
    my($self) = @_;
544
545
    say("MySQL ". $self->version);
546
    say("Binary: ". $self->binary);
547
    say("Datadir: ". $self->datadir);
548
    say("Corefile: " . $self->corefile);
549
}
550
0.67.352 by Bernt M. Johnsen
Version numbers as ints
551
sub versionNumbers {
552
    my($self) = @_;
553
554
    $self->version =~ m/([0-9]+)\.([0-9]+)\.([0-9]+)/;
555
556
    return (int($1),int($2),int($3));
557
}
558
0.67.357 by Bernt M. Johnsen
Better version checking
559
#############  Version specific stuff
560
561
sub _messages {
562
    my ($self) = @_;
563
564
    if ($self->_olderThan(5,5,0)) {
0.67.365 by Bernt M. Johnsen
Fixed version check
565
        return "--language=".$self->[MYSQLD_MESSAGES]."/english";
0.67.357 by Bernt M. Johnsen
Better version checking
566
    } else {
0.67.365 by Bernt M. Johnsen
Fixed version check
567
        return "--lc-messages-dir=".$self->[MYSQLD_MESSAGES];
0.67.357 by Bernt M. Johnsen
Better version checking
568
    }
569
}
570
571
sub _logOption {
572
    my ($self) = @_;
573
574
    if ($self->_olderThan(5,1,29)) {
0.67.365 by Bernt M. Johnsen
Fixed version check
575
        return "--log=".$self->logfile; 
0.67.357 by Bernt M. Johnsen
Better version checking
576
    } else {
0.67.365 by Bernt M. Johnsen
Fixed version check
577
        return "--general-log-file=".$self->logfile;
0.67.357 by Bernt M. Johnsen
Better version checking
578
    }
579
}
580
581
sub _olderThan {
582
    my ($self,$b1,$b2,$b3) = @_;
583
    
584
    my ($v1, $v2, $v3) = $self->versionNumbers;
585
0.67.366 by Bernt M. Johnsen
Fixed version check
586
    my $b = $b1*1000 + $b2 * 100 + $b3;
587
    my $v = $v1*1000 + $v2 * 100 + $v3;
0.67.365 by Bernt M. Johnsen
Fixed version check
588
0.67.366 by Bernt M. Johnsen
Fixed version check
589
    return $v < $b;
0.67.357 by Bernt M. Johnsen
Better version checking
590
}
0.104.2 by Bernt M. Johnsen
Moved call to mysqldump into DBServer/MySQLd
591
0.107.3 by John H. Embretsen
Fix for bug#55689 (mysqldump fails with new server module against old MySQL due to --no-tablespaces).
592
sub _newerThan {
593
    my ($self,$b1,$b2,$b3) = @_;
594
595
    my ($v1, $v2, $v3) = $self->versionNumbers;
596
597
    my $b = $b1*1000 + $b2 * 100 + $b3;
598
    my $v = $v1*1000 + $v2 * 100 + $v3;
599
600
    return $v > $b;
601
}
602
0.104.2 by Bernt M. Johnsen
Moved call to mysqldump into DBServer/MySQLd
603