死磕数据库系列(三十二):MySQL 数据库、数据表管理工具介绍

关注公众号,回复“1024”获取2TB学习资源!

今天我将详细的为大家介绍 MySQL 数据库、数据表相关工具的相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!

数据库比较工具 mysqldbcompare

mysqldbcompare 用于比较两个服务器或同个服务器上的数据库,有文件和数据,并生成差异性 SQL 语句。

要比较数据表,请用另外一个工具:mysqldiff(下一节介绍)。以下是 mysqldbcompare 的用法。

安装

mysqldbcompare 是 MySQL Utilities 中的一个脚本,默认的MySQL不包含工具集,所以需要独立安装。

  • MySQL Utilities 下载地址:http://downloads.mysql.com/archives/utilities/

  • Windows 系统中需提前安装“Visual C++ Redistributable Packages for Visual Studio 2013”,下载地址:https://www.microsoft.com/en-gb/download/details.aspx?id=40784

Linux 系统在下载页面选择对应发行版。60d9fa3a09e8584b724d8618849fbeeb.png

语法

mysqldbcompare 的语法如下:

$ mysqldbcompare --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1:db2

参数说明

--server1:#MySQL服务器1配置。
--server2:#MySQL服务器2配置。如果是同一服务器,--server2可以省略。
db1:db2:#要比较的两个数据库。如果比较不同服务器上的同名数据库,可以省略:db2。
--all:#比较所有两服务器上所有的同名数据库。--exclude排除无需比较的数据库。
--run-all-tests:#运行完整比较,遇到第一次差异时不停止。
--changes-for=:#修改对象。例如--changes-for=server2,那么对比以sever1为主,生成的差异的修改也是针对server2的对象的修改。
-d DIFFTYPE,--difftype=DIFFTYPE:#差异的信息显示的方式,有[unified|context|differ|sql],默认是unified。如果使用sql,那么就直接生成差异的SQL,这样非常方便。
--show-reverse:#在生成的差异修改里面,同时会包含server2和server1的修改。
--skip-table-options:#保持表的选项不变,即对比的差异里面不包括表名、AUTO_INCREMENT、ENGINE、CHARSET等差异。
--skip-diff:#跳过对象定义比较检查。所谓对象定义,就是CREATE语句()里面的部分,--skip-table-options是()外面的部分。
--skip-object-compare:#默认情况下,先检查两个数据库中相互缺失的对象,再对都存在对象间的差异。这个参数的作用就是,跳过第一步,不检查相互缺失的对象。
--skip-checksum-table:#数据一致性验证时跳过CHECKSUM TABLE。
--skip-data-check:#跳过数据一致性验证。
--skip-row-count:#跳过字段数量检查。

示例

比较两个数据库,并生成差异SQL:

$ mysqldbcompare --server1=root:root@localhost --server2=root:root@localhost db1:db2 --changes-for=server1 -a --difftype=sql# WARNING: Objects in server1.db1 but not in server1.db2:
# TABLE: table2
#
# WARNING: Objects in server1.db2 but not in server1.tb1:
# TABLE: table3
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
#-------------------------------------------------------------------------
# TABLE     t1                                      pass    pass    -
#           - Compare table checksum                                FAIL
#           - Find row differences                                  FAIL
#
# Transformation for --changes-for=server1:
## Data differences found among rows:
UPDATE db1.t1 SET b = 'Test 123' WHERE a = '1';
UPDATE db1.t1 SET b = 'Test 789' WHERE a = '3';
DELETE FROM db1.t1 WHERE a = '4';
INSERT INTO db1.t1 (a, b) VALUES('5', 'New row - db2');# Database consistency check failed.
#
# ...done

WARNING 之后提示两个数据库表之间的差异,也就是一个数据库中有,另一个数据库没有的数据表。

之后就是差异的SQL语句了,把有 # 号注释的行删掉,就能直接在数据库中执行了。

说明:执行MySQL语句时可能会遇到这样错误:Error 1054 – Unknown column ‘name’ in ‘aspect’

