[Bio] / FigKernelPackages / DBrtns.pm Repository:
ViewVC logotype

Diff of /FigKernelPackages/DBrtns.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4, Wed Oct 27 15:04:10 2004 UTC revision 1.5, Mon Nov 1 20:20:09 2004 UTC
# Line 1  Line 1 
1  package DBrtns;  package DBrtns;
2    
3  use strict;  use strict;
4    use POSIX;
5  use DBI;  use DBI;
6  use FIG_Config;  use FIG_Config;
7    
# Line 217  Line 218 
218      }      }
219  }  }
220    
221    #
222    # Following are database administration routines. They create an instance of a ServerAdmin class
223    # for the appropriate server type (in order to eliminate the if mysql / if pg / etc stuff).
224    #
225    
226    sub get_server_admin
227    {
228        if ($FIG_Config::dbms eq "mysql")
229        {
230            return MysqlAdmin->new();
231        }
232        elsif ($FIG_Config::dbms eq "Pg")
233        {
234            return new PostgresAdmin();
235        }
236        else
237        {
238            warn "Unknown server type $FIG_Config::dbms\n";
239            return undef;
240        }
241    }
242    package MysqlAdmin;
243    
244    use POSIX;
245    use DBI;
246    
247    sub new
248    {
249        my($class) = @_;
250    
251        my $self = {};
252    
253        return bless($self, $class);
254    }
255    
256    sub init_db
257    {
258        my($self, $db_dir) = @_;
259    
260        if (!$db_dir)
261        {
262            warn "init_db failed: db_dir must be provided\n";
263            return;
264        }
265    
266        if (-d "$db_dir/mysql")
267        {
268            warn "init_db: mysql data directory already exists\n";
269            return;
270        }
271    
272        my $exe = "$FIG_Config::ext_bin/mysql_install_db";
273        if (! -x $exe)
274        {
275            $exe = "mysql_install_db";
276        }
277    
278        my $rc = system($exe,
279                        "--datadir=$db_dir",
280                        "--user=$FIG_Config::dbuser");
281        if ($rc != 0)
282        {
283            my $err = $?;
284            if (WIFEXITED($err))
285            {
286                my $exitstat = WEXITSTATUS($err);
287                warn "init_db failed: $exe returned result code $exitstat\n";
288            }
289            else
290            {
291                warn "init_db failed: $exe died with signal ", WTERMSIG($err), "\n";
292            }
293            return;
294        }
295    
296        return 1;
297    }
298    
299    sub create_database
300    {
301        my($self, $db_name) = @_;
302    
303        my $drh = DBI->install_driver("mysql");
304    
305        my @dbs = DBI->data_sources("mysql", { host => $FIG_Config::dbhost,
306                                                   user => $FIG_Config::dbuser,
307                                                   password => $FIG_Config::dbpass });
308        if (grep { $_ eq $db_name } @dbs)
309        {
310            warn "Database $db_name already exists\n";
311            return;
312        }
313    
314        my $rc = $drh->func('createdb', $db_name, $FIG_Config::dbhost,
315                            $FIG_Config::dbuser, $FIG_Config::dbpass, 'admin');
316    
317    
318        if (!$rc)
319        {
320            warn "create_database: createdb call failed: $DBI::errstr\n";
321            return;
322        }
323    
324        return 1;
325    }
326    
327    sub start_server
328    {
329        my($self) = @_;
330    
331        print "Starting mysql server\n";
332    
333        my(@opts);
334    
335        push(@opts, "--port=$FIG_Config::dbport");
336        #
337        # Don't do this; dbuser isn't the unix uid that we are using.
338        #
339        #push(@opts, "--user=$FIG_Config::dbuser");
340        push(@opts, "--basedir=$FIG_Config::common_runtime");
341        push(@opts, "--datadir=$FIG_Config::db_datadir");
342        push(@opts, "--ledir=$FIG_Config::common_runtime/libexec");
343        #
344        # Oddly, this doesn't seem to work. need to set the environment variable.
345        #
346        #push(@opts, "--port=$FIG_Config::dbport");
347    
348        #
349        # We are going to assume that if mysql has shipped with this release, we'll use it. Otherwise
350        # try to use a system one.
351        #
352    
353        my $exe = "$FIG_Config::ext_bin/mysqld_safe";
354        if (! -x $exe)
355        {
356            $exe = "mysqld_safe";
357        }
358    
359        my $pid = fork;
360    
361        if ($pid == 0)
362        {
363            POSIX::setsid();
364    
365            $ENV{MYSQL_TCP_PORT} = $FIG_Config::dbport;
366            exec $exe, @opts;
367        }
368    
369        print "Forked db server $pid\n";
370    }
371    
372    
373  1  1

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3