python mysql导库加入主从同步集群实例介绍
脚本可以在任意机器上执行(需要安装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!!!!!!!!!!!"
Atas ialah kandungan terperinci python mysql导库加入主从同步集群实例介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam masa 10 jam? Sekiranya anda hanya mempunyai 10 jam untuk mengajar pemula komputer beberapa pengetahuan pengaturcaraan, apa yang akan anda pilih untuk mengajar ...

Cara mengelakkan dikesan semasa menggunakan fiddlerevery di mana untuk bacaan lelaki-dalam-pertengahan apabila anda menggunakan fiddlerevery di mana ...

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Bagaimanakah Uvicorn terus mendengar permintaan HTTP? Uvicorn adalah pelayan web ringan berdasarkan ASGI. Salah satu fungsi terasnya ialah mendengar permintaan HTTP dan teruskan ...

Fastapi ...

Di Python, bagaimana untuk membuat objek secara dinamik melalui rentetan dan panggil kaedahnya? Ini adalah keperluan pengaturcaraan yang biasa, terutamanya jika perlu dikonfigurasikan atau dijalankan ...

Menggunakan Python di Terminal Linux ...
