使用 phpMyAdmin 的跟踪机制迁移数据库

2023-11-26

在开发数据库中,我在所有表上启用了 phpMyAdmin 跟踪。它记录了我对表结构所做的所有更改(在本例中我对数据跟踪不感兴趣。)到目前为止一切顺利。

然后我想要做的是为所有跟踪的表取出一份报告,其中包含特定版本(或者日期甚至可以工作)所做的更改,以便在升级时我可以在生产数据库上运行生成的 SQL到新版本,并确保数据库相同,而不必担心手动处理会出现错误。

但是,我找不到生成此类报告的函数。所有跟踪报告均针对各个表,如果我必须单击所有表(20+),则会失去此功能的优势。所有表都不会更改,但我不想跟踪更改的内容,这就是我希望 phpMyAdmin 为我做的事情。

我尝试对存储更改的 pma_tracking 表进行自己的查询,并取得了部分成功。问题是一个版本的所有更改都存储为一个 BLOB,并且每个新版本都会执行 DROP TABLE / CREATE TABLE 语句,并且我无法删除生产数据库上的表,因为那里有数据(我是不是每次都重新创建数据库,只是添加增量更改)。我只想升级结构,并且我唯一需要 CREATE TABLE 语句的时间是当我实际在数据库中创建新表时。所以我想我可以用 SQL 过滤掉它们,但随后它被存储为博客,然后我必须解析和弄乱看起来过于复杂的 blob 文本。

所以,总而言之,这就是我正在寻找的:

  • 自动跟踪系统/工作流程,记录所有结构更新,并可以从某个版本或时间点为整个数据库创建增量 SQL 报告。
  • 如果可能的话,我不想使用任何其他第三方应用程序(我想仅使用 phpMyAdmin 或 MySQL)

另外,如果有人有更好的想法,我很乐意对工作流程发表评论。任何帮助表示赞赏。


解析“pma_tracking”表的BLOB字段的算法位于获取追踪数据的方法PMA_Tracker 类, 在里面libraries/Tracker.class.php源文件。
从该代码开始,我编写了一个简单的 PHP 脚本来从“pma_tracking”表中提取所有数据定义语句(“DROP TABLE”语句除外)。
例如,假设您想要获取“test”数据库自版本“1”以来所有表的所有更改的列表:

<?php

$link = mysqli_init();

// Adjust hostname, username, password and db name before use!
$db = mysqli_real_connect($link, "localhost", "myuser", "mypass", "phpmyadmin") 
      or die(mysqli_connect_error());

// Adjust also target db name and tracking version
$db_name = "test";
$version = "1";

$sql = "SELECT schema_sql FROM pma_tracking 
         WHERE db_name='{$db_name}' AND version>='{$version}' 
         ORDER BY version,date_created";
$result = mysqli_query($link, $sql) or die(mysqli_error($link));
while ($myrow = mysqli_fetch_assoc($result)) {
    $log_schema_entries = explode('# log ',  $myrow['schema_sql']);
    foreach ($log_schema_entries as $log_entry) {
        if (trim($log_entry) != '') {
            $statement = trim(strstr($log_entry, "\n"));
            if (substr($statement, 0, 11) != "DROP TABLE ") {
                echo "{$statement}\n";
            }
        }
    }
}

?>

通过将脚本输出重定向到文件,您将获得一个 SQL 命令文件,其中包含(几乎)在目标(例如生产)数据库上复制架构更改所需的所有语句;该文件必须通过指定“-f”(强制)MySQL 选项来执行:

-f, --force 即使出现 SQL 错误也继续。

通过这样做,MySQL 将忽略每次执行操作时抛出的所有“表已存在”错误。CREATE TABLE遇到现有表的语句,因此仅创建目标数据库中仍然不存在的表。
这种方法显然有一些缺点:

  1. ALL the DROP TABLE命令将被忽略(不仅是那些从 phpMyAdmin 自动插入的命令),因此,如果您删除了源数据库中的表,则该表不会在目标数据库中删除。
  2. ALL脚本错误将被忽略,因此它可能不是 100% 负担得起的。