这是因为 mysqldbcompare 生成的 ALTER 语句中,用逗号 , 拼装了多条 ADDCHANGE 等语句,如果这些语句还包含 AFTER 关键字,就会提示这个错误并中断执行MySQL语句。解决的办法就是:去除 AFTER 及其后面的条件。更多关于MySQL学习的文章,请参阅:死磕数据库系列之 MySQL ,本系列持续更新中。

数据表比较工具 mysqldiff

本文介绍mysqldiff工具来比较数据表结构,并生成差异SQL语句。

mysqldiff 类似 Linux 下的 diff 命令,用来比较对象的定义是否相同,并显示不同的地方。

以下是 mysqldiff 的用法。

安装

mysqldiff 是 MySQL Utilities 中的一个脚本,默认的 MySQL 不包含这个工具集,所以需要独立安装(只需安装 MySQL Utilities就可以了)。

  • MySQL Utilities下载地址:http://downloads.mysql.com/archives/utilities/

  • Windows 系统中需提前安装 Visual C++ Redistributable Packages for Visual Studio 2013,下载地址:https://www.microsoft.com/en-gb/download/details.aspx?id=40784

Linux系统在下载页面选择对应发行版。

语法

mysqldiff 的语法格式是:

$ mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4

这个语法有两个用法:

  • db1:db2:如果只指定数据库,那么就将两个数据库中互相缺少的对象显示出来,不比较对象里面的差异。这里的对象包括表、存储过程、函数、触发器等。

  • db1.object1:db2.object1:如果指定了具体表对象,那么就会详细对比两个表的差异,包括表名、字段名、备注、索引、大小写等所有的表相关的对象。

参数说明

db1:db2:#如果只指定数据库,那么就将两个数据库中互相缺少的对象显示出来,不比较对象里面的差异。这里的对象包括表、存储过程、函数、触发器等。
db1.object1:db2.object1:#如果指定了具体表对象,那么就会详细对比两个表的差异,包括表名、字段名、备注、索引、大小写等所有的表相关的对象。
接下来看一些主要的参数:
--server1:#配置server1的连接。
--server2:#配置server2的连接。
--character-set:#配置连接时用的字符集,如果不显示配置默认使用character_set_client。
--width:#配置显示的宽度。
--skip-table-options:#保持表的选项不变,即对比的差异里面不包括表名、AUTO_INCREMENT、ENGINE、CHARSET等差异。
-d DIFFTYPE,--difftype=DIFFTYPE:#差异的信息显示的方式,有[unified|context|differ|sql],默认是unified。如果使用sql,那么就直接生成差异的SQL,这样非常方便。
--changes-for=:#修改对象。例如--changes-for=server2,那么对比以sever1为主,生成的差异的修改也是针对server2的对象的修改。
--show-reverse:#在生成的差异修改里面,同时会包含server2和server1的修改。

范例

先创建两个表。

use study;create table test1(id int not null primary key,a varchar(10) not null,b varchar(10),c varchar(10) comment 'c',d int
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test1';create table test2(id int not null,a varchar(10),b varchar(5),c varchar(10),D int
)ENGINE=myisam DEFAULT CHARSET=utf8 COMMENT='test2';

不使用 --skip-table-options

mysqldiff --server1=root:root@localhost --server2=root:root@localhost --changes-for=server2 --show-reverse --difftype=sql study.test1:study.test2

c2f44ca83ddc45a5071feb3b1653c8e9.png使用 --skip-table-optionsb37c4e8deb9e6b4939ef0d1f1a9ba69b.png如果需要生成 SQL 文件,加上输出就可以了:

mysqldiff --server1=root:root@localhost --server2=root:root@localhost --changes-for=server2 --show-reverse --difftype=sql study.test1:study.test2 > output.sql

说明:执行 MySQL 语句时可能会遇到这样错误:Error 1054 – Unknown column ‘name’ in ‘aspect’

