日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python實現MySQL指定表增量同步數據到clickhouse的腳本

瀏覽:168日期:2022-06-27 09:17:01

python實現MySQL指定表增量同步數據到clickhouse,腳本如下:

#!/usr/bin/env python3# _*_ coding:utf8 _*_ from pymysqlreplication import BinLogStreamReaderfrom pymysqlreplication.row_event import (DeleteRowsEvent,UpdateRowsEvent,WriteRowsEvent,)import clickhouse_driverimport configparserimport os configfile=’repl.ini’########## 配置文件repl.ini 操作 ##################def create_configfile(configfile,log_file,log_pos): config = configparser.ConfigParser() if not os.path.exists(configfile): config[’replinfo’] = {’log_file’:log_file,’log_pos’:str(log_pos)} with open(configfile,’w+’) as f: config.write(f) ### repl.ini 寫操作 ##################def write_config(configfile,log_file,log_pos): config = configparser.ConfigParser() config.read(configfile) config.set(’replinfo’,’log_file’,log_file) config.set(’replinfo’,’log_pos’,str(log_pos)) if os.path.exists(configfile): with open(configfile,’w+’) as f: config.write(f) else: create_configfile(configfile) ### 配置文件repl.ini 讀操作 ##################def read_config(configfile): config = configparser.ConfigParser() config.read(configfile) # print(config[’replinfo’][’log_file’]) # print(config[’replinfo’][’log_pos’]) return (config[’replinfo’][’log_file’],int(config[’replinfo’][’log_pos’])) ############# clickhouse 操作 ##################def ops_clickhouse(db,table,sql): column_type_dic={} try: client = clickhouse_driver.Client(host=’127.0.0.1’, port=9000, user=’default’, password=’clickhouse’) # sql='select name,type from system.columns where database=’{0}’ and table=’{1}’'.format(db,table) client.execute(sql) except Exception as error: message = '獲取clickhouse里面的字段類型錯誤. %s' % (error) # logger.error(message) print(message) exit(1) MYSQL_SETTINGS = {’host’:’127.0.0.1’,’port’:13306,’user’:’root’,’passwd’:’Root@0101’}only_events=(DeleteRowsEvent, WriteRowsEvent, UpdateRowsEvent)def main(): ## 每次重啟時,讀取上次同步的log_file,log_pos (log_file,log_pos) = read_config(configfile) # print(log_file+’|’+ str(log_pos)) print(’-----------------------------------------------------------------------------’) stream = BinLogStreamReader(connection_settings=MYSQL_SETTINGS, resume_stream=True, blocking=True, server_id=10, only_tables=’t_repl’, only_schemas=’test’, log_file=log_file,log_pos=log_pos, only_events=only_events, fail_on_table_metadata_unavailable=True, slave_heartbeat=10) try: for binlogevent in stream: for row in binlogevent.rows:## delete操作if isinstance(binlogevent, DeleteRowsEvent): info = dict(row['values'].items()) # print('DELETE FROM `%s`.`%s` WHERE %s = %s ;' %(binlogevent.schema ,binlogevent.table,binlogevent.primary_key,info[binlogevent.primary_key]) ) # print('ALTER TABLE `%s`.`%s` DELETE WHERE %s = %s ;' %(binlogevent.schema ,binlogevent.table,binlogevent.primary_key,info[binlogevent.primary_key]) ) sql='ALTER TABLE `%s`.`%s` DELETE WHERE %s = %s ;' %(binlogevent.schema ,binlogevent.table,binlogevent.primary_key,info[binlogevent.primary_key]) ## update 操作elif isinstance(binlogevent, UpdateRowsEvent): info_before = dict(row['before_values'].items()) info_after = dict(row['after_values'].items()) # info_set = str(info_after).replace(':','=').replace('{','').replace('}','') info_set = str(info_after).replace(':', '=').replace('{', '').replace('}', '').replace('’','') # print('UPDATE `%s`.`%s` SET %s WHERE %s = %s ;'%(binlogevent.schema,binlogevent.table,info_set,binlogevent.primary_key,info_before[binlogevent.primary_key] ) ) # print('ALTER TABLE %s.%s UPDATE %s WHERE %s = %s ;'%(binlogevent.schema,binlogevent.table,info_set,binlogevent.primary_key,info_before[binlogevent.primary_key] ) ) sql = 'ALTER TABLE %s.%s UPDATE %s WHERE %s = %s ;'%(binlogevent.schema,binlogevent.table,info_set,binlogevent.primary_key,info_before[binlogevent.primary_key] ) ## insert 操作elif isinstance(binlogevent, WriteRowsEvent): info = dict(row['values'].items()) # print('INSERT INTO %s.%s(%s)VALUES%s ;'%(binlogevent.schema,binlogevent.table , ’,’.join(info.keys()) ,str(tuple(info.values())) ) ) sql = 'INSERT INTO %s.%s(%s)VALUES%s ;'%(binlogevent.schema,binlogevent.table , ’,’.join(info.keys()) ,str(tuple(info.values())) )ops_clickhouse(’test’, ’t_repl’,sql ) # 當前log_file,log_pos寫入配置文件write_config(configfile, stream.log_file, stream.log_pos) except Exception as e: print(e) finally: stream.close() if __name__ == '__main__': main() ’’’BinLogStreamReader()參數ctl_connection_settings:集群保存模式信息的連接設置resume_stream:從位置或binlog的最新事件或舊的可用事件開始log_file:設置復制開始日志文件log_pos:設置復制開始日志pos(resume_stream應該為true)auto_position:使用master_auto_position gtid設置位置blocking:在流上讀取被阻止only_events:允許的事件數組ignored_events:被忽略的事件數組only_tables:包含要觀看的表的數組(僅適用于binlog_format ROW)ignored_tables:包含要跳過的表的數組only_schemas:包含要觀看的模式的數組ignored_schemas:包含要跳過的模式的數組freeze_schema:如果為true,則不支持ALTER TABLE。速度更快。skip_to_timestamp:在達到指定的時間戳之前忽略所有事件。report_slave:在SHOW SLAVE HOSTS中報告奴隸。slave_uuid:在SHOW SLAVE HOSTS中報告slave_uuid。fail_on_table_metadata_unavailable:如果我們無法獲取有關row_events的表信息,應該引發異常slave_heartbeat:(秒)主站應主動發送心跳連接。這也減少了復制恢復時GTID復制的流量(在許多事件在binlog中跳過的情況下)。請參閱mysql文檔中的MASTER_HEARTBEAT_PERIOD以了解語義’’’

