python3使用pandas备份mysql数据表
操作系统 :CentOS 7.6_x64
Python版本:3.9.12
MySQL版本:5.7.38
日常开发过程中,会遇到mysql数据表的备份需求,需要针对单独的数据表进行备份并定时清理数据。
今天记录下python3如何使用pandas进行mysql数据表的备份,我将从以下几个方面进行展开:
数据表备份逻辑描述
使用的相关接口及文档
以FreeSWITCH的cdr表为例进行示例
提供示例代码及运行效果视频
一、数据表表备份逻辑
大致流程如下:
备份逻辑是“定时处理”部分的功能。
业务表A:
定义最大预留天数;
定义最大预留条数;
达到最大预留天数后,按时间(6小时为跨度)来删除,直到满足最大预留条数的要求。
备份表B:
预留时间可以hard code为2年;
2小时一检查,当前时间为设定时间(2、3、4、5、6)时,才执行备份操作;
数据搬迁时需要批量提交,以提高性能。
二、相关接口及文档
pandas版本:2.1.4
sqlalchemy 版本:1.4.39
pymysql 版本:1.0.2
CentOS7环境源码安装python3.9可参考如下文章:
三、以FreeSWITCH的cdr为例进行示例
1、FreeSWITCH配置CDR
freeswitch-1.10.9.-release/src/mod/event_handlers/mod_odbc_cdr/conf/autoload_configs/odbc_cdr.conf.xml
[fsdb]
Description=MySQL freeswitch database
Driver=MySQL
SERVER =192.168.137.1
PORT =3306
USER=root
PASSWORD=123456
DATABASE = fsdb32
OPTION =67108864
CHARSET = UTF8
<configuration name="odbc_cdr.conf" description="ODBC CDR Configuration">
<settings>
<!-- <param name="odbc-dsn" value="database:username:password"/> -->
<param name="odbc-dsn" value="fsdb:root:123456"/>
<!-- global value can be "a-leg", "b-leg", "both" (default is "both") -->
<param name="log-leg" value="both"/>
<!-- value can be "always", "never", "on-db-fail" -->
<param name="write-csv" value="on-db-fail"/>
<!-- location to store csv copy of CDR -->
<param name="csv-path" value="/usr/local/freeswitch/log/odbc_cdr"/>
<!-- if "csv-path-on-fail" is set, failed INSERTs will be placed here as CSV files otherwise they will be placed in "csv-path" -->
<param name="csv-path-on-fail" value="/usr/local/freeswitch/log/odbc_cdr/failed"/>
<!-- dump SQL statement after leg ends -->
<param name="debug-sql" value="true"/>
</settings>
<tables> <table name="call_detail">
<field name="uuid" chan-var-name="uuid"/>
<field name="call_uuid" chan-var-name="call_uuid"/>
<field name="caller_number" chan-var-name="caller_id_number"/>
<field name="callee_number" chan-var-name="destination_number"/>
<field name="start_time" chan-var-name="start_stamp"/>
<field name="answer_time" chan-var-name="answer_stamp"/>
<field name="hangup_time" chan-var-name="end_stamp"/>
<field name="billsec" chan-var-name="billsec"/>
<field name="hangup_cause" chan-var-name="hangup_cause"/>
</table> </tables>
</configuration>
CREATE TABLE `call_detail` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`uuid` VARCHAR(50) NOT NULL DEFAULT '0',
`call_uuid` VARCHAR(50) NOT NULL DEFAULT '0',
`caller_number` VARCHAR(20) NOT NULL DEFAULT '0',
`callee_number` VARCHAR(50) NOT NULL DEFAULT '0',
`start_time` DATETIME NULL DEFAULT NULL,
`answer_time` DATETIME NULL DEFAULT NULL,
`hangup_time` DATETIME NULL DEFAULT NULL,
`billsec` INT(11) NOT NULL DEFAULT '0',
`hangup_cause` VARCHAR(50) NOT NULL,
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
2、使用pandas进行数据备份
CREATE TABLE `call_detail_history` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`uuid` VARCHAR(50) NOT NULL DEFAULT '0',
`call_uuid` VARCHAR(50) NOT NULL DEFAULT '0',
`caller_number` VARCHAR(20) NOT NULL DEFAULT '0',
`callee_number` VARCHAR(50) NOT NULL DEFAULT '0',
`start_time` DATETIME NULL DEFAULT NULL,
`answer_time` DATETIME NULL DEFAULT NULL,
`hangup_time` DATETIME NULL DEFAULT NULL,
`billsec` INT(11) NOT NULL DEFAULT '0',
`hangup_cause` VARCHAR(50) NOT NULL,
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
说明:
- ConfigData类
读取配置文件 - dataBack函数
以天为单位进行数据备份 - dataClean函数
执行数据清理功能(业务表和备份表) - dataCount函数
统计业务表里面的数据条目 - getDbConnStr函数
生成数据库连接字符串 - dataRotateBase函数
数据循环备份功能的具体实现,执行数据备份、数据清理操作。 - dataRotateByDays函数
按天循环备份 - dataRotateByHours函数
按小时循环备份 - dataBackTask函数
执行具体的备份任务
完整代码可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20231209 获取。
<config>
<cdrReserve>
<maxDays>15</maxDays>
<maxItems>100000</maxItems>
</cdrReserve> <mysql>
<host>192.168.137.1</host>
<port>3306</port>
<user>root</user>
<password>123456</password>
<dbname>fsdb32</dbname>
</mysql> </config>
#! /bin/bash pydir=/root/py39env
export CFLAGS="-I$pydir/include"
export LDFLAGS="-L$pydir/lib"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$pydir/lib $pydir/bin/python3.9 dataBack.py -f default.xml
四、运行效果
python3使用pandas备份mysql数据表的更多相关文章
- 用Myisamchk让MySQL数据表更健康
用Myisamchk让MySQL数据表更健康 2011-03-15 09:15 水太深 ITPUB 字号:T | T 为了让MySQL数据库中的数据表“更健康”,就需要对其进行定期体检.在这里笔者推荐 ...
- shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机
shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机 备份mysql中的库或者表 mysqldump 常用参数详解: -u 用户名 -p 密码 -h ...
- MYSQL数据表损坏的原因分析和修复方法小结
MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...
- 如何优雅的备份MySQL数据?看这篇文章就够了
大家好,我是一灯,今天一块学习一下如何优雅安全的备份MySQL数据? 1. 为什么要备份数据 先说一下为什么需要备份MySQL数据? 一句话总结就是:为了保证数据的安全性. 如果我们把数据只存储在一个 ...
- 随机获取Mysql数据表的一条或多条记录
随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: sel ...
- (转)MySQL数据表中带LIKE的字符匹配查询
MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56 百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...
- MySQL 数据表修复及数据恢复
1. MYSQL数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏. 强制关机,没有先关闭mysql 服务等. 2. 数据表损坏后的主要现象是什么? 从表中选择数据之时,得到如下错误:I ...
- 设置MySQL数据表主键
设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合.如下SQL语句所示: My ...
- 谈谈MySQL数据表的类型(转)
谈谈MySQL数据表的类型 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其 ...
- mysql数据表增删改查
http://www.runoob.com/mysql/mysql-tutorial.html 一.MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以 ...
随机推荐
- nflsoj 5926 素数环
题目非常简单,只需要判断相邻两个数的和是不是素数,素数的判断参考数论 不过要注意的一点是题目说的是一个环,所以首尾两个数的和也要是素数 我在输出的时候加上了 is_prime(path[n-1]+1) ...
- 为什么 API 治理需要内部倡导
API 治理旨在帮助人们通过 API 实现最大价值.但是,只有了解 API 是什么以及 API 的重要性,并且认识到 API 治理是在帮助他们而不是监管他们,才能实现这一目标.这就是为什么在任何 AP ...
- AI绘画:StableDiffusion炼丹Lora攻略-实战萌宠图片生成
写在前面的话 近期在小红书发现了许多极其可爱.美观的萌宠图片,对这些美妙的图像深深着迷 于是想着看看利用AI绘画StableDiffusion以下简称(SD)做出来. 以下是详细实操的全过程,包括所有 ...
- 使用 Laf 一周内上线美术狮 AI 绘画小程序
"美术狮 AI 绘画"(以下简称"美术狮"),是我们小团队的一次尝试,定位是人人都可以上手的,充满创意的,理解中文和中国文化的图片生成工具. 在完善图像模型和论 ...
- API技术的使用场景
互联网的发展和普及,API技术也变得越来越重要.API是应用程序接口,它是一种连接不同应用程序或系统之间数据交换和通信的方式.API技术不仅提高了不同应用程序之间的互操作性,还加速了应用程序的开发 ...
- 代码随想录算法训练营第二十五天| 216.组合总和III 17.电话号码的字母组合
216.组合总和III 卡哥建议:如果把 组合问题理解了,本题就容易一些了. 题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%8 ...
- Solution -「洛谷 P7395」「CoE-I 2021C」弹珠游戏
Description Link. 游戏在 \(4\times4\) 的菱形棋盘上进行: 两名玩家轮流放置弹珠,可以在横向.纵向.\(45\) 度斜线.\(135\) 度斜线方向未放置弹珠的位置连续放 ...
- 记一次 .NET 某餐饮小程序 内存暴涨分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序内存异常高,用 vs诊断工具 加载时间又太久,让我帮忙看一下到底咋回事,截图如下: 确实,如果dump文件超过 10G 之后,市面上那些可视化工 ...
- MySQL 的 InnoDB 存储引擎简介
MySQL 是世界上最流行的开源关系型数据库管理系统之一,而其中的存储引擎则是其关键组成部分之一.InnoDB 存储引擎在 MySQL 中扮演了重要角色,提供了许多高级功能和性能优化,适用于各种应用程 ...
- 其它——DevOps简介
文章目录 DevOps简介 DevOps的概念 历史变革 好处是什么? 为什么DevOps会兴起? 实现DevOps需要什么? DevOps的采用现状 DevOps简介 DevOps 是一个完整的面向 ...