mò Œ»aCc@sÄdZdkZdkZdkZdkZdkZdkZdkZdkZdk Z dkZdk Z dk Z dZ dZ d„Zdfd„ƒYZdfd„ƒYZd fd „ƒYZdS( s3 MySQL contains several classes. Only one currently works. "Installer()". Installer will download and install MySQL with maste/slave or cluster combinations. It is currently only made for demonstration purposes and is not meant to be used in a production environment. If you can get the Master/Slave/Cluster instances working on one computer, all you have to do to get it to work on multiple computers is copy over the software, change the config files a little, and then start it up. Copyrighted by Mark E. Nielsen, 2004,2005 under the original GPL License. Nt4s 2005/10/27cCsZtiƒ\}}}dt|ƒGHdt|ƒGHdt|ƒGHti|||ƒGHdS(Ns exc_type = s exc_value = sexc_traceback = i(tsystexc_infottypetvaluet tracebacktstrt excepthook(RRR((tŠ/MAIN/chroot/Services/apache_tcu-inc/usr/local/apache_tcu-inc/virtual_hosts/www.tcu-inc.com/htdocs/Products/MySQL_Python/Version5/MySQL.pytExcepts tTestcBstZd„Zd„ZRS(NcCsdS(sB Test_Master_Slaves() is not finished. Used to test master/slaves.N((tself((RtTest_Master_Slaves"scCsdS(s: Test_Cluster() is not finished. Used to test the cluster.N((R ((Rt Test_Cluster%s(t__name__t __module__R R (((RR !s tUtilscBs/tZhd„Zd„Zd„Zd„ZRS(NcCsdS(N((R toptions((Rt__init__.scCsdS(N((R ((RtSlave_To_Master0scCsdS(N((R ((Rt Add_Slave3scCsdS(N((R ((RtAdd_Node5s(RRRRRR(((RR,s   t InstallercBsãtZdZhd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zdd„Zd„Zd„Zdd„Zgddd„Zd„Zeed„ZRS(s… This install mysql with master/slave and/or cluster installations. Installer takes one option called "options" which is a hash. cCs.||_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d |_ d |_ d |_d |_d |_d|_d|_d|_|i|_|i|_|i|_d|_d|_|iƒ}|iƒ}|i|i|i |_|id joti|_ndG|iGHdG|iGHd|idGHt|idƒ|_|i ƒ|_!t"i#dƒ|_$t"i#dƒ|_%t"i#dƒ|_&t"i#dƒ|_'t"i#dƒ|_(t"i#dƒ|_)t"i#dƒ|_*t"i#dƒ|_+t"i#d ƒ|_,t"i#d!ƒ|_-dS("Ntautos/usr/local/mysql_instancess/tmp/mysql_install.logs/tmp/mysql_install.log_erroriii NiRiðUiØYiÀ]tsfhttp://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-standard-5.0.15-linux-i686-glibc23.tar.gz/from/picksmysql-5.0.15.tar.gzs mysql-5.0.15s1ftp://ftp.orst.edu/pub/mysql/Downloads/MySQL-5.0/s/usr/local/mysql-instancess/usr/local/src/mysql_compilesWriting log file to: sWriting error log file to: s*NOTE: You can tail the logs like 'tail -f t'tat__MYSQL_FILE__t__MYSQL_COMPILE_DIR__t __FTP_DIR__t __PREFIX__t__COMPILE_HOME__t __M_PORT__t __S_PORT__t __MGM_PORT__t __DB_PORT__t __API_PORT__(.RR toriginal_optionst download_typetprefixtlogt log_errortmastertslavetclustert master_portt slave_porttcluster_management_porttcluster_db_porttcluster_api_porttnotestmysql_download_webpagetmysql_file_defaulttmysql_compile_dir_defaulttftp_dir_defaultt mysql_filetmysql_compile_dirtftp_dirt compile_hometDefine_VariablestresulttGet_Latest_Version_Infot instances_noRtstouttopent log_handlet Get_Templatest templatestretcompilet re_mysql_filetre_mysql_compile_dirt re_ftp_dirt re_prefixtre_compile_homet re_m_portt re_s_portt re_mgm_portt re_db_portt re_api_port(R RR<((RREsV                           cCsy|iiƒWnnXdS(N(R RAtclose(R ((Rt__del__™scCsDdt|iƒdt|iƒdt|iƒd|i}|S(NsMaster=s:Slave=s :Cluster=t:(RR R*R+R,R2tstr1(R RS((Rt__str__žs@cCs|iS(N(R R>(R tother((Rt__lt__¡scCs|iS(N(R R>(R RU((Rt__le__¢scCs|iS(N(R R>(R RU((Rt__gt__£scCs|iS(N(R R>(R RU((Rt__eq__¤scCs|iS(N(R R>(R RU((Rt__ne__¥scCs |id7_|idd|idƒdG|idGH|iid|idƒt|idd ƒ}|id }|i i |i |ƒ}|i i |i|ƒ}|ii |i|ƒ}|ii |i|ƒ}|ii |i|ƒ}|i|ƒ|iƒd S( sl Write_Compile_Script() takes no arguements. It simply compiles and install the binaries for mysql. scompile script written:tcommands mkdir -p s/scriptssCreating script:s/scripts/Compile.bashsWRITE:s/scripts/Compile.bash twREiN(R R2tCommandR:RAtwriteR@tWriteRCtTemplateRFtsubR7RGR8RHR9RIR'RJRP(R R_R`((RtWrite_Compile_Script©s   cCsG|id7_dGH|idd|idƒ}|dGH|dGHdS( sx Execute_Compile_Script() takes no arguements and just executes the compile script (which also installs mysql). s compiled:s)Compiling MySQL. This could take a while.R[sbash s/scripts/Compile.bash iiN(R R2R]R:R<(R R<((RtExecute_Compile_Script¿s  c(Csé|id7_dGHddg}tidƒ}tidƒ}%tidƒ}$tidƒ}tid ƒ}tid ƒ}tid ƒ}tid ƒ}tid ƒ}tidƒ}tidƒ}d|id}"d|id}d}d}!|idjo d}n|!dt|iƒd7}!|!d7}!d}|id}|idd|ƒ|id|}'dG|'GH|idd|'ƒ|idd|'dƒ|idd|'dƒ|idd|'ƒ|idd |'ƒ|idd!|'dƒ|$|!g|%|igg}|i||'gƒ|i||gƒ|i||'d"|gƒ|'d"|}|i d#|d$d%d&|ƒ|d'|}#|i d#|#d$d(d&|ƒ|d)|}|i d#|d$d*d&|ƒ|i#d+|'d"|ƒ|"d,|d-|#d.7}"|d/|d-|d.7}d0d1|id2|id3}&|&d4|d5|id6|'d"|d77}&t%|'d8d9ƒ}|i'd|id6|'d"|d:ƒ|i'|id6|'d"|d;ƒ|i'|id6|'d"|d<ƒ|i'|id6|'d"|d=ƒ|i(ƒxšt)d>|i*d>ƒD]‚} d?t| ƒ}|id|}'dG|'GH|idd|'ƒ|idd|'dƒ|idd|'dƒ|idd|'ƒ|idd |'ƒ|idd!|'dƒdt|i,| ƒd}|d7}|d@t| ƒd7}|dAt|i,| ƒd7}|$|g|%|igg}|i||'gƒ|i||gƒ|i||'d"|gƒ|i|i.t|iƒgƒ|'d"|}|i d#|d$dBd&|ƒ|d'|}#|i d#|#d$d(d&|ƒ|d)|}|i d#|d$d*d&|ƒ|i#d+|'d"|ƒ|"d,|d-|#d.7}"|d/|d-|d.7}|&d4|d5|id6|'d"|dC7}&q2W|i/djo=dD}|id|}'dG|'GH|idd|'ƒ|idd|'dƒ|idd|'dƒ|idd|'ƒ|idd |'ƒ|idd!|'dƒdt| |i0ƒd}|d@t| ƒd7}|&dE|idFt|i2ƒdC7}&tidGƒ} |$|g|%|igg}|i||'gƒ|i||gƒ|i||'d"|gƒ|i| t|i/dHƒgƒ|i|dIgƒ|i|t|i/|i*d>ƒgƒ|i|i4t|i2ƒgƒ|i|i.t|iƒgƒ|'d"|}|i d#|d$dJd&|ƒ|'dK}|i d#|d$dLd&|ƒ|"dM7}"|"dN7}"|i/|i*d>dH} | |i/}x±t)d>|i*|i/|i*d>ƒD]‡} dOt| ƒ} |id| } | dP}|"dQ|dRt| | ƒdSt|i2ƒdTt| | ƒdU|dVt| | ƒdWt|i2ƒdTt| | ƒdX7}"dG| GH|idd| ƒ|idd| dƒ|idd| dƒ|idd| ƒ|idd | ƒ|idd!| dƒ|%|igg}|i|| gƒ|i|| gƒ|i|t| | ƒgƒ|i|t|| ƒgƒ|i|i4t|i2ƒgƒ|i|i.t|iƒgƒ|i|i:t|i;| ƒgƒdY}|i d#|d$dZd&|ƒt%|d[ƒ}t%|d\ƒ} x| D]}|i'|ƒqÒ W|i(ƒ| i(ƒqv WnxÛt)d>|i*|i/|i*d>ƒD]µ} d]t| ƒ}|id|}'dG|'GH|idd|'ƒ|idd|'dƒ|idd|'dƒ|idd|'ƒ|idd |'ƒ|idd!|'dƒdt| |i0ƒd}|d7}|d@t| ƒd7}|$|g|%|igg}|i||'gƒ|i||gƒ|i||'d"|gƒ|i|td>|i/|i*d>dH| ƒgƒ|i|i4t|i2ƒgƒ|i|i.t|iƒgƒ|'d"|}|i d#|d$d^d&|ƒ|d'|}#|i d#|#d$d(d&|ƒ|d)|}|i d#|d$d*d&|ƒ|i#d+|'d"|ƒ|"d,|d-|#d.7}"|d/|d-|d.7}|&d4|d5|id6|'d"|dC7}&q* Wt%|id_d9ƒ}|i'd`|idCƒ|i'|"ƒ|i(ƒt%|idad9ƒ}|i'|ƒ|i'dbƒ|i'dcƒ|i'ddƒ|i'deƒ|i'dfƒ|i(ƒt%|idgd9ƒ}|i'|&ƒ|i(ƒdh|idi}|id|ƒGHdHS(ksSetup_Instances() takes no arguements. This installs the master/slave/cluster instances of mysql. This will create separate data directories for each instance. It will also create a cnf file for each instance. It will initialize the instances. smaster/slave configed:sSetting up the instances.tdatattmpt __INSTANCE__Rt __EXTRA__t__INSTANCE_DIR__t__INSTANCE_CNF__R#t __DB_ID__t__NO_REPLICAS__R$t __API_ID__t __MGM_ID__s cd s Ris2log-bin=__PREFIX__/instance/__INSTANCE__/main_log sport=s server-id=1 tmaster1s/control_scriptsR[s mkdir -p s /instance/s Setting up:s/datas/tmpschown -R mysql schown -R mysql.mysql s chmod 700 s/my.cnf_tfilettemplates my.cnf_mastertre_lists/Start_tstarts/Stop_tstoptcnfsecho Starting s bash s secho Stopping s export PATH=t"s/bin:s/scripts:$PATH" s alias mysql_s='s/bin/mysql --defaults-file=s --local-infile=1' s/first_run.bashR\sL -e "GRANT REPLICATION SLAVE ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY ''" s! -e "create database test_slave" s2 -e "create table table1 (text1 text)" test_slave s4 -e "insert into table1 values ('data')" test_slave iR+s server-id=s report-port=s my.cnf_slaves' tcluster_managementsalias ndb_mgm='s/bin/ndb_mgm 127.0.0.1 t__CLUSTER_NO__it2smy.cnf_cluster_managements/config.ini_cluster_managementsconfig.ini_mgms echo Starting cluster ndb_mgmd. slsu mysql -c './libexec/ndb_mgmd --config-file=./instance/cluster_management/config.ini_cluster_management' t cluster_ndbs /initializeds if [ ! -e 's<' ]; then echo '' echo Initializing cluster s= su mysql -c './libexec/ndbd --initial -c 127.0.0.1:s:id=s' touch s& else echo Starting cluster dbs2 su mysql -c './libexec/ndbd -c 127.0.0.1:s' fi s/tmp/db_temp.cnfs config.ini_dbRtrtcluster_mysqldsmy.cnf_cluster_dbs/Startsexport mysql_prefix='s/Stops%echo Killing ndbd and then ndb_mgmd. skillall ndbd; sleep 2 skillall -q -9 ndbd; sleep 2 skillall ndb_mgmd; sleep 2 s killall -q -0 ndb_mgmd; sleep 2 s /bash_aliasess chmod 755 s/*N(?R R2tDirsRDREt Re_Instancet Re_PrefixtRe_ExtratRe_Instance_DirtRe_Instance_Cnft Re_DB_PorttRe_DB_IDtRe_NO_Replicast Re_API_Portt Re_API_IDt Re_MGM_IDR'tStart_File_TexttStop_File_Textt Mysql_Aliast Extra_MasterR*tExtraRR-tInstancet Control_DirR]t Instance_DirRqtappendtFiletWrite_Templatet Start_Filet Stop_Filet Init_Instancet MySQL_AliasR@R_R^RPtrangeR+tnoR.tS_ExtraRKR,R1tC_ExtraR/t Re_Cluster_NoRMtMax_NotMax_No2t Instance2t Instance_Dir2t Init_FileRNR0tF2tReadtLine((R R„RRƒRR_R…R‰R|R˜R¢RŸR›RžR}R™R£R‚R‘R R‡R]R”R†RŠR€R¡RŒRRšRŽRqRœR‹RˆR“RR~R–R((RtSetup_InstancesÌs†      -($$$   1 & '    % „ # %  31           c CsÈd|id}|id|ƒ|id|id} |idt|iƒ}t|iddƒ}|i d ƒ|i |d ƒ|i ƒt|id dƒ}|i d ƒ|i d ƒ|i d ƒ|i | dƒ|i | dƒ|i | dƒ|i ƒt|iddƒ}|i d ƒ|i d ƒ|i dƒxet d|i dƒD]M}|i d ƒ|i dt|ƒd ƒ|i | dt|ƒdƒq_W|i ƒt|iddƒ}|i d ƒ|i d ƒ|i dƒ|i |idƒ|i |idƒ|i ƒt|iddƒ}|i d ƒ|i | dƒ|i | dƒ|i d ƒx^t d|i dƒD]F}dt|ƒ}|id|}|i | d t|ƒd!ƒq’W|i d"ƒ|i d#ƒ|i | d$ƒxXt d|i dƒD]@}|i d%t|ƒd&ƒ|i | dt|ƒd'ƒqW|i d(t|i d)ƒd*ƒ|i ƒt|id+dƒ}|i d ƒxÅt d|i |i|i dƒD]Ÿ}dt|ƒ}|id|}|i d ƒ|i | d,t|ƒd-ƒ|i | d,t|ƒd.ƒ|i | d,t|ƒd/t|ƒd0ƒqÖWd|i }|i}|i d ƒ|i d1t|ƒd2ƒ|i d3ƒ|i | d,t|ƒd4ƒ|i d5ƒ|i|i dd)}xt d|i |i|i dƒD]g}dt|ƒ}|id|}|i d ƒ|i |id6t|iƒd7t||ƒd8ƒ|i d1t|ƒd2ƒ|i d3ƒ|i d9t|ƒd:t||ƒd;ƒ|i | d,t|ƒd4ƒ|i |id<t|iƒd=t||ƒd ƒ|i d>ƒ|i |id6t|iƒd7t||ƒd?ƒ|i d@ƒq-W|i ƒdA|idB}|id|ƒGHdS(CNs mkdir -p s/scriptsR[s/bin/mysql -S s /instances(/bin/ndb_mgm --connect-string=127.0.0.1:s/scripts/Cluster_Status.bashR\s s -e show s/scripts/Master_Status.bashsecho secho Status for master. s%/master1/mysql.sock -e 'show status' s*/master1/mysql.sock -e 'show processlist' s,/master1/mysql.sock -e 'show master status' s/scripts/Slave_Status.bashsecho Status for slaves isecho Status for slaves/slaves%/mysql.sock -e 'show slave status\G' s!/scripts/Master_Slave_Status.bashs(echo Status for slaves and then master. s/scripts/Slave_Status.bash s/scripts/Master_Status.bash s/scripts/Master_Slave_Test.bashsE/master1/mysql.sock -v -e 'create database if not exists test_slave' sP/master1/mysql.sock -v -e 'CREATE TABLE if not exists ctest (i INT)' test_slave R{s /instance/s5/master1/mysql.sock -v -e 'insert into ctest values (s)' test_slave s!echo sleeping 2 seconds. sleep 2 secho Getting data from master. sy/master1/mysql.sock -e 'select distinct(i) as slave_no, count(i) as inserts from ctest group by i order by i' test_slave secho Getting data from slaves. sq/mysql.sock -e 'select distinct(i) as slave_no, count(i) as inserts from ctest group by i order by i' test_slave s echo All is" tables should be the same below. s/scripts/Cluster_Test.bashs/cluster_mysqlds?/mysql.sock -v -e 'create database if not exists test_cluster' s\/mysql.sock -v -e 'CREATE TABLE if not exists ctest (i INT) ENGINE=NDBCLUSTER' test_cluster s-/mysql.sock -v -e 'insert into ctest values (s)' test_cluster secho There should be s& distinct entries in the table below. s*echo Each mysqld node entered its own id. s{/mysql.sock -v -e 'select distinct(i) as mysqld_server, count(i) as inserts from ctest group by i order by i' test_cluster s2echo Shutting down each storage node and testing. s/bin/ndb_mgm 127.0.0.1 s -e 's stop' s%echo Getting data from cluster_mysqlds when storage node s is down. s%/libexec/ndbd --nostart -c 127.0.0.1:s:id=s!echo Sleeping 3 seconds. sleep 3 s start' s!echo Sleeping 5 seconds. sleep 5 s chmod 755 s /scripts/*(R R'R]tMysqlRR/tNDB_MGMR@R_R^RPR—R+R˜RžRŸR,tRangeRœ( R RžR¦R˜RŸR§RœR_R]R¥((RtCreate_Test_Scriptsés®          #       #  #"  % 1     % 7 -7 7 cCs dGH|idd|idƒS(Ns6Starting the mysql services. This could take a minute.R[sbash s/Start(R R]R'(R ((RtStart_InstancesRscCs dGH|idd|idƒS(Ns2Stopping mysql services. This could take a minute.R[sbash s/Stop(R R]R'(R ((RtStop_InstancesWsRcCsd|GH|id|}|id|ƒ}|ddjo |GHn|ii|dƒd|id}|id|ƒ}|S(NsInitializing: s&/bin/mysql_install_db --defaults-file=R[iischown -R mysql s /instance(RtR R'R]tResultRAR^(R RtR]R«((RR•]s  c Cs‹d}|id7_tidƒ}|i}t|i ƒƒdjoºg}h}d} dddd d d d d ddddg }ytid}WnnXyti|| |ƒ\}} Wn|GHtiƒnXx|D]\}} | ||> s 2>> i<sTIME:s minutes. s RESULT NO:isRESULT:iN(ttimet start_timeR RAR^RR[R@R)tlog_handle_errorRPR(tlogstcommandstgetstatusoutputR«t stop_timeR¾t time_diffRS(R R[RSRÒR«RÖRÐRÕ((RR]*s" &&   ""c Csnt|dƒ}|i|}x4|D],}|d}|d}|i ||ƒ}q#W|i |ƒ|i ƒdS(NR\ii(R@RoR_R RCRpR£RqtItemtRetValueRaR^RP( R RqRoRpRØRÙR_R×R£((RR’Hs    cCs¦tidƒ}tidƒ}tidƒ}tidƒ}d}d}|i d|ƒ}g}|D]!}|i |ƒo ||qeqe~}||did ƒd id ƒd} |i d| ƒ} g}| D]!}|i |ƒo ||qÔqÔ~}|did ƒ}g}|D]!}|i |ƒo ||qq~}g} xX|D]P}y@|id ƒ}|d id ƒ}|dGH| i|dƒWqSqSXqSWd} d} xÍ| D]Å}| djoqºny¡||} |idƒ}|d idƒd|_dG|iGH|id|iƒ|_d|i|_|i d|i}|i d| d|ƒ}| d 7} WqºqºXqºW|i|i|i#t$i%ƒdS(sÔGet_Latest_Version_Info attempts to get the latest mysql version info from the MySQL website. Args: None. Returns: None Results: Some internal variables get changed. tTarballs Mirrors in:shref="/get/Downloads/s.tar.gz$shttp://dev.mysql.coms-http://dev.mysql.com/downloads/mysql/5.0.htmlturlishref="iRuss