操作系统 :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可参考如下文章:

1、使用pandas库的read_sql_query进行数据读取,可参考如下文档:
2、pymysql是一个纯python实现的mysql操作库,安装及使用起来比较方便,且可跨平台使用。
3、SQLAlchemy是一个功能强大的Python ORM 工具包,借助该工具可更便捷的实现数据备份。

三、以FreeSWITCH的cdr为例进行示例

FreeSWITCH版本 :1.10.9

1、FreeSWITCH配置CDR

fs模块: mod_odbc_cdr
默认配置: conf/autoload_configs/odbc_cdr.conf.xml
如果没有该模块及配置文件,需要在编译时安装该模块,并将源码里面的配置文件复制到conf/autoload_configs目录,源码里面的配置文件路径如下:
freeswitch-1.10.9.-release/src/mod/event_handlers/mod_odbc_cdr/conf/autoload_configs/odbc_cdr.conf.xml
FreeSWICH通过ODBC方式支持MySQL可参考这篇文章的第二部分:
/etc/odbc.ini 配置示例:
[fsdb]
Description=MySQL freeswitch database
Driver=MySQL
SERVER =192.168.137.1
PORT =3306
USER=root
PASSWORD=123456
DATABASE = fsdb32
OPTION =67108864
CHARSET = UTF8
odbc_cdr.conf.xml配置示例(可根据情况调整所需字段):
<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进行数据备份

2.1 建立备份表
建表语句如下:
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
;
2.2 进行数据表备份
1) 编写备份脚本
文件名:dataBack.py
示例代码如下:

说明:

  • ConfigData类
    读取配置文件
  • dataBack函数
    以天为单位进行数据备份
  • dataClean函数
    执行数据清理功能(业务表和备份表)
  • dataCount函数
    统计业务表里面的数据条目
  • getDbConnStr函数
    生成数据库连接字符串
  • dataRotateBase函数
    数据循环备份功能的具体实现,执行数据备份、数据清理操作。
  • dataRotateByDays函数
    按天循环备份
  • dataRotateByHours函数
    按小时循环备份
  • dataBackTask函数
    执行具体的备份任务

完整代码可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20231209 获取。

2)添加配置文件
文件名:default.xml
配置文件示例如下:
<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>
说明:
cdrReserve/maxDays : 最大预留天数
cdrReserve/maxItems : 最大预留条数
mysql : mysql连接参数
3)编写启动脚本
文件名称:start.sh
示例如下:
#! /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
说明:
这里使用的是自定义python环境,python版本是3.9.12。
CentOS7环境源码安装python3.9可参考如下文章:

四、运行效果

运行效果如下:

运行效果视频可从如下渠道获取(修改数据时间进行测试):
关注微信公众号(聊聊博文,文末可扫码)后回复 2023120901 获取。
好,就这么多了,希望对你有帮助。

python3使用pandas备份mysql数据表的更多相关文章

  1. 用Myisamchk让MySQL数据表更健康

    用Myisamchk让MySQL数据表更健康 2011-03-15 09:15 水太深 ITPUB 字号:T | T 为了让MySQL数据库中的数据表“更健康”,就需要对其进行定期体检.在这里笔者推荐 ...

  2. shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机

    shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机 备份mysql中的库或者表 mysqldump 常用参数详解: -u 用户名 -p 密码 -h ...

  3. MYSQL数据表损坏的原因分析和修复方法小结

    MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...

  4. 如何优雅的备份MySQL数据?看这篇文章就够了

    大家好,我是一灯,今天一块学习一下如何优雅安全的备份MySQL数据? 1. 为什么要备份数据 先说一下为什么需要备份MySQL数据? 一句话总结就是:为了保证数据的安全性. 如果我们把数据只存储在一个 ...

  5. 随机获取Mysql数据表的一条或多条记录

    随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: sel ...

  6. (转)MySQL数据表中带LIKE的字符匹配查询

    MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56    百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...

  7. MySQL 数据表修复及数据恢复

    1. MYSQL数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏. 强制关机,没有先关闭mysql 服务等.   2. 数据表损坏后的主要现象是什么? 从表中选择数据之时,得到如下错误:I ...

  8. 设置MySQL数据表主键

    设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合.如下SQL语句所示: My ...

  9. 谈谈MySQL数据表的类型(转)

    谈谈MySQL数据表的类型 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其 ...

  10. mysql数据表增删改查

    http://www.runoob.com/mysql/mysql-tutorial.html 一.MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以 ...

随机推荐

  1. MAUI+Blazor混合应用开发示例

    前言 笔者之前在公司搭建过一套生产管理系统,该系统要求能和硬件进行串口通信,同时又要提供后台信息查询.笔者给出的解决方案就是:MAUI + Blazor,这样只需要提供一套UI,就能满足桌面端.移动端 ...

  2. Controller 层代码技巧

    Controller 层代码技巧 前言 本篇主要要介绍的就是controller层的处理,一个完整的后端请求由4部分组成: 接口地址(也就是URL地址) 请求方式(一般就是get.post,当然还有p ...

  3. 基于opencv-pyhton与opencv-c++的结合理解与学习

    2023年上半年,一直在学习opencv-c++版本,学习了其中的多个库函数 笔记链接:https://www.cnblogs.com/Tan-code/category/2339311.html o ...

  4. 《数据结构-C语言》顺序表

    @ 目录 顺序表 结构定义 初始化 创建表 求表长 判断表是否为空 取值 查找 插入 删除 逆置 清空 销毁 遍历打印 测试 顺序表 结构定义 #include <stdio.h> #in ...

  5. [Bread.Mvc] 开源一款自用 MVC 框架,支持 Native AOT

    Bread.Mvc Bread.Mvc 是一款完全支持 Native AOT 的 MVC 框架,搭配同样支持 AOT 的 Avalonia,让你的开发事半功倍.项目开源在 Gitee,欢迎 Star. ...

  6. API接口设计规范

    说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢? 下面我们 ...

  7. 探索API接口:从概念到实践

    在当今数字化时代,API(Application Programming Interface)接口成为了各种应用程序之间实现数据交互和功能集成的关键.无论是开发一个网站.构建一个移动应用还是进行数据分 ...

  8. Codeforces 1462F The Treasure of The Segments

    题意 给\(n(1\leq n\leq 2*10^5)\)个线段$[l_i,r_i] (1≤l_i≤r_i≤10^9) $,问最少删除几个线段,使得剩下线段中,有至少一个线段与所有线段相交. 分析 对 ...

  9. 虚拟机问题:VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行

    解决办法:关闭Hyper-V功能. windows10使用VMware Workstation打开虚拟机时显示 VMware Workstation 与 Hyper-V 不兼容.请先从系统中移除 Hy ...

  10. Google Hacking语法总结

    Google Hacking语法总结 Google Hacking是利用谷歌搜索的强大,来在浩瀚的互联网中搜索到我们需要的信息.轻量级的搜索可以搜素出一些遗留后门,不想被发现的后台入口,中量级的搜索出 ...