Mysql指定部分数据同步
[db]
source_host=源端IP
source_port=源端端口
source_user=源端用户名
source_passwd=源端密码
dest_host=目标端用户名
dest_port=目标端端口
dest_user=目标端用户名
dest_passwd=目标端密码
# -*- coding: utf-8 -*-
# @Time : 2019-09-11 10:25
# @Author : Huangwenjun
# @Email : 350920551@qq.com
# @File : rsyncdata.py
# @Software: PyCharm
# @exe_location:
import pymysql
import configparser
import os
class RsyncData():
def __init__(self):
self.get_item()
self.mysql_host = self.item['source_host']
self.mysql_port = int(self.item['source_port'])
self.mysql_user = self.item['source_user']
self.mysql_pwd = self.item['source_passwd']
self.dest_host=self.item['dest_host']
self.dest_port=int(self.item['dest_port'])
self.dest_user = self.item['dest_user']
self.dest_pwd = self.item['dest_passwd']
self.conn_source() def get_item(self):
"""
读取配置文件信息
"""
cf = configparser.ConfigParser()
cf.read('db.conf', encoding='utf8')
config = {}
for db in cf.sections():
items = {}
for item in cf.items(db):
items[item[0]] = item[1]
config[db] = items
self.item = config['db'] def conn_source(self):
"""
连接源端数据库
"""
self.source_conn = pymysql.connect(host=self.dest_host, port=self.dest_port, user=self.dest_user,
passwd=self.dest_pwd, charset='utf8mb4') def execute_sql(self, conn, sql):
"""
执行sql
"""
curs = conn.cursor()
curs.execute(sql)
if sql.startswith('select'):
rows = curs.fetchall()
curs.close()
return rows
else:
curs.execute('commit')
curs.close() def close(self):
"""
关闭数据库连接
"""
self.source_conn.close() def backup_table(self,table_schema,table_name,is_com):
"""
备份表
:param table_schema: 数据库schema
:param table_name: 表名称
:param is_com: 是否包含company_id
"""
if is_com>=1:
backup_cmd="mysqldump -u%s -p%s -h %s -P %s --single-transaction %s %s --where='company_id=1'>%s.sql"%(self.mysql_user,self.mysql_pwd,self.mysql_host,self.mysql_port,table_schema,table_name,table_name)
else:
backup_cmd = "mysqldump -u%s -p%s -h %s -P %s --single-transaction %s %s>%s.sql" % (
self.mysql_user, self.mysql_pwd, self.mysql_host,self.mysql_port, table_schema, table_name, table_name)
os.system(backup_cmd) def mysql_import(self,table_schema,table_name):
"""
数据导入
:param table_schema: 数据库schema
:param table_name: 表名称
"""
import_cmd='mysql -u%s -p%s -h %s -P %s -D %s -e"source %s.sql"'%(self.dest_user,self.dest_pwd,self.dest_host,self.dest_port,table_schema,table_name)
print(import_cmd)
os.system(import_cmd) def run(self):
"""
执行入口
:return:
"""
#从源端获取库 表名称
sql="select table_schema,table_name,sum(case when column_name='company_id' then 1 else 0 end) company_id_count from information_schema.`COLUMNS` where TABLE_SCHEMA not in ('mysql','information_schema','performance_schema','sys') group by table_schema,table_name"
rows=self.execute_sql(self.source_conn,sql)
for row in rows:
table_schema=row[0]
table_name=row[1]
is_comid=row[2]
#数据备份
self.backup_table(table_schema,table_name,is_comid)
#数据导入
self.mysql_import(table_schema,table_name) if __name__ == '__main__':
rsync_data=RsyncData()
rsync_data.run()
rsync_data.close()
Mysql指定部分数据同步的更多相关文章
- redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)
一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...
- canal+mysql+kafka实时数据同步安装、配置
canal+mysql+kafka安装配置 概述 简介 canal译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 基于日志增量订阅和消费的业务包括 数 ...
- Mysql 主从服务器数据同步
安装2台windows Server 服务器,分别安装Mysql,配置环境变量,完成安装确认在CMD窗口可以使用Mysql命令 在Master服务器上创建同步账号,确保Slave服务器能访问Maste ...
- mysql 集群 数据同步
mysql集群配置在网站负载均衡中是必不可少的: 首先说下我个人准备的负载均衡方式: 1.通过nginx方向代理来将服务器压力分散到各个服务器上: 2.每个服务器中代码逻辑一样: 3.通过使用redi ...
- 转载:MySQL和Redis 数据同步解决方案整理
from: http://blog.csdn.net/langzi7758521/article/details/52611910 最近在做一个Redis箱格信息数据同步到数据库Mysql的功能. 自 ...
- Mysql、ES 数据同步
数据同步中间件 不足:不支持 ES6.X 以上.Mysql 8.X 以上 ime 标识最大时间 logstash全量.增量同步解决方案 https://www.elastic.co/cn/downlo ...
- Mysql和Redis数据同步策略
为什么对缓存只删除不更新 不更新缓存是防止并发更新导致的数据不一致. 所以为了降低数据不一致的概率,不应该更新缓存,而是直接将其删除, 然后等待下次发生cache miss时再把数据库中的数据同步到缓 ...
- mysql 存储过程 实现数据同步
数据库 表 发生变化,需要把2.0的表数据 同步到3.0库中去: -- 同步数据存储过程执行 -- 更新留言旧表数据到新表数据中 /*DEFINER:Vector*/ drop procedure i ...
- MySql触发器实现数据同步学习
触发器实现:(增.删.改操作事件触发数据单向同步)数据库触发器教程:https://www.cnblogs.com/phpper/p/7587031.html同步代码: DELIMITER $ DRO ...
随机推荐
- java-day09
接口 就是一种公共规范标准,只要符合规范标准,就可以大家通用,多个类的公告规范,引用数据类型 格式 public interface 接口名称{} 接口都能定义抽象方法 public abstract ...
- Django中static文件的引入
1. 在django project中创建 static文件夹 2.settings.py中配置要在 STATIC_URL = '/static/' 下边 STATICFILES_DIRS = [ ...
- nginx 配置文件备份 nginx.conf and vhosts
bogon:vhosts xingchong$ brew services restart nginx Stopping `nginx`... (might take a while) ==> ...
- css3 随记
1 让子元素对其的方式 box-pack 2 -webkit-text-size-adjust 解决字体大小失效问题http://www.frontopen.com/273.html 3 disp ...
- 常见的React面试题
1.redux中间件 答:中间件提供第三方插件的模式,自定义拦截 action -> reducer 的过程.变为 action -> middlewares -> reducer ...
- 0815NOIP模拟测试赛后总结
立个flag:今天一定改完最少两道题然后认认真真写题解. 8/16 upd:果然flag不要立太狠…… 赛时状态: 赛后的老师:这套题我就没想让你上100分. 120分的天皇大神撇了撇嘴. 众人:…… ...
- php中date() 函数
实例 格式化本地日期和时间,并返回格式化的日期字符串: <?php // Prints the day echo date("l") . "<br>&q ...
- LintCode刷题笔记-- A+B problem
标签: 位运算 描述 Write a function that add two numbers A and B. You should not use + or any arithmetic ope ...
- 04.如何升级扩展以支持Visual Studio 2019
更新.vsixmanifest 我们需要对.vsixmanifest文件进行一些更新.首先,我们必须更新支持的VS版本范围 <InstallationTarget> 这是一个版本,支持Vi ...
- spss-数据抽取-拆分与合并
spss-数据抽取-拆分与合并 数据抽取也成为数据拆分,是指保留.抽取原数据表中某些字段.记录的部分信息,形成一个新字段.新纪录.分为:字段拆分和随机抽样两种方法. 一:字段拆分 如何提取" ...