📄 mysql-test-run-shell
字号:
export MYSQL MYSQL_CHECK MYSQL_DUMP MYSQL_SHOW MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES CLIENT_BINDIR MASTER_MYSOCK#++# Function Definitions#--prompt_user (){ $ECHO $1 read unused}# We can't use diff -u or diff -a as these are not portableshow_failed_diff (){ reject_file=r/$1.reject result_file=r/$1.result eval_file=r/$1.eval if [ -f $eval_file ] then result_file=$eval_file fi if [ -x "$DIFF" ] && [ -f $reject_file ] then echo "Below are the diffs between actual and expected results:" echo "-------------------------------------------------------" $DIFF -c $result_file $reject_file echo "-------------------------------------------------------" echo "Please follow the instructions outlined at" echo "http://dev.mysql.com/doc/mysql/en/reporting-mysqltest-bugs.html" echo "to find the reason to this problem and how to report this." echo "" fi}do_gdb_test (){ mysql_test_args="$MYSQL_TEST_ARGS $1" $ECHO "set args $mysql_test_args < $2" > $GDB_CLIENT_INIT echo "Set breakpoints ( if needed) and type 'run' in gdb window" #this xterm should not be backgrounded $XTERM -title "Client" -e gdb -x $GDB_CLIENT_INIT $MYSQL_TEST_BIN}error () { $ECHO "Error: $1" exit 1}error_is () { $ECHO "Errors are (from $TIMEFILE) :" $CAT < $TIMEFILE $ECHO "(the last lines may be the most important ones)"}prefix_to_8() { $ECHO " $1" | $SED -e 's:.*\(........\)$:\1:'}pass_inc () { TOT_PASS=`$EXPR $TOT_PASS + 1`}fail_inc () { TOT_FAIL=`$EXPR $TOT_FAIL + 1`}skip_inc () { TOT_SKIP=`$EXPR $TOT_SKIP + 1`}total_inc () { TOT_TEST=`$EXPR $TOT_TEST + 1`}skip_test() { USERT=" ...." SYST=" ...." REALT=" ...." pname=`$ECHO "$1 "|$CUT -c 1-24` RES="$pname" skip_inc $ECHO "$RES$RES_SPACE [ skipped ]"}disable_test() { USERT=" ...." SYST=" ...." REALT=" ...." pname=`$ECHO "$1 "|$CUT -c 1-24` RES="$pname" skip_inc $ECHO "$RES$RES_SPACE [ disabled ] $2"}report_current_test () { tname=$1 echo "CURRENT_TEST: $tname" >> $MASTER_MYERR if [ -n "$PURIFY_LOGS" ] ; then for log in $PURIFY_LOGS do echo "CURRENT_TEST: $tname" >> $log done fi}report_stats () { if [ $TOT_FAIL = 0 ]; then $ECHO "All $TOT_TEST tests were successful." else xten=`$EXPR $TOT_PASS \* 10000` raw=`$EXPR $xten / $TOT_TEST` raw=`$PRINTF %.4d $raw` whole=`$PRINTF %.2s $raw` xwhole=`$EXPR $whole \* 100` deci=`$EXPR $raw - $xwhole` $ECHO "Failed ${TOT_FAIL}/${TOT_TEST} tests, ${whole}.${deci}% were successful." $ECHO "" $ECHO "The log files in $MY_LOG_DIR may give you some hint" $ECHO "of what went wrong." $ECHO "If you want to report this error, please read first the documentation at" $ECHO "http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html" fi if [ $USE_RUNNING_SERVER -eq 0 ] then # Report if there was any fatal warnings/errors in the log files # $RM -f $MY_LOG_DIR/warnings $MY_LOG_DIR/warnings.tmp # Remove some non fatal warnings from the log files $SED -e 's!Warning: Table:.* on delete!!g' -e 's!Warning: Setting lower_case_table_names=2!!g' -e 's!Warning: One can only use the --user.*root!!g' \ $MY_LOG_DIR/*.err \ | $SED -e 's!Warning: Table:.* on rename!!g' \ > $MY_LOG_DIR/warnings.tmp # Find errors for i in "^Warning:" "^Error:" "^==.* at 0x" "InnoDB: Warning" do if $GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings then GOT_WARNINGS=1 fi done $RM -f $MY_LOG_DIR/warnings.tmp if [ $GOT_WARNINGS = "1" ] then echo "WARNING: Got errors/warnings while running tests. Please examine" echo "$MY_LOG_DIR/warnings for details." fi fi # USE_RUNNING_SERVER # Check valgrind errors from mysqltest if [ ! -z "$VALGRIND_MYSQLTEST" ] then if $GREP "ERROR SUMMARY" $MYSQLTEST_LOG | $GREP -v "0 errors" > /dev/null then $ECHO "Valgrind detected errors!" $GREP "ERROR SUMMARY" $MYSQLTEST_LOG | $GREP -v "0 errors" $ECHO "See $MYSQLTEST_LOG" fi fi}mysql_install_db () { $ECHO "Removing Stale Files" if [ -z "$USE_OLD_DATA" ]; then $RM -rf $MASTER_MYDDIR $MASTER_MYDDIR"1" $ECHO "Installing Master Databases" $INSTALL_DB if [ $? != 0 ]; then error "Could not install master test DBs" exit 1 fi fi if [ ! -z "$USE_NDBCLUSTER" ] then $ECHO "Installing Master Databases 1" $INSTALL_DB -1 if [ $? != 0 ]; then error "Could not install master test DBs 1" exit 1 fi fi $ECHO "Installing Slave Databases" $RM -rf $SLAVE_MYDDIR $MY_LOG_DIR/* $INSTALL_DB -slave if [ $? != 0 ]; then error "Could not install slave test DBs" exit 1 fi for slave_num in 1 2 ; do $RM -rf var/slave$slave_num-data mkdir -p var/slave$slave_num-data/mysql mkdir -p var/slave$slave_num-data/test cp var/slave-data/mysql/* var/slave$slave_num-data/mysql done return 0}gprof_prepare (){ $RM -rf $GPROF_DIR mkdir -p $GPROF_DIR}gprof_collect (){ if [ -f $MASTER_MYDDIR/gmon.out ]; then gprof $MASTER_MYSQLD $MASTER_MYDDIR/gmon.out > $GPROF_MASTER echo "Master execution profile has been saved in $GPROF_MASTER" fi if [ -f $SLAVE_MYDDIR/gmon.out ]; then gprof $SLAVE_MYSQLD $SLAVE_MYDDIR/gmon.out > $GPROF_SLAVE echo "Slave execution profile has been saved in $GPROF_SLAVE" fi}gcov_prepare () { $FIND $BASEDIR -name \*.gcov \ -or -name \*.da | $XARGS $RM}gcov_collect () { $ECHO "Collecting source coverage info..." [ -f $GCOV_MSG ] && $RM $GCOV_MSG [ -f $GCOV_ERR ] && $RM $GCOV_ERR for d in $MYSQLD_SRC_DIRS; do cd $BASEDIR/$d for f in *.h *.cc *.c; do $GCOV $f 2>>$GCOV_ERR >>$GCOV_MSG done cd $MYSQL_TEST_DIR done $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"}abort_if_failed(){ if [ ! $? = 0 ] ; then echo $1 exit 1 fi}start_manager(){ if [ $USE_MANAGER = 0 ] ; then echo "Manager disabled, skipping manager start." $RM -f $MYSQL_MANAGER_LOG return fi $ECHO "Starting MySQL Manager" if [ -f "$MANAGER_PID_FILE" ] ; then kill `cat $MANAGER_PID_FILE` sleep 1 if [ -f "$MANAGER_PID_FILE" ] ; then kill -9 `cat $MANAGER_PID_FILE` sleep 1 fi fi $RM -f $MANAGER_PID_FILE MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -u $MYSQL_MANAGER_USER \ -o $MYSQL_MANAGER_PW_FILE` $MYSQL_MANAGER --log=$MYSQL_MANAGER_LOG --port=$MYSQL_MANAGER_PORT \ --password-file=$MYSQL_MANAGER_PW_FILE --pid-file=$MANAGER_PID_FILE abort_if_failed "Could not start MySQL manager" mysqltest_manager_args="--manager-host=localhost \ --manager-user=$MYSQL_MANAGER_USER \ --manager-password=$MYSQL_MANAGER_PW \ --manager-port=$MYSQL_MANAGER_PORT \ --manager-wait-timeout=$START_WAIT_TIMEOUT" MYSQL_TEST="$MYSQL_TEST $mysqltest_manager_args" MYSQL_TEST_ARGS="$MYSQL_TEST_ARGS $mysqltest_manager_args" while [ ! -f $MANAGER_PID_FILE ] ; do sleep 1 done echo "Manager started"}stop_manager(){ if [ $USE_MANAGER = 0 ] ; then return fi $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT -u$MYSQL_MANAGER_USER \ -p$MYSQL_MANAGER_PW -P $MYSQL_MANAGER_PORT <<EOFshutdownEOF echo "Manager terminated"}manager_launch(){ ident=$1 shift if [ $USE_MANAGER = 0 ] ; then echo $@ | /bin/sh >> $CUR_MYERR 2>&1 & sleep 2 #hack return fi $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \ --password=$MYSQL_MANAGER_PW --port=$MYSQL_MANAGER_PORT <<EOFdef_exec $ident "$@"set_exec_stdout $ident $CUR_MYERRset_exec_stderr $ident $CUR_MYERRset_exec_con $ident root localhost $CUR_MYSOCKstart_exec $ident $START_WAIT_TIMEOUTEOF abort_if_failed "Could not execute manager command"}manager_term(){ pid=$1 ident=$2 if [ $USE_MANAGER = 0 ] ; then # Shutdown time must be high as slave may be in reconnect $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=5 --shutdown_timeout=70 shutdown >> $MYSQL_MANAGER_LOG 2>&1 res=$? # Some systems require an extra connect $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=1 ping >> $MYSQL_MANAGER_LOG 2>&1 if test $res = 0 then wait_for_pid $pid fi return $res fi $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \ --password=$MYSQL_MANAGER_PW --port=$MYSQL_MANAGER_PORT <<EOFstop_exec $ident $STOP_WAIT_TIMEOUTEOF abort_if_failed "Could not execute manager command"}start_ndbcluster(){ if [ ! -z "$USE_NDBCLUSTER" ] then rm -f $NDB_TOOLS_OUTPUT if [ -z "$USE_RUNNING_NDBCLUSTER" ] then echo "Starting ndbcluster" if [ "$DO_BENCH" = 1 ] then NDBCLUSTER_EXTRA_OPTS="" else NDBCLUSTER_EXTRA_OPTS="--small" fi ./ndb/ndbcluster $NDBCLUSTER_OPTS --character-sets-dir=$CHARSETSDIR $NDBCLUSTER_EXTRA_OPTS --initial || NDB_STATUS_OK=0 if [ x$NDB_STATUS_OK != x1 ] ; then if [ x$FORCE != x1 ] ; then exit 1 fi USE_NDBCLUSTER= return fi NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT" else NDB_CONNECTSTRING="$USE_RUNNING_NDBCLUSTER" echo "Using ndbcluster at $NDB_CONNECTSTRING" fi USE_NDBCLUSTER="$USE_NDBCLUSTER --ndb-connectstring=\"$NDB_CONNECTSTRING\"" export NDB_CONNECTSTRING fi}stop_ndbcluster(){ if [ ! -z "$USE_NDBCLUSTER" ] then if [ -z "$USE_RUNNING_NDBCLUSTER" ] then # Kill any running ndbcluster stuff ./ndb/ndbcluster $NDBCLUSTER_OPTS --stop fi fi}# The embedded server needs the cleanup so we do some of the start work# but stop before actually running mysqld or anything.start_master(){ eval "this_master_running=\$MASTER$1_RUNNING" if [ x$this_master_running = x1 ] || [ x$LOCAL_MASTER = x1 ] ; then return fi # Remove stale binary logs except for 2 tests which need them if [ "$tname" != "rpl_crash_binlog_ib_1b" ] && [ "$tname" != "rpl_crash_binlog_ib_2b" ] && [ "$tname" != "rpl_crash_binlog_ib_3b" ] then $RM -f $MYSQL_TEST_DIR/var/log/master-bin$1.* fi # Remove old master.info and relay-log.info files $RM -f $MYSQL_TEST_DIR/var/master-data$1/master.info $MYSQL_TEST_DIR/var/master-data$1/relay-log.info #run master initialization shell script if one exists if [ -f "$master_init_script" ] ; then /bin/sh $master_init_script fi cd $BASEDIR # for gcov if [ -n "$1" ] ; then id=`$EXPR $1 + 101`; this_master_myport=`$EXPR $MASTER_MYPORT + $1` NOT_FIRST_MASTER_EXTRA_OPTS="--skip-innodb" eval "MASTER_MYPORT$1=$this_master_myport" export MASTER_MYPORT$1 else id=1; this_master_myport=$MASTER_MYPORT NOT_FIRST_MASTER_EXTRA_OPTS="" fi if [ -n "$EXTRA_MASTER_MYSQLD_TRACE" ] then CURR_MASTER_MYSQLD_TRACE="$EXTRA_MASTER_MYSQLD_TRACE$1" fi if [ -z "$DO_BENCH" -a -z "$DO_STRESS" ] then master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin$1 \ --server-id=$id \ --basedir=$MY_BASEDIR \ --port=$this_master_myport \ --port-open-timeout=380 \ --local-infile \ --exit-info=256 \ --core \ $USE_NDBCLUSTER \ --datadir=$MASTER_MYDDIR$1 \ --pid-file=$MASTER_MYPID$1 \ --socket=$MASTER_MYSOCK$1 \ --log=$MASTER_MYLOG$1 \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -