python mysql 导库,加入主从同步集群

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

[[email protected] 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!!!!!!!!!!!"

时间: 2024-10-12 21:26:45

python mysql 导库,加入主从同步集群的相关文章

MySQL的3节点主从同步复制方案测试

上接<MySQL的3节点主从同步复制方案> 六.测试主从同步复制 现在我们来测试下,mysql的主从同步. 1.在主库插入测试数据 先在主库MasterA 上给m_s_rep数据库插入和删除2条数据.如下: mysql> insert into test(id,content) values(3,'data3'); mysql> insert into test(id,content) values(2,'data2'); mysql> select * from test;

LVS+Keepalived+Squid+Nginx+MySQL主从 高性能集群架构配置

原文地址:LVS+Keepalived+Squid+Nginx+MySQL主从 高性能集群架构配置 作者:gron 原文链接:http://www.linuxidc.com/Linux/2012-07/65547.htm 架构图 先进行优化 vi /etc/sysctl.conf   # 编辑sysctl.conf文件添加以下内容 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 65536 4194304 net.c

LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案

方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor=50 worker.tomcat.cachesize=10 worker.tomcat.cache_timeout=600 worker.tomcat.socket_keepalive=1 worker.tomcat.socket_timeout=300 Linux内核优化: vi /etc/sysctl.conf   # 编辑sysctl.conf文件添加以下内容net.

MyCAT+MySQL 搭建高可用企业级数据库集群

第1章 课程介绍课程介绍1-1 MyCAT导学 试看1-2 课程介绍 第2章 MyCAT入门这一章中,我们将回顾了垂直切分,水平切分,分库分表等基础概念,然后快速回如何安装和启动MyCAT的,介绍如何以打包好的可执行程序的方式来启动MyCAT.以及如何对其相关的启动配置文件进行配置.2-1 章节综述2-2 什么是MyCAT2-3 什么是数据库中间层2-4 MyCAT的主要作用2-5 MyCAT基本元素2-6 MyCAT安装 第3章 MYCAT核心配置详解本章将对MyCAT的常用核心配置文件ser

redis单点、主从、集群cluster配置搭建与使用

目录 redis单点.主从.集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作redis 1.1.3 使用jedis客户端操作redis 1.1.4 使用spring-redis操作 1.2 redis 主从 1.3 哨兵sentinel 1.3.2 哨兵sentinel配置 1.3.3 启动哨兵,使用jedis连接哨兵操作redis 1.3.4 编写程序&运行 1.3.5模拟主节点宕机情况 1.4 redis cluster 1

使用 ZooKeeper 同步集群配置

用 ZooKeeper 同步集群配置,当需要修改所有节点配置时,将配置更新到 ZooKeeper 的一个节点,引起这个节点数据发生变化, 其他所有需要同步配置的节点上的本地 Watcher 会立即发现节点状态的变化,并将最新数据更新到本地 把官方Demo 改了改,响应 Watcher 时用 ConfFileUtil 更新一下本地配置就可以了 [java] view plaincopyprint? public class Executor implements Watcher, Runnable

Tomcat7 session同步集群搭建

Tomcat session同步集群搭建 一.如何保持session会话 为了使web能适应大规模的访问,需要实现应用的集群部署.集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需要实现session的共享机制. 因为我这边提供web服务的是两台Tomcat服务器,也会有session共享的议题存在,经过与开发人员的交谈中了解到,他们应用的sessi

redis 主从备份服务器集群搭建

redis 主从备份服务器集群 由于redis是要自己手动编译的,我就不折腾了,刚好手上有windown 64位的,就拿来练练手,等哪天在服务器上搭建项目了再弄, 启动命令:redis-server  --port  端口 在window  下启动4个redis-server  服务,端口分别为:1000,2000,3000,4000,  这样也相当于开了4台redis 数据库服务器, 现在使用  redis-cli  -host server_ip  -p  端口   连接对应的服务器 注:

Linux服务器集群架构部署搭建(六)数据库服务器MySQL编译安装及主从同步配置(1)

命运是大海,当你能够畅游时,你就要纵情游向你的所爱,因为你不知道狂流什么会到来,卷走一切希望与梦想. 作者:燁未央_Estelle声明:测试学习,不足之处,欢迎指正. 第一章 数据库企业应用场景 1.1 数据库的企业应用 MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言.MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小.速度快.总