最后的建议:在继续之前,请务必对目标数据库进行完整备份!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 phpMyAdmin 的跟踪机制迁移数据库 的相关文章

  • 如何使用 Facebook SDK API 为页面/网址“点赞”?

    我正在使用这段代码 facebook gt api me likes post array url gt http www google com 我收到以下错误 Fatal error Uncaught OAuthException 200
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 如何在类似 MVC 的页面中加载基于漂亮 URL 的类?

    我想请教一些关于如何解决这个问题的提示 我正在尝试构建自己的 MVC 网站 我了解了 URL 的基础知识 http example com blog cosplay cosplayer expo today 博客 gt 控制器cosplay
  • 在 Symfony 序列化中更改序列化属性名称

    我正在使用 Symfony 序列化器 效果很好 use Symfony Component Serializer Annotation Groups Groups default notification public function g
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • MySQL 使用 ALTER IGNORE TABLE 出现重复错误

    我的 MySQL 中有一个有重复项的表 我尝试删除重复项并保留一项 我没有主键 我可以通过以下方式找到重复项 select user id server id count as NumDuplicates from user server
  • 如何解码 eval( gzinflate( base64_decode(

    我已将此代码注入到我的网站中 如何解码尾随字符串 我需要知道发生了什么以及其背后的代码是什么 这应该输出将被执行的代码eval 我希望这就是您正在寻找的
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • Joomla 页面中的自定义 php 代码

    我正在尝试将 Joomla 1 5 9 页面中的表源从页面中的硬编码 html 更改为从 SQL 数据库获取信息 执行此操作的正确方法是什么 创建一个新的模型或组件并以某种方式在页面中使用它 我找到了这些 http docs joomla
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • MVC 模式中的验证层

    验证模型将使用的数据的最佳位置在哪里 例如 考虑登记表 我们有一些来自注册表的数据 那么验证这些数据的最佳位置在哪里 我们应该通过 if 语句或特殊的验证器类来检查每个数据 这意味着大量的编码 所以我想了解在哪里可以做到这一点 在控制器中
  • WordPress 插件中的类自动加载器

    我想编写一个类自动加载器以在 WordPress 插件中使用 该插件将安装在多个站点上 我想尽量减少与其他插件发生冲突的机会 自动加载器将是这样的 function autoload name some code here 我的主要问题是
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • 从支付网关重定向回时用户会话丢失

    我已将 Cyber source 配置为我的支付网关 我能够导航到 cybersource 并进行付款 并能够成功重定向回该网站 我也可以取消付款并重定向回我的网站 我收到来自支付网关的响应 但是 用户在从支付网关重定向回来时会被注销 我正
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c

随机推荐

  • Excel 多个条件的中位数

    基本上在Excel中我想要一张表格 就像下面右边给出的那样 我的数据规模比给出的例子大得多 它有每个主题 每个条件的中位数 例如TADA TADP TPDA TPDP 理想情况下 我会使用数据透视表 但是 Excel 不会在数据透视表中执行
  • Python3双向串口通信:读入数据

    我正在尝试通过Python3建立双向通信 我的 USB 端口之一插入了一个激光测距仪 我想向其发送 接收命令 我有一张可以发送的命令以及它们将返回的内容 因此这部分已经存在 我需要的是一种实时方便的方法 到目前为止我有以下代码 import
  • GameKit 无线网络连接?

    我读到 从 iPhone OS 3 1 开始 GameKit 支持 wifi 连接 但文档指出 如果您的应用程序配置了 对等选择器允许互联网 连接 您的应用程序必须 还解雇同行选择器和 提供自己的配置界面 互联网连接 这还成立吗 如果是这样
  • 为什么我的类型化数据集不喜欢临时表?

    我正在尝试将表适配器添加到 SQL Server 2005 Express 中的存储过程 然而 存储过程使用一个名为 temp 的临时表 创建表适配器时 Visual Studio 抱怨 未知对象 temp 并表示存储过程返回 0 列 这是
  • 如何静音“其类型使用匿名命名空间 [-Werror]”gcc 版本 4.8.2

    在我的项目的一个头文件中 以下行包含在inline method typedef boost archive iterators transform width
  • Codeigniter/PHP 会话安全问题

    我正在使用 Codeigniter 开发一个 Web 应用程序 当用户通过我的网站进行身份验证时 我当前将他们的 用户标识符 存储在我的会话 cookie 中 我已启用加密 我的几个模型类使用会话 cookie 的 用户标识符 参数中的值来
  • 如何放大矩形中绘制的填充样式? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在使用 Net 绘图来绘制图表 它本质上是一个堆积条形图 我遇到的问题是 我想减少填充样式中的线条数量 以便在某种程度上放大它以使其更清晰 我环顾四周 但没有发现任何可以帮助我的东
  • 如何在 vtkStructuredGrid 上设置数据值

    我正在尝试用分析字段填充结构化网格 但是尽管阅读了 vtk 文档 我还没有找到如何在网格点实际设置标量值或设置网格的间距 原点信息 从下面的代码开始 我该如何 将空间信息与网格相关联 即单元格 0 0 0 位于坐标 0 0 0 每个方向的间
  • 使用selenium保存页面中的图像

    我正在使用 Selenium 和 Google Chrome 驱动程序以编程方式打开页面 每个页面上都有一个我想下载的动态生成的图像 目前 我正在等待页面完成加载 然后获取图像 URL 并使用 System Net WebClient 下载
  • 如何创建线程安全的ContentProvider?

    Android 文档说 可以从各种 ContentResolver 调用 ContentProvider 方法 不同进程和线程中的对象 必须实现它们 以线程安全的方式 我在 Stackoverflow 上找到了这篇文章Android sql
  • go float 零除编译器错误

    这种行为有何意义 只打印编译器警告而不是错误不是更有意义吗 func main var y float64 0 0 var x float64 4 0 y fmt Println x Inf func main var x float64
  • 如何仅更改 javafx css 中的左填充

    我经常使用 html css 但我对 javafx css 完全陌生 所以这将是一个新手问题 但我在任何地方都找不到答案 我有一个充满标签的大网格窗格 除了其他标签之外 我可以为所有这些标签设置填充 例如 GridPane containe
  • C++ 中的越界和未定义的行为

    我知道在 C 中 超出缓冲区范围的访问是未定义的行为 这是来自 cppreference 的示例 int table 4 bool exists in table int v return true in one of the first
  • 两个字符相加产生 int

    我制作了一个简单的程序并使用 GCC 4 4 4 5 编译它 如下所示 int main char u 10 char x x char i u x return 0 g c Wconversion a cpp 我有以下内容 a cpp I
  • Jackson JSON - 反序列化 Commons MultiMap

    我想使用 JSON 序列化和反序列化 MultiMap Apache Commons 4 要测试的代码段 MultiMap
  • 非常量复制构造函数和返回值的隐式转换

    考虑以下 C 代码 struct B struct A A int A A missing const is intentional A B operator B A f return A 1 compiles fine return 1
  • 粘性灵活的页脚和页眉 CSS 在 WebKit 中工作正常,但在 Gecko 中不行

    我正在尝试构建一个允许灵活高度的页眉和页脚的布局 中间的部分占用剩余空间 中间的任何溢出都应该为该中间部分提供一个滚动条 我的适用于 Safari 和 Chrome 的代码是
  • Angular:构建后是否可以读取json文件

    我正在开发一个 Angular 7 项目 该项目需要在不同的服务器上运行 我需要从环境文件中读取服务器 URL 并且无法设置为静态变量 我尝试读取 JSON 文件 但一旦我ng build该项目 它将 JSON 的内容复制为 main js
  • MVC 中 OnChange 事件的 AJAX 调用

    我必须对作为视图一部分的下拉列表的 onchange 事件进行 AJAX 调用 在更改事件中 我需要调用数据库 进行一些计算以显示 UI 然后使用计算来填充图表控件 UI 显示按此顺序 图表 下拉类别列表 带有评分的子类别列表 因此 我需要
  • 使用 phpMyAdmin 的跟踪机制迁移数据库

    在开发数据库中 我在所有表上启用了 phpMyAdmin 跟踪 它记录了我对表结构所做的所有更改 在本例中我对数据跟踪不感兴趣 到目前为止一切顺利 然后我想要做的是为所有跟踪的表取出一份报告 其中包含特定版本 或者日期甚至可以工作 所做的更