#!/bin/sh # Copyright (C) 2004 MySQL AB # For a more info consult the file COPYRIGHT distributed with this file # This scripts starts the table handler ndbcluster # configurable parameters, make sure to change in mysqlcluterd as well port_base="2200" fsdir=`pwd` # end configurable parameters #BASEDIR is always one above mysql-test directory CWD=`pwd` cd .. BASEDIR=`pwd` cd $CWD # Are we using a source or a binary distribution? if [ -d ../sql ] ; then SOURCE_DIST=1 ndbtop=$BASEDIR/ndb exec_ndb=$ndbtop/src/kernel/ndbd exec_mgmtsrvr=$ndbtop/src/mgmsrv/ndb_mgmd exec_waiter=$ndbtop/tools/ndb_waiter exec_mgmtclient=$ndbtop/src/mgmclient/ndb_mgm else BINARY_DIST=1 if test -x "$BASEDIR/libexec/ndbd" then exec_ndb=$BASEDIR/libexec/ndbd exec_mgmtsrvr=$BASEDIR/libexec/ndb_mgmd else exec_ndb=$BASEDIR/bin/ndbd exec_mgmtsrvr=$BASEDIR/bin/ndb_mgmd fi exec_waiter=$BASEDIR/bin/ndb_waiter exec_mgmtclient=$BASEDIR/bin/ndb_mgm fi pidfile=ndbcluster.pid cfgfile=Ndb.cfg stop_ndb= initial_ndb= status_ndb= ndb_discless=0 ndb_con_op=100000 ndb_dmem=80M ndb_imem=24M while test $# -gt 0; do case "$1" in --stop) stop_ndb=1 ;; --initial) flags_ndb=$flags_ndb" -i" initial_ndb=1 ;; --status) status_ndb=1 ;; --small) ndb_con_op=10000 ndb_dmem=40M ndb_imem=12M ;; --discless) ndb_discless=1 ;; --data-dir=*) fsdir=`echo "$1" | sed -e "s;--data-dir=;;"` ;; --port-base=*) port_base=`echo "$1" | sed -e "s;--port-base=;;"` ;; -- ) shift; break ;; --* ) $ECHO "Unrecognized option: $1"; exit 1 ;; * ) break ;; esac shift done fs_ndb=$fsdir/ndbcluster fs_mgm_1=$fs_ndb/1.ndb_mgm fs_ndb_2=$fs_ndb/2.ndb_db fs_ndb_3=$fs_ndb/3.ndb_db fs_name_2=$fs_ndb/node-2-fs-$port_base fs_name_3=$fs_ndb/node-3-fs-$port_base NDB_HOME= export NDB_CONNECTSTRING if [ ! -x $fsdir ]; then echo "$fsdir missing" exit 1 fi if [ ! -x $exec_ndb ]; then echo "$exec_ndb missing" exit 1 fi if [ ! -x $exec_mgmtsrv ]; then echo "$exec_mgmtsrvr missing" exit 1 fi start_default_ndbcluster() { # do some checks NDB_CONNECTSTRING= if [ $initial_ndb ] ; then [ -d $fs_ndb ] || mkdir $fs_ndb [ -d $fs_mgm_1 ] || mkdir $fs_mgm_1 [ -d $fs_ndb_2 ] || mkdir $fs_ndb_2 [ -d $fs_ndb_3 ] || mkdir $fs_ndb_3 [ -d $fs_name_2 ] || mkdir $fs_name_2 [ -d $fs_name_3 ] || mkdir $fs_name_3 fi if [ -d "$fs_ndb" -a -d "$fs_mgm_1" -a -d "$fs_ndb_2" -a -d "$fs_ndb_3" -a -d "$fs_name_2" -a -d "$fs_name_3" ]; then :; else echo "$fs_ndb filesystem directory does not exist" exit 1 fi # set som help variables ndb_host="localhost" ndb_mgmd_port=$port_base port_transporter=`expr $ndb_mgmd_port + 2` NDB_CONNECTSTRING_BASE="host=$ndb_host:$ndb_mgmd_port;nodeid=" # Start management server as deamon NDB_ID="1" NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID # Edit file system path and ports in config file if [ $initial_ndb ] ; then sed \ -e s,"CHOOSE_MaxNoOfConcurrentOperations",$ndb_con_op,g \ -e s,"CHOOSE_DataMemory",$ndb_dmem,g \ -e s,"CHOOSE_IndexMemory",$ndb_imem,g \ -e s,"CHOOSE_Discless",$ndb_discless,g \ -e s,"CHOOSE_HOSTNAME_".*,"$ndb_host",g \ -e s,"CHOOSE_FILESYSTEM_NODE_2","$fs_name_2",g \ -e s,"CHOOSE_FILESYSTEM_NODE_3","$fs_name_3",g \ -e s,"CHOOSE_PORT_MGM",$ndb_mgmd_port,g \ -e s,"CHOOSE_PORT_TRANSPORTER",$port_transporter,g \ < ndb/ndb_config_2_node.ini \ > "$fs_mgm_1/config.ini" fi if ( cd $fs_mgm_1 ; echo $NDB_CONNECTSTRING > $cfgfile ; $exec_mgmtsrvr -d -c config.ini ) ; then :; else echo "Unable to start $exec_mgmtsrvr from `pwd`" exit 1 fi cat `find $fs_ndb -name 'node*.pid'` > $pidfile # Start database node NDB_ID="2" NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID echo "Starting ndbd connectstring=\""$NDB_CONNECTSTRING\" ( cd $fs_ndb_2 ; echo $NDB_CONNECTSTRING > $cfgfile ; $exec_ndb -d $flags_ndb & ) cat `find $fs_ndb -name 'node*.pid'` > $pidfile # Start database node NDB_ID="3" NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID echo "Starting ndbd connectstring=\""$NDB_CONNECTSTRING\" ( cd $fs_ndb_3 ; echo $NDB_CONNECTSTRING > $cfgfile ; $exec_ndb -d $flags_ndb & ) cat `find $fs_ndb -name 'node*.pid'` > $pidfile # test if Ndb Cluster starts properly echo "Waiting for started..." NDB_ID="11" NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID if ( $exec_waiter ) | grep "NDBT_ProgramExit: 0 - OK"; then :; else echo "Ndbcluster startup failed" exit 1 fi echo $NDB_CONNECTSTRING > $cfgfile cat `find $fs_ndb -name 'node*.pid'` > $pidfile status_ndbcluster } status_ndbcluster() { # Start management client echo "show" | $exec_mgmtclient $ndb_host $ndb_mgmd_port } stop_default_ndbcluster() { #if [ ! -f $pidfile ] ; then # exit 0 #fi if [ ! -f $cfgfile ] ; then echo "$cfgfile missing" exit 1 fi ndb_host=`cat $cfgfile | sed -e "s,.*host=\(.*\)\:.*,\1,1"` ndb_mgmd_port=`cat $cfgfile | sed -e "s,.*host=$ndb_host\:\([0-9]*\).*,\1,1"` # Start management client exec_mgmtclient="$exec_mgmtclient --try-reconnect=1 $ndb_host $ndb_mgmd_port" echo "$exec_mgmtclient" echo "all stop" | $exec_mgmtclient sleep 5 if [ -f $pidfile ] ; then kill `cat $pidfile` 2> /dev/null rm $pidfile fi } if [ $status_ndb ] ; then status_ndbcluster exit 0 fi if [ $stop_ndb ] ; then stop_default_ndbcluster else start_default_ndbcluster fi exit 0