视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
pythonmysql导库加入主从同步集群实例介绍
2020-11-27 14:25:01 责编:小采
文档


脚本可以在任意机器上执行(需要安装mysql,至少是mysql客户端,mysql只能版本为5.6及以上),首先输入源ip,检测源ip上的mysql是否正常运行,再在本机dump mysql数据库,然后将dump文件传输到目的服务器,在目的服务器上导入数据库,最后把从库加入到现用集群中。

[root@master test]# cat finaly_mysql.py

#!/usr/bin/env python

#-*- coding: utf-8 -*-

import MySQLdb, socket, paramiko,sys, os,datetime, time

sour_db=raw_input('please input the source mysql database ip:')

dest_db=raw_input('please input the destination mysql database ip:')

password=raw_input('please input the sour_db root users password :')

def check_port(ip,port):

print "test whether source mysql db is running!"

res=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

res.settimeout(3)

try:

res.connect((ip,port))

print 'Server port 3306 OK!'

print("\033[41;36m Server port 3306 OK! \033[0m")

except Exception,e:

print Exception,":",e

print "break this program"

sys.exit()

res.close()

#查看源库的3306端口是否正常

def begin_dump():

print "begin dump remote mysql,please waiting...!"

print("\033[41;36m begin dump remote mysql,please waiting...! \033[0m")

hostname=sour_db

username='root'

dump='mysqldump -uroot -pXp29at5F37 -h 192.168.3.10 -A -B > /tmp/dump.sql && echo $? '

if os.popen(dump).read().strip() == '0':

print "dump result is 0,means dump success"

print("\033[41;36m dump result is 0,means dump success \033[0m")

else:

print "\033[1;31;40m%s\033[0m" % "dump error,exit python file"

sys.exit()

#从本地 dump数据库文件

def trans_dump():

print " "

local_dir='/tmp'

remote_dir='/tmp'

dest_dir='/tmp'

print " "

print "begin transfer mysql dump file from local server to destination mysql database server ,please waiting...!"

try:

t=paramiko.Transport((dest_db,22))

t.connect(username='root',password=password)

sftp=paramiko.SFTPClient.from_transport(t)

files='dump.sql'

print "\033[1;32;40m%s\033[0m" % "transfer back file,Please wait ...."

print ' Beginning to transfer file to %s %s ' % (dest_db,datetime.datetime.now())

print ' Transfering file:',dest_db + ':' + os.path.join(local_dir,files)

sftp.put(os.path.join(local_dir,files),os.path.join(dest_dir,files))

t.close()

print ' transfer All dump file success %s ' % datetime.datetime.now()

except Exception,e:

print Exception,"\033[1;31;40m%s\033[0m" % ":", "\033[1;31;40m%s\033[0m" % e

sys.exit()

#将数据库文件从本地传输到目的服务器,即dest_db

def import_dump():

conn=MySQLdb.connect(host=dest_db,user='root',passwd='Xp29at5F37',db='test')

cur1=conn.cursor()

cur1.execute("stop slave;")

cur1.close()

cur2=conn.cursor()

cur2.execute("reset master;")

cur2.close()

cur3=conn.cursor()

cur3.execute("reset slave all;")

cur3.close()

conn.close()

print " "

print "begin to import mysql dump file ,please waiting...!"

local_dir='/tmp'

remote_dir='/tmp'

dest_dir='/tmp'

import_command = "mysql -uroot -pleyou < /tmp/dump.sql"

print ' begin import dump file ,it may take a long time, please be patient !!!'

try:

ssh =paramiko.SSHClient ()

ssh.load_system_host_keys ()

ssh.connect (hostname =dest_db,username ='root',password =password)

stdin, stdout, stderr = ssh.exec_command (import_command)

print stderr.read ()

ssh.close ()

except Exception,e:

print Exception,":",e

print "import over"

#导入之前先将dest_db的slave 都停掉,因为不知道dest_db的状态,可能之前是个主库,也可能是其他机子的从库。

def final_check_mysql ():

print " "

print "finally check mysql service "

status = True

try:

conn=MySQLdb.connect(host=dest_db,user='root',passwd='Xp29at5F37',db='test')

cur1=conn.cursor()

cur1.execute("CHANGE MASTER TO MASTER_HOST='192.168.3.10', MASTER_USER='root', MASTER_PASSWORD='Xp29at5F37', MASTER_AUTO_POSITION=1;")

cur1.close()

cur3=conn.cursor()

cur3.execute("start slave;")

cur3.close()

print "sleep 10 seconds;"

time.sleep(10)

cur2=conn.cursor()

cur2.execute("show slave status;")

result = cur2.fetchall()

io_thread= result[0][10]

sql_thread= result[0][11]

print io_thread,sql_thread

if io_thread == "Yes" and sql_thread == "Yes":

print 'MySQL master/slave replication status is successfully'

else:

print 'MySQL Master/Slave replication fail,Please check it'

cur2.close()

conn.close()

except Exception,e:

print Exception,"\033[1;31;40m%s\033[0m" % ":", "\033[1;31;40m%s\033[0m" % e

status = True

return status

#最后检查新从库的运行状态,同步是否正常

if __name__ == "__main__":

a=check_port(sour_db,3306)

b=begin_dump()

c=trans_dump()

d=import_dump()

e=final_check_mysql()

print "dump file ok!!!!!!!!!!!"

下载本文
显示全文
专题