10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.1 mb
PDF (A4)- 41.2 mb
PDF (RPM)- 39.8 mb
HTML下载(TGZ)- 9.5 mb
HTML下载(Zip)- 9.6 mb
HTML下载(RPM)- 8.1 mb
手册页(TGZ)- 260.6 kb
手册页(Zip)- 371.7 kb
信息(Gzip)- 3.9 mb
信息(邮政编码)- 3.9 mb
本手册节选

23.6.9.1 NDB集群复制:自动同步副本到源二进制日志

可以将前一节中描述的大部分过程自动化(参见第23.6.9节,“带NDB集群复制的NDB集群备份”).下面的Perl脚本reset-replica.pl作为如何做到这一点的一个例子。

#!/user/bin/perl -w # file: reset-replica.pl # Copyright (c) 2005, 2020, Oracle and/or its affiliates. All rights reserved. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to: # Free Software Foundation, Inc. # 59 Temple Place, Suite 330 # Boston, MA 02111-1307 USA # # Version 1.1 ######################## Includes ############################### use DBI; ######################## Globals ################################ my $m_host=''; my $m_port=''; my $m_user=''; my $m_pass=''; my $s_host=''; my $s_port=''; my $s_user=''; my $s_pass=''; my $dbhM=''; my $dbhS=''; ####################### Sub Prototypes ########################## sub CollectCommandPromptInfo; sub ConnectToDatabases; sub DisconnectFromDatabases; sub GetReplicaEpoch; sub GetSourceInfo; sub UpdateReplica; ######################## Program Main ########################### CollectCommandPromptInfo; ConnectToDatabases; GetReplicaEpoch; GetSourceInfo; UpdateReplica; DisconnectFromDatabases; ################## Collect Command Prompt Info ################## sub CollectCommandPromptInfo { ### Check that user has supplied correct number of command line args die "Usage:\n reset-replica >source MySQL host< >source MySQL port< \n >source user< >source pass< >replica MySQL host< \n >replica MySQL port< >replica user< >replica pass< \n All 8 arguments must be passed. Use BLANK for NULL passwords\n" unless @ARGV == 8; $m_host = $ARGV[0]; $m_port = $ARGV[1]; $m_user = $ARGV[2]; $m_pass = $ARGV[3]; $s_host = $ARGV[4]; $s_port = $ARGV[5]; $s_user = $ARGV[6]; $s_pass = $ARGV[7]; if ($m_pass eq "BLANK") { $m_pass = '';} if ($s_pass eq "BLANK") { $s_pass = '';} } ############### Make connections to both databases ############# sub ConnectToDatabases { ### Connect to both source and replica cluster databases ### Connect to source $dbhM = DBI->connect( "dbi:mysql:database=mysql;host=$m_host;port=$m_port", "$m_user", "$m_pass") or die "Can't connect to source cluster MySQL process! Error: $DBI::errstr\n"; ### Connect to replica $dbhS = DBI->connect( "dbi:mysql:database=mysql;host=$s_host", "$s_user", "$s_pass") or die "Can't connect to replica cluster MySQL process! Error: $DBI::errstr\n"; } ################ Disconnect from both databases ################ sub DisconnectFromDatabases { ### Disconnect from source $dbhM->disconnect or warn " Disconnection failed: $DBI::errstr\n"; ### Disconnect from replica $dbhS->disconnect or warn " Disconnection failed: $DBI::errstr\n"; } ###################### Find the last good GCI ################## sub GetReplicaEpoch { $sth = $dbhS->prepare("SELECT MAX(epoch) FROM mysql.ndb_apply_status;") or die "Error while preparing to select epoch from replica: ", $dbhS->errstr; $sth->execute or die "Selecting epoch from replica error: ", $sth->errstr; $sth->bind_col (1, \$epoch); $sth->fetch; print "\tReplica epoch = $epoch\n"; $sth->finish; } ####### Find the position of the last GCI in the binary log ######## sub GetSourceInfo { $sth = $dbhM->prepare("SELECT SUBSTRING_INDEX(File, '/', -1), Position FROM mysql.ndb_binlog_index WHERE epoch > $epoch ORDER BY epoch ASC LIMIT 1;") or die "Prepare to select from source error: ", $dbhM->errstr; $sth->execute or die "Selecting from source error: ", $sth->errstr; $sth->bind_col (1, \$binlog); $sth->bind_col (2, \$binpos); $sth->fetch; print "\tSource binary log file = $binlog\n"; print "\tSource binary log position = $binpos\n"; $sth->finish; } ########## Set the replica to process from that location ######### sub UpdateReplica { $sth = $dbhS->prepare("CHANGE MASTER TO MASTER_LOG_FILE='$binlog', MASTER_LOG_POS=$binpos;") or die "Prepare to CHANGE MASTER error: ", $dbhS->errstr; $sth->execute or die "CHANGE MASTER on replica error: ", $sth->errstr; $sth->finish; print "\tReplica has been updated. You may now start the replica.\n"; } # end reset-replica.pl