知識點擴展:

MySQL備份-增量同步

mysql增量同步主要使用binlog文件進行同步,binlog文件主要記錄的是數據庫更新操作相關的內容。

1. 備份數據的意義

針對不同業務,7*24小時提供服務和數據的重要性不同。數據庫數據是比較核心的數據,對企業的經營至關重要,數據庫備份顯得尤為重要。

2. 備份數據庫

MySQL數據庫自帶的備份命令 `mysqldump`,基本使用方法:語法:`mysqldump -u username -p password dbname > filename.sql`

執行備份命令

`mysqldump -uroot -pmysqladmin db_test > /opt/mysql_bak.sql`

查看備份內容

`grep -v '#|*|--|^$' /opt/mysql_bak.sql`

到此這篇關于python實現MySQL指定表增量同步數據到clickhouse的腳本的文章就介紹到這了,更多相關python實現MySQL增量同步數據內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品88| 国产亚洲欧美日韩精品一区二区三区| 亚洲免费婷婷| 丝袜国产日韩另类美女| 久久久人人人| 日韩精品一区二区三区免费观影 | 韩日一区二区| 亚洲va在线| 国产精品久久久久9999高清| 精品国产乱码久久久久久1区2匹| 久久精品主播| 成人台湾亚洲精品一区二区| 亚州av一区| 欧美精品高清| 国产欧美一区二区精品久久久 | 亚洲精品自拍| 欧美精品aa| 午夜日韩福利| 国产视频一区三区| 亚洲精品自拍| 精品三区视频| 黄色国产精品| 日韩精品免费一区二区夜夜嗨| 欧美日韩99| 成人日韩精品| 亚洲综合激情在线| 日韩av在线播放网址| 亚洲一区日韩在线| 精品免费在线| 亚洲香蕉久久| 色偷偷色偷偷色偷偷在线视频| 亚洲一区欧美二区| 精品国产aⅴ| 伊人成人网在线看| 国产不卡精品在线| 亚洲精品极品| 香蕉久久精品| 国产伦精品一区二区三区在线播放| 日韩欧美精品综合| 久久激情五月婷婷| 在线亚洲观看| 亚洲永久av| 国产精品多人| 偷拍亚洲精品| 国产婷婷精品| 成人片免费看| 成年男女免费视频网站不卡| 日本91福利区| 一本一道久久a久久| 好吊日精品视频| 深夜视频一区二区| 欧美精品导航| 亚洲免费观看高清完整版在线观| 日韩中文在线电影| 久久天堂影院| 牛牛精品成人免费视频| 欧美精品影院| 91福利精品在线观看| 日韩一区二区三区精品视频第3页| 99国产一区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 韩日一区二区| 国产成人77亚洲精品www| 日韩一区二区三区免费播放| 亚洲成人三区| 日韩欧美精品一区二区综合视频| 国产视频网站一区二区三区| 精品日产乱码久久久久久仙踪林| 日韩av福利| 国产精品日韩| 国产欧美日韩在线一区二区| 国产一区二区三区亚洲综合| 久久久夜精品| 亚洲精品字幕| 国产精东传媒成人av电影| 天堂av在线| 青草av.久久免费一区| 欧美aa一级| 亚洲精品韩国| 久久国产亚洲| 国产乱子精品一区二区在线观看 | 精品欧美久久| 午夜精品影视国产一区在线麻豆| 国产美女视频一区二区| 国产一区二区三区久久 | 久久精品免费一区二区三区| 亚洲精品观看| 亚洲午夜一级| 九九久久国产| 一区二区日韩免费看| 精品资源在线| 宅男噜噜噜66国产日韩在线观看| 国产精品一区二区美女视频免费看| 日韩在线视频精品| 麻豆中文一区二区| 亚洲二区三区不卡| 久久av影院| 日韩av资源网| 日av在线不卡| 亚洲欧洲午夜| 久久久久网站| 亚洲精品成人图区| 国产一区二区三区91| 久久精品福利| 美女免费视频一区| 精品免费视频| 久久精品亚洲人成影院| 久久精品国内一区二区三区水蜜桃| 91欧美日韩| 国产欧美日韩一级| 日韩精品电影一区亚洲| 美女精品一区| 在线一区二区三区视频| 亚洲在线一区| 亚洲有吗中文字幕| 欧美日一区二区三区在线观看国产免 | 国产精品中文字幕制服诱惑| 国产99亚洲| 久久久噜噜噜| 99日韩精品| 一区二区三区午夜视频| 婷婷精品在线观看| 国产精品亚洲人成在99www| 久久av日韩| 久久人人精品| 亚洲狼人精品一区二区三区| 日本va欧美va精品发布| 久久一区欧美| 91高清一区| 欧美在线91| 在线看片国产福利你懂的| 午夜国产欧美理论在线播放| 天海翼亚洲一区二区三区| 国产精品片aa在线观看| 成人日韩在线观看| 午夜一级久久| 欧美天堂在线| 国内亚洲精品| 国产精品欧美三级在线观看| 私拍精品福利视频在线一区| 一区二区国产精品| 日韩1区在线| 日韩精品一区二区三区免费视频| 精品午夜视频| 日本一不卡视频| 亚洲激情社区| 亚洲一区二区三区无吗| 亚洲一区欧美激情| 国产欧美三级| 久久九九精品| 视频一区在线播放| 欧美精品国产| 韩国精品主播一区二区在线观看| 亚洲自拍另类| 精品三级在线观看视频| 亚洲激情二区| 91偷拍一区二区三区精品| 欧美日韩视频一区二区三区| 欧美亚洲色图校园春色| 久久久久网站| 久久av网址| 亚洲资源网站| 欧美性感美女一区二区| 久久国产日韩欧美精品| 婷婷激情图片久久| 久久av影院| 亚洲欧洲日韩精品在线| 久久久久久免费视频| 国产午夜一区| 免费久久99精品国产自在现线| 欧美国产不卡| 欧美精品国产| 日韩在线网址| 国产一区白浆| 亚洲香蕉网站| 日韩欧美精品| 精品视频自拍| 久久av中文| 国产精品sss在线观看av| 亚洲免费毛片| 先锋亚洲精品| 偷拍精品精品一区二区三区| 欧美日本久久| 国产欧美在线| 欧美黄页在线免费观看| 午夜精品福利影院| 日韩在线播放一区二区| 国产精品婷婷| 丝袜美腿亚洲一区| 久久国产99| 日本综合精品一区| 亚洲欧洲美洲国产香蕉| 亚洲精品免费观看| 日韩在线观看一区二区| 视频一区二区国产| 日日夜夜免费精品视频| 综合一区二区三区| 91p九色成人| 麻豆久久久久久| 色乱码一区二区三区网站|