Rumah pembangunan bahagian belakang Tutorial Python python mysql导库加入主从同步集群实例介绍

python mysql导库加入主从同步集群实例介绍

Mar 22, 2017 am 10:06 AM

脚本可以在任意机器上执行(需要安装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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Apr 01, 2025 pm 05:09 PM

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 Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam? Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam? Apr 02, 2025 am 07:18 AM

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 ...

Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah? Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah? Apr 02, 2025 am 07:15 AM

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

Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Apr 01, 2025 pm 11:15 PM

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 tanpa serving_forever ()? Bagaimanakah uvicorn terus mendengar permintaan http tanpa serving_forever ()? Apr 01, 2025 pm 10:51 PM

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

Bagaimana secara dinamik membuat objek melalui rentetan dan panggil kaedahnya dalam Python? Bagaimana secara dinamik membuat objek melalui rentetan dan panggil kaedahnya dalam Python? Apr 01, 2025 pm 11:18 PM

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 ...

See all articles