这是因为 mysqldbcompare 生成的 ALTER 语句中,用逗号 , 拼装了多条 ADDCHANGE 等语句,如果这些语句还包含 AFTER 关键字,就会提示这个错误并中断执行MySQL语句。解决的办法就是:去除 AFTER 及其后面的条件。

来源:https://wenjiangs.com/article/mysqldiff.html

邀你加入技术交流群,2023 我们一起卷!

推荐阅读 点击标题可跳转

root 与 sudo 的用法与区别,居然这么多人搞不清楚

ChatGPT 团队阵容揭秘!太强了。。。

Docker 翻脸,不再开源!

戴尔 PC 将完全退出中国!完整时间表曝光

看了这篇文章!我才知道mv命令真正使用方法

GPT-4 震撼发布!强大到感觉自己快失业了

偷偷爆料下 955 不加班公司名单(2023 年最新版!)

MySQL 服务器 CPU、磁盘、内存等硬件选型

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。点在看支持我们吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18265.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IBM停止招聘可被AI取代的职位;三星禁止员工使用ChatGPT;印象笔记官方AI免费课;清华美院AI绘画的高质量分享 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『IBM将停止招聘可被人工智能取代的职位』近8000名工人将被自动化取代 据彭博社报道,IBM首席执行官Arvind Krishna表示&am…

死磕数据库系列(三十一):MySQL 服务器 CPU、磁盘、内存等硬件选型

点关注公众号,回复“1024”获取2TB学习资源! 今天我将详细的为大家介绍 MySQL 服务器的磁盘及相关硬件选型的相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!更多关于MyS…

Linux 中 root 与 sudo 的用法与区别,居然这么多人搞不清楚。。。

点关注公众号,回复“1024”获取2TB学习资源! Linux 下面有两个概念可能大家接触的比较多,一个是 sudo 命令,还有一个是 root 账户。Sudo 命令可以以最高权限执行命令,而 root 账户下所有命令都有最高权限,也…

面试官:TCP 连接数最大不能超过 65535?那服务器是如何应对百万千万并发的?...

点关注公众号,回复“1024”获取2TB学习资源! 最大并发 tcp 连接数是多少呢? 首先,问题中描述的65535个连接指的是客户端连接数的限制。 在tcp应用中,server事先在某个固定端口监听,client主动发起连接&…

2023年春秋杯网络安全联赛春季赛 RE复盘(部分待补)

目录 sum Pytrans BWBA Poisoned_tea_CHELL 第一种找程序加密函数的方法 第二种找程序加密函数的方法 解密 这次的春季赛仍是被打爆了,re只做出了一题,发现自己还是太菜了,好在在后期复盘中又收获了许多新知识了,不亏。 su…

2023春秋杯春季赛WP-REVERSE(AK)

REVERSE sumPoisoned_tea_CHELLBWBAPytransEmoji ConnectOldSymbolicCode 浅浅写一下RE的WP~ sum 根据代码,可以看出程序只能输入数字,判断matrix数组对应下标的值是否为0,如果为0,则可以输入一个字符,根据代码逻辑&a…

Servlet基础学习

什么是Servlet? Servlet是一种用于接收web网页传回和输出到web的一个Java类,根据不同的实际需要,实现不同的Servlet来对网页数据进行处理。 Servlet的基本处理流程 在网页发起请求之后,编译器首先去寻找web网页的配置文件&…

react仿微信聊天室|react即时聊天IM系统|react群聊

reactredux仿微信聊天IM实战|react仿微信界面|react多人群聊天室 最近一直捣鼓react开发,就运用react开发了个仿微信聊天室reactChatRoom项目,基于reactreact-domreact-router-domreduxreact-reduxwebpack2.0antdesignwcPop等技术混合开发,实…

DES加密解密 Feistel算法网络结构 详讲

