python3使用pandas备份mysql数据表

这篇具有很好参考价值的文章主要介绍了python3使用pandas备份mysql数据表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

操作系统 :CentOS 7.6_x64

Python版本:3.9.12

MySQL版本:5.7.38

日常开发过程中,会遇到mysql数据表的备份需求,需要针对单独的数据表进行备份并定时清理数据。

今天记录下python3如何使用pandas进行mysql数据表的备份,我将从以下几个方面进行展开:

  •  数据表备份逻辑描述

  •  使用的相关接口及文档

  •  以FreeSWITCH的cdr表为例进行示例

  •  提供示例代码及运行效果视频

一、数据表表备份逻辑

大致流程如下:

python3使用pandas备份mysql数据表

 备份逻辑是“定时处理”部分的功能。

 业务表A:

  •  定义最大预留天数;

  •  定义最大预留条数;

 达到最大预留天数后,按时间(6小时为跨度)来删除,直到满足最大预留条数的要求。

 备份表B:

  •  预留时间可以hard code为2年;

  •  2小时一检查,当前时间为设定时间(2、3、4、5、6)时,才执行备份操作;

 数据搬迁时需要批量提交,以提高性能。

二、相关接口及文档

pandas版本:2.1.4

sqlalchemy 版本:1.4.39

pymysql 版本:1.0.2

python3使用pandas备份mysql数据表

CentOS7环境源码安装python3.9可参考如下文章:

https://www.cnblogs.com/MikeZhang/p/centos7-install-py39-20220704.html
1、使用pandas库的read_sql_query进行数据读取,可参考如下文档:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sql_query.html
2、pymysql是一个纯python实现的mysql操作库,安装及使用起来比较方便,且可跨平台使用。
文档地址:https://pymysql.readthedocs.io/en/latest/
3、SQLAlchemy是一个功能强大的Python ORM 工具包,借助该工具可更便捷的实现数据备份。
官方网址: https://www.sqlalchemy.org/

三、以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可参考这篇文章的第二部分:
https://www.cnblogs.com/MikeZhang/p/dockerFS20230716.html
/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
示例代码如下:

python3使用pandas备份mysql数据表

 说明:

  • 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可参考如下文章:
https://www.cnblogs.com/MikeZhang/p/centos7-install-py39-20220704.html

四、运行效果

运行效果如下:

python3使用pandas备份mysql数据表文章来源地址https://www.toymoban.com/news/detail-750171.html

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

到了这里,关于python3使用pandas备份mysql数据表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】MySQL 数据类型,数值、日期和时间、字符串类型,创建数据表,删除数据表

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL 支持多种类型,大致可以分为三类:数值、日

    2024年02月15日
    浏览(83)
  • MySql基础教程(三):创建数据表、数据增删改查、删除数据表

    创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 1.1 语法 下面是创建MySQL数据表的SQL通用语法: 以下例子在 nobug 数据库中创建数据表 nobug_user : 实例解析: 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,

    2024年02月11日
    浏览(69)
  • 实现一个MYSQL工具类,包含判断创建数据表是否存在,创建数据表

    可以使用Python的MySQLdb模块来实现一个MYSQL工具类。下面是一个简单的实现示例: 使用示例: 在上面的示例中,我们首先创建了一个MySQLTool类,并在初始化方法中传入了数据库的连接信息。然后使用connect方法连接到数据库。 table_exists方法用于判断给定的数据表是否存在,它执

    2024年01月15日
    浏览(67)
  • MySQL数据表查询

    😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:进入MySQL知识专栏 🌼欢迎小伙伴们访问到博主的文章内容,在浏览阅读过程发现需要纠正的地

    2024年02月11日
    浏览(72)
  • MySQL数据表

    首先要进入数据库USE name,再创建数据表 或者使用数据库.数据表的方式创建 1.创建数据表 CREATE TABLE [IF NOT EXISTS] 表名( 字段1, 数据类型 [约束条件] [默认值],# 数据类型有INT,VERCHAR(30),CHAR,DATETIME等等 字段2, 数据类型 [约束条件] [默认值],#约束条件,比如指定为主键:PRIMARY KEY,例

    2024年02月13日
    浏览(51)
  • MySQL数据表操作

    目录 内容如下 一、相关的概念 one / 表(关系表) two / 字段(表结构) three / 记录(具体的数据) four / 表之间的关系 five / 二、数据类型 one / 整数类型 two / 浮点数类型 three / 定点数类型 four / 字符类型 five / 日期时间类型 six / 二进制类型 三、存储引擎 one / 概念 tw

    2024年02月10日
    浏览(46)
  • mysql数据库和数据表

    常用的数据类型: int : 整型  用于定义整数类型的数据 float : 单精度浮点4字节32位  准确表示到小数点后六位. double :双精度浮点8字节64位 char :固定长度的字符类型  用于定义字符类型数据 varchar :可变长度的字符类型 text : 文本 image: :图片 SQL语言: Structured Query La

    2024年02月10日
    浏览(70)
  • MySQL--删除数据表(6)

    MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为 执行删除命令后所有数据都会消失。 语法 以下为删除 MySQL 数据表的通用语法: 参数说明: table_name 是要删除的表的名称。 IF EXISTS 是一个可选的子句,表示如果表存在才执行删除操作,避免

    2024年01月25日
    浏览(44)
  • MySQL 数据表修复方法

    本文主要讲check table和repair table指令; 在检查、修复表,除了用 myisamchk 指令,还可以用 check table 、 repair table 指令。(指令不区分大小写) 检查表是否有错误 CHECK TABLE对 MyISAM 和 InnoDB 表有作用。 对于MyISAM表,统计信息会被更新,CHECK TABLE也可以检查视图是否有错误,

    2024年02月13日
    浏览(62)
  • MySQL数据表高级操作

    方法一: 方法二: 方法一 DELETE清空表后,返回的结果内有删除的记录条目; DELETE 工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。 方法二 TRUNCATE清空表后,没有返回

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包