diff options
-rwxr-xr-x | Build-tools/Do-compile | 6 | ||||
-rw-r--r-- | Docs/manual.texi | 24 | ||||
-rw-r--r-- | mysql-test/mysql-test-run.sh | 8 | ||||
-rw-r--r-- | sql/mysqld.cc | 13 | ||||
-rw-r--r-- | sql/slave.cc | 47 | ||||
-rw-r--r-- | sql/slave.h | 2 |
6 files changed, 53 insertions, 47 deletions
diff --git a/Build-tools/Do-compile b/Build-tools/Do-compile index 526d7f2364b..9409e3752df 100755 --- a/Build-tools/Do-compile +++ b/Build-tools/Do-compile @@ -4,10 +4,10 @@ use Getopt::Long; $opt_distribution=$opt_user=$opt_result=$opt_config_options=$opt_config_env=""; $opt_dbd_options=$opt_perl_options=$opt_suffix=""; $opt_tmp=$version_suffix=""; -$opt_help=$opt_Information=$opt_no_delete=$opt_delete=$opt_debug=$opt_stage=$opt_rsh_mail=$opt_no_test=$opt_no_perl=$opt_with_low_memory=$opt_fast_benchmark=$opt_static_client=$opt_static_server=$opt_static_perl=$opt_sur=$opt_with_small_disk=$opt_local_perl=$opt_tcpip=$opt_build_thread=$opt_no_mysqltest=$opt_use_old_distribution=$opt_enable_shared=$opt_no_crash_me=$opt_no_strip=0; +$opt_help=$opt_Information=$opt_delete=$opt_debug=$opt_stage=$opt_rsh_mail=$opt_no_test=$opt_no_perl=$opt_with_low_memory=$opt_fast_benchmark=$opt_static_client=$opt_static_server=$opt_static_perl=$opt_sur=$opt_with_small_disk=$opt_local_perl=$opt_tcpip=$opt_build_thread=$opt_no_mysqltest=$opt_use_old_distribution=$opt_enable_shared=$opt_no_crash_me=$opt_no_strip=0; $opt_innodb=$opt_bdb=0; -GetOptions("Information","help","distribution=s","user=s","result=s","no-delete","delete","no-test","no-mysqltest","perl-files=s","debug","config-options=s","config-env=s","stage=i","rsh-mail","with-low-memory","fast-benchmark","tmp=s","static-client","static-server","static-perl","no-perl","local-perl","perl-options=s","sur","with-small-disk","dbd-options=s","tcpip","suffix=s","build-thread=i","innodb","bdb","use-old-distribution","enable-shared","no-crash-me","no-strip") || usage(); +GetOptions("Information","help","distribution=s","user=s","result=s","delete","no-test","no-mysqltest","perl-files=s","debug","config-options=s","config-env=s","stage=i","rsh-mail","with-low-memory","fast-benchmark","tmp=s","static-client","static-server","static-perl","no-perl","local-perl","perl-options=s","sur","with-small-disk","dbd-options=s","tcpip","suffix=s","build-thread=i","innodb","bdb","use-old-distribution","enable-shared","no-crash-me","no-strip") || usage(); usage() if ($opt_help || $opt_Information); usage() if (!$opt_distribution); @@ -128,6 +128,8 @@ if ($opt_stage <= 1) $opt_config_options.=" --with-low-memory" if ($opt_with_low_memory); # Fix files if this is in another timezone than work.mysql.com unlink("config.cache"); + unlink("bdb/build_unix/config.cache"); + unlink("innobase/config.cache"); log_system("$make clean") if ($opt_use_old_distribution); if ($opt_static_server) { diff --git a/Docs/manual.texi b/Docs/manual.texi index 13dfe749d31..a1c64dcbcce 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -9840,31 +9840,13 @@ work). You must also use the @code{egcs} C++ compiler @node Linux-IA64, , Linux-MIPS, Linux @subsubsection Linux IA64 Notes -To get MySQL to compile on Linux Ia64, we had to do the following -(we assume that this will be easier when next gcc version for ia64 is -released). - -Using @code{gcc-2.9-final}: - -@example -CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex -@end example - -After @code{make} you will get an error that @code{sql/opt_range.cc} -will not compile (internal compiler error). To fix this, go to the sql -directory and type @code{make} again. Copy the compile line, but change --O2 to -O0. The file should now compile. - -Now you can do: +To get MySQL to compile on Linux Ia64, we use the following compile line: +Using @code{gcc-2.96}: @example -cd .. -make -make_install +CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql "--with-comment=Official MySQL binary" --with-extra-charsets=complex @end example -and @code{mysqld} should be ready to run. - On Ia64 the MySQL client binaries are using shared libraries. This means that if you install our binary distribution in some other place than @file{/usr/local/mysql} you need to either modify @file{/etc/ld.so.conf} diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index de4de7f7f08..a9044609df4 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -113,6 +113,11 @@ SLAVE_LOAD_TMPDIR=../../var/tmp #needs to be same length to test logging RES_SPACE=" " MYSQLD_SRC_DIRS="strings mysys include extra regex isam merge myisam \ myisammrg heap sql" +# +# Set LD_LIBRARY_PATH if we are using shared libraries +# +LD_LIBRARY_PATH="$BASEDIR/lib:$LD_LIBRARY_PATH" +export LD_LIBRARY_PATH MASTER_RUNNING=0 MASTER_MYPORT=9306 @@ -580,12 +585,12 @@ start_slave() --exit-info=256 \ --log-bin=$MYSQL_TEST_DIR/var/log/slave-bin --log-slave-updates \ + --log=$SLAVE_MYLOG \ --basedir=$MY_BASEDIR \ --datadir=$SLAVE_MYDDIR \ --pid-file=$SLAVE_MYPID \ --port=$SLAVE_MYPORT \ --socket=$SLAVE_MYSOCK \ - --log=$SLAVE_MYLOG \ --character-sets-dir=$CHARSETSDIR \ --default-character-set=$CHARACTER_SET \ --core \ @@ -595,6 +600,7 @@ start_slave() --slave-load-tmpdir=$SLAVE_LOAD_TMPDIR \ --report-host=127.0.0.1 --report-user=root \ --report-port=$SLAVE_MYPORT \ + --master-retry-count=5 \ $SMALL_SERVER \ $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT" if [ x$DO_DDD = x1 ] diff --git a/sql/mysqld.cc b/sql/mysqld.cc index b8e8c80d100..a4421bc139c 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -286,7 +286,7 @@ uint master_port = MYSQL_PORT, master_connect_retry = 60; uint report_port = MYSQL_PORT; bool master_ssl = 0; -ulong max_tmp_tables,max_heap_table_size; +ulong max_tmp_tables,max_heap_table_size,master_retry_count=0; ulong bytes_sent = 0L, bytes_received = 0L; bool opt_endinfo,using_udf_functions,low_priority_updates, locked_in_memory; @@ -2573,10 +2573,9 @@ enum options { OPT_MASTER_HOST, OPT_MASTER_USER, OPT_MASTER_PASSWORD, OPT_MASTER_PORT, OPT_MASTER_INFO_FILE, OPT_MASTER_CONNECT_RETRY, -#ifdef HAVE_OPENSSL + OPT_MASTER_RETRY_COUNT, OPT_MASTER_SSL, OPT_MASTER_SSL_KEY, OPT_MASTER_SSL_CERT, -#endif /* HAVE_OPESSSL*/ OPT_SQL_BIN_UPDATE_SAME, OPT_REPLICATE_DO_DB, OPT_REPLICATE_IGNORE_DB, OPT_LOG_SLAVE_UPDATES, OPT_BINLOG_DO_DB, OPT_BINLOG_IGNORE_DB, @@ -2683,12 +2682,11 @@ static struct option long_options[] = { {"master-password", required_argument, 0, (int) OPT_MASTER_PASSWORD}, {"master-port", required_argument, 0, (int) OPT_MASTER_PORT}, {"master-connect-retry", required_argument, 0, (int) OPT_MASTER_CONNECT_RETRY}, + {"master-retry-count", required_argument, 0, (int) OPT_MASTER_RETRY_COUNT}, {"master-info-file", required_argument, 0, (int) OPT_MASTER_INFO_FILE}, -#ifdef HAVE_OPENSSL {"master-ssl", optional_argument, 0, (int) OPT_MASTER_SSL}, {"master-ssl-key", optional_argument, 0, (int) OPT_MASTER_SSL_KEY}, {"master-ssl-cert", optional_argument, 0, (int) OPT_MASTER_SSL_CERT}, -#endif {"myisam-recover", optional_argument, 0, (int) OPT_MYISAM_RECOVER}, {"memlock", no_argument, 0, (int) OPT_MEMLOCK}, // needs to be available for the test case to pass in non-debugging mode @@ -3972,7 +3970,6 @@ static void get_options(int argc,char **argv) case OPT_MASTER_PORT: master_port= atoi(optarg); break; -#ifdef HAVE_OPENSSL case OPT_MASTER_SSL: master_ssl=atoi(optarg); break; @@ -3982,7 +3979,6 @@ static void get_options(int argc,char **argv) case OPT_MASTER_SSL_CERT: master_ssl_cert=optarg; break; -#endif /* HAVE_OPENSSL */ case OPT_REPORT_HOST: report_host=optarg; break; @@ -3998,6 +3994,9 @@ static void get_options(int argc,char **argv) case OPT_MASTER_CONNECT_RETRY: master_connect_retry= atoi(optarg); break; + case OPT_MASTER_RETRY_COUNT: + master_retry_count= atoi(optarg); + break; case OPT_SAFE_SHOW_DB: opt_safe_show_db=1; break; diff --git a/sql/slave.cc b/sql/slave.cc index 01938a52153..23475f3b1e8 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -522,7 +522,7 @@ int init_master_info(MASTER_INFO* mi) if (master_user) strmake(mi->user, master_user, sizeof(mi->user) - 1); if (master_password) - strmake(mi->password, master_password, sizeof(mi->password) - 1); + strmake(mi->password, master_password, HASH_PASSWORD_LENGTH); mi->port = master_port; mi->connect_retry = master_connect_retry; } @@ -561,7 +561,7 @@ int init_master_info(MASTER_INFO* mi) master_host) || init_strvar_from_file(mi->user, sizeof(mi->user), &mi->file, master_user) || - init_strvar_from_file(mi->password, sizeof(mi->password), &mi->file, + init_strvar_from_file(mi->password, HASH_PASSWORD_LENGTH+1, &mi->file, master_password) || init_intvar_from_file((int*)&mi->port, &mi->file, master_port) || init_intvar_from_file((int*)&mi->connect_retry, &mi->file, @@ -1250,7 +1250,7 @@ static int safe_connect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) !mc_mysql_connect(mysql, mi->host, mi->user, mi->password, 0, mi->port, 0, 0)) { - sql_print_error("Slave thread: error connecting to master:%s(%d),\ + sql_print_error("Slave thread: error connecting to master: %s (%d),\ retry in %d sec", mc_mysql_error(mysql), errno, mi->connect_retry); safe_sleep(thd, mi->connect_retry); } @@ -1267,38 +1267,55 @@ static int safe_connect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) return slave_was_killed; } -/* try to connect until successful or slave killed */ +/* + Try to connect until successful or slave killed or we have retried + master_retry_count times +*/ static int safe_reconnect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) { int slave_was_killed; + int last_errno= -2; // impossible error + ulong err_count=0; char llbuff[22]; - // if we lost connection after reading a state set event - // we will be re-reading it, so pending needs to be cleared + /* + If we lost connection after reading a state set event + we will be re-reading it, so pending needs to be cleared + */ mi->pending = 0; #ifndef DBUG_OFF events_till_disconnect = disconnect_slave_event_count; #endif - while(!(slave_was_killed = slave_killed(thd)) && mc_mysql_reconnect(mysql)) + while (!(slave_was_killed = slave_killed(thd)) && mc_mysql_reconnect(mysql)) { - sql_print_error("Slave thread: error re-connecting to master:\ + /* Don't repeat last error */ + if (mc_mysql_errno(mysql) != last_errno) + { + sql_print_error("Slave thread: error re-connecting to master: \ %s, last_errno=%d, retry in %d sec", - mc_mysql_error(mysql), errno, mi->connect_retry); - safe_sleep(thd, mi->connect_retry); + mc_mysql_error(mysql), last_errno=mc_mysql_errno(mysql), + mi->connect_retry); + safe_sleep(thd, mi->connect_retry); + } + if (err_count++ == master_retry_count) + { + slave_was_killed=1; + break; + } } - if(!slave_was_killed) - { - sql_print_error("Slave: reconnected to master '%s@%s:%d',\ + if (!slave_was_killed) + { + sql_print_error("Slave: reconnected to master '%s@%s:%d',\ replication resumed in log '%s' at position %s", glob_mi.user, glob_mi.host, glob_mi.port, RPL_LOG_NAME, llstr(glob_mi.pos,llbuff)); #ifdef SIGNAL_WITH_VIO_CLOSE - thd->set_active_vio(mysql->net.vio); + thd->set_active_vio(mysql->net.vio); #endif - } + } return slave_was_killed; } diff --git a/sql/slave.h b/sql/slave.h index 5850b57d3b3..5c6772147b6 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -4,7 +4,7 @@ #include "mysql.h" #define SLAVE_NET_TIMEOUT 3600 -extern ulong slave_net_timeout; +extern ulong slave_net_timeout, master_retry_count; extern char* slave_load_tmpdir; typedef struct st_master_info |