文章目录 简单知识导入:具体过程:IP置换( 64 − > 64 64->64 64−>64)轮函数--E扩展置换( 32 − > 48 32->48 32−>48)轮函数--与子密钥异或( 48 − > 48 48->48 48−&…

2023年春秋杯网络安全联赛春季赛Reverse题目复现

文章目录 一.sum1. 分析程序逻辑2.解数独矩阵3.解题脚本 二.Poisoned_tea_CHELL1. 重新识别函数及程序逻辑分析2.IDA动态调试(attach附加调试)3. 输入选项进行单步调试4.解题脚本 BWBAOldSymbolicCode 一.sum 1. 分析程序逻辑 这里直接贴上当时分析的结果,根据程序行为不难猜…

NLP相关知识点(慢慢更新)

一、基础概念 1.1. NLP 中的 Tokenization 是什么? NLP技术中 Tokenization 也可以被称作是“word segmentation”,直译为中文是指 分词。 分词是NLP的基础任务,按照特定需求能把文本中的句子、段落切分成一个字符串序列(其中的元素通常称…

SpringCould+Vue3-Element-Admin 登录接口,用户信息接口以及Token验证的实现【Taurus教育平台】

文章目录 一.SpringCouldVue3-Element-Admin 登录接口,用户信息接口以及Token验证的实现【Taurus教育平台】1.1 背景1.2 数据库 二、登录接口及其Token实现2.1 前端2.2 后端2.2.1 控制层2.2.2 service层2.2.3 工具类:CreateJwt2.2.4 Dao-Mapper 三、用户…

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析 0、前言text classificationemotions 数据集data visualization analysisdataset to dataframelabel analysistext length analysis text > tokenstokenize the whole dataset fine-tune transformersdistilbert…

Django通过nginx 部署(成功运行)

配置python版本和ssh启用root参考其它文章 完整项目路径 /root/projects/mysutra_pro 下级目录/root/projects/mysutra_pro/mysutra是源码目录 rootVM-12-2-debian:~/projects/mysutra_pro# ls db.sqlite3 manage.py ms_env mysutra rootVM-12-2-debian:~/projects/mysutr…

es Elasticsearch的增删改查(含数组操作)(类型,原理) - from chatgpt

父文章 算法中的特征的保存, es 和 mysql 和 odps hadoop hbase的区别_个人渣记录仅为自己搜索用的博客-CSDN博客 Elasticsearch如何做到数十亿数据查询毫秒级响应? - 知乎 ES系列之利用filter让你的查询效率飞起来_es filter_lucasma.eth的博客-CSDN博客 ES查询…

文心一言对比chatgpt

文章目录 一、 介绍二、 回复速度比较三、 写代码能力四、 做表格能力五、 写文案能力六、 解决数学问题能力七、 绘画能力八、 实时更新信息九、 总结 一、 介绍 文心一言对比chatgpt。 测试了上百个案例,挑选几个经典的案例。 二、 回复速度比较 百度文心耗时10…

CSDN chatGPT初体验

我的问题:用java实现一个B树 public class BTree {private int t;private Node root;private class Node {private int n;private boolean leaf;private int[] keys;private Node[] children;public Node(boolean leafNode) {this.n 0;this.leaf leafNode;this.ke…

chatgpt赋能python:Python岗位需求日渐增加

Python岗位需求日渐增加 Python编程语言在当前的IT行业中越来越受欢迎。其灵活性和易用性使得Python在各种领域中使用广泛,比如Web开发、数据科学、人工智能等。作为一名有10年Python编程经验的工程师,我认为Python是一种非常有前途的编程语言&#xff…

ChatGPT可能被滥用于网络犯罪

科技是一把双刃剑 ChatGPT一经发布,短时间内就成为了现象级的应用。其清晰明确的回答和丰富的知识,昭示着AI技术造福人类,彻底简化我们生活工作这一美好的未来愿景。对于解决各行各业的许多问题,ChatGPT也提供了另外一种思路&…

用ChatGPT构建网络设备表,并根据设备关系生成网络拓扑

构造一个数据表,存储包括交换机、路由器、防火墙、入侵检测、上网行为管理等设备的编号、序列号、IP、MAC、访问地址、用户名、密码、管理员、物理位置、上联设备ip等信息 下面是一个示例数据表: Device IDSerial NumberIPMACAccess URLUsernamePassword…