新手如何调试 MySQL?看这一篇就够了

新手如何调试 MySQL?看这一篇就够了,第1张

前几天看到姜老师的旧文 用 VSCode 编译和调试 MySQL,每个 DBA 都应 get 的小技能[1] , 文末留了一个思考题,如何修改源码,自定义版本,使得 select version() 输出自定义内容

调试过程参考 macOS VSCode 编译调试 MySQL 5.7[2]

内部 Item 对象参考 从SQL语句到MySQL内部对象[3]

源码面前没有秘密,建义对 DB 感兴趣的尝试 debug 调试。本文环境为 mac + vscode + lldb

vscode 插件:

mysql 源码:

补丁: MySQL <= 8.0.21 需要对 cmake/mysql_version.cmake 文件打补丁 (没有严格测试所有版本)

创建 cmake-build-debug 目录,后续 mysql 编译结果,以及启动后生成的文件都在这里

在 mysql 工程目录下面创建 .vscode/settings.json 文件

内容没啥好说的,都是指定目录及 boost 配置,其中 WITH_DEBUG 打开 debug 模式,会在 /tmp/debug.trace 生成 debug 信息

View -> Command Palette -> CMake: Configure 执行后生成 cmake 配置

View -> Command Palette -> CMake: Build 编译生成最终 mysql 相关命令

发现老版本编译很麻烦,各种报错,mysql 5.7 代码量远超过 5.5, 只能硬着头皮看 5.7

首先初始化 my.cnf 配置,简单的就可以,共它均默认

初始化数据文件,非安全模式,调试用

由于用 vscode 接管 mysql, 所以需要配置 .vscode/launch.json

然后点击 run and debug mysqld

mysql 启动,看到输出日志无异常,此时可以用 mysql-client 连接

首先在 sql_parser.cc:5435 处打断点

mysql_parse 是 sql 处理的入口,至于 tcp connection 连接先可以忽略

执行上述 sql 自动跳转到断点处, Step Into , Step Over , Step Out 这些调试熟悉下即可

接下来分别调用主要函数: mysql_execute_command , execute_sqlcom_select , handle_query , select->join->exec() , Query_result_send::send_data , Item::send , Item_string:val_str , Protocol_text::store , net_send_ok

启动 mysql 时 init_common_variables 会初始化一堆变量,其中会调用 set_server_version 生成版本信息,修改这个就可以

看好条件编译的是哪块,修改即可, 重新 CMake: Build 编译再运行

这里不做过深分析,简单讲

sql_yacc.cc 函数 PTI_function_call_generic_ident_sys 解析 sql, 识别出 version() 是一个函数调用

find_native_function_builder 查找 hash 表,找到对应 version 函数注册的单例工厂函数

mysql 启动时调用 item_create_init 将这些函数 builder 注册到 hash 表 native_functions_hash

MySQL 代码太庞大,5.1 大约 100w 行,5.5 130w 行,5.7 以后 330w 行,只能挑重点读源码。最近很多群里的人在背八股,没必要,有那时间学着调试下源码,读读多好

原文出处:https://mp.weixin.qq.com/s/lJqb0kMtnAUmqUIWCShkIQ

要确认MySQL漏洞哪个补丁可以修复,首先要了解漏洞的类型和版本,然后到MySQL官网查看可用的补丁,根据漏洞的类型和版本来确定是否有可用的补丁。如果发现有可用的补丁,可以下载补丁,按照补丁的说明进行安装,然后重启MySQL服务器,检查补丁是否安装成功,如果安装成功,说明漏洞已经修复,如果安装失败,可以尝试重新安装补丁,或者查询MySQL官网获取更多帮助。

上帝_无言

关注

Oracle数据库打补丁方法 原创

2022-04-29 17:54:42

1点赞

上帝_无言

码龄5年

关注

本篇仅针对DB 12.1.0.2.0 版本12C 的Opatch工具打补丁来讲解

Oracle 补丁过程

一,全库备份 oracle

用户:

abcdef

密码:

123

数据库:

ruru

全库导出命令

exp abcdef/123@ruru file=E:\bak.dmp full=y

二,关闭实例,关闭进程,关闭监听器。

1.开始菜单搜索,打开Sqlplus, 输入 /as sysdba 登录

2.执行 shutdown immediate 关闭数据库实例,

3.停止相关服务,打开任务管理器,服务列,找到oracle相关服务右键停止

4.停止相关进程,打开任务管理器,进程列,找到相关进程 结束进程。

三,备份Opatch, 解压补丁,打补丁。

1.opatch 文件夹备份,防止错误,可以恢复。

2.开始菜单搜索 命令提示符, 右键 以管理员身份运行,

进入到 %ORACL_HOME%\APP\product\12.1.0\dbhome_1\OPatch

再进入相关补丁文件内 执行 …\opatch apply 命令执行打补丁过程

最后显示 Successed 即为打补丁成功。

四,启动相关进程,启动oracle, 更新sql.

1.启动之前关闭的服务器 服务列中相关服务,点击开始,

2.使用sqlplus连接数据库,启动实例

开始菜单搜索,打开Sqlplus, 输入 /as sysdba 登录

3.使用 startup 命令启动数据库实例。

4. 使用 PL/SQL 测试是否可以正常连接数据库,

如果连接失败 运行打开PDB, 如果正常连接 则不需要。

alter pluggable database all open

5.更新注册信息 到数据表,

在sqlPlus中 执行该命令

@?/rdbms/admin/dpload.sql

最后结果出现如下图,即为打补丁成功。

文章知识点与官方知识档案匹配

MySQL入门技能树使用数据库 创建和删除数据库

29055 人正在系统学习中

打开CSDN,阅读体验更佳

Windows环境下给oracle打补丁详细教程_范微的博客

检测当前数据补丁安装情况。C:\WINDOWS\system32>opatch lsinventory Invoking OPatch 11.1.0.6.6 Oracle 中间补丁程序安装程序版本 11.1.0.6.6 版权所有 (c) 2009, Oracle Corporation。保留所有权利。 Oracle 主目录 : F:\app\mr_...

oracle滚动打补丁,使用Oracle Opatch打补丁_从一小姐的博客

1: MOS上下载对应的补丁(support.oracle.com)2: 在打补丁前,有条件的情况下对数据库进行一次全备份检查数据库环境: 每个补丁的应用都有一定的环境,包含数据库版本,Opatch版本,我们通过命令opatch Isinventory来进行检查, *** 作如下:...

Oracle数据库如何打补丁

Oracle安装好后,还需要打上补丁,才能够稳定地运行的哦。

mysql漏洞如何打补丁_【补充】Mysql数据库测试及使用环境搭建教程

一、背景介绍Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称叫做MSF。Metasploit作为全球最受欢迎的工具,不仅仅是因为它的方便性和强大性,更重要的是它的框架。它允许使用者开发自己的漏洞脚本,从而进行测试。那么如何利用Metasploit(msf)进行Mysql弱口令爆破呢?如何搭建Sql靶机呢?接下来让我们一起学习!二、资...

继续访问

Oracle 11.2.0.4打补丁的方法_蚁库的博客

Oracle 11.2.0.4打补丁的方法 一、概述 本文主要介绍了Oracle 11.2.0.3 升级到11.2.0.4的补丁的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 二、打补丁 所需补丁及高版本opatch...

oracle数据库如何打补丁_DoveFeng的博客

为解决手工方式的缺陷,从9.2版开始,Oracle公司设计实现了个别补丁安装管理工具opatch.opatch使用一个称为inventory的系统数据结构(严格说是与oui共享inventory),集中管理所有已安装的个别补丁个别补丁的安装和卸载都使用opatch命令完成,冲突检测...

Oracle补丁就该这么打

Oracle补丁就该这么打 原创 金震宇 IT那活儿 今天 [ 补丁集下载 ] oracle打补丁最常见原因为bug修复或安全迎检漏洞修复需要打到最新的补丁版本。下文的经验之谈是基于rac环境,19c版本的最新补丁集的过程分享。 可以参考《Assistant:Download Reference for Oracle Database/GI Update, Revision, PSU,SPU(CPU), Bundle Patches, Patchsets and Base Releases (Doc I

继续访问

最新发布 Oracle rac 19C(19.16)补丁升级(OPatch 34130714) *** 作过程

在升级完成后本次 *** 作有个实例未能启动,手动通过集群命令进行拉起此告警实例。6.完成数据字典更新后关闭实例进行OJVM升级,再次进行数据字典升级。6.完成数据字典更新后关闭实例进行OJVM升级,再次进行数据字典升级。2.两个节点grid、oracle替换OPatch工具。2.两个节点grid、oracle替换OPatch工具。2.两个节点备份grid、oracle家目录。2.两个节点备份grid、oracle家目录。5.节点一所有实例,进行数据字典更新。5.节点一所有实例,进行数据字典更新。

继续访问

记录Oracle rac 19C(19.15)补丁升级(OPatch 33803476) *** 作过程

提示以下是本篇文章正文内容,下面案例可供参考。

继续访问

Windows环境下给oracle打补丁详细教程

Windows环境下给oracle打补丁详细教程

继续访问

oracle 打补丁

oracle 11G补丁安装

继续访问

小白入门(九):Oracle数据库打补丁 *** 作过程

文章目录前言简要介绍:一.OPatch 更新:1、检查目前补丁包版本($ORACLE_HOME下):2、创建目录备份当前Opatch工具:3、传输压缩包并解压Opatch工具至$ORACLE_HOME下:二、应用PSU补丁:1、Oraclehome下创建目录解压PSU补丁:2、执行oracle 中间补丁安装程序:3、停止监听以及数据库:4、应用补丁:三、数据库应用补丁:1、升级数据库数据字典、编译无效对象 :2、查看 PSU 更新信息3、opatch 检查:1、升级前检查是否有冲突1.1测试兼容性, 如果之

继续访问

oracle 补丁,Oracle补丁介绍一

【前言】保证数据库的稳定与安全运行是DBA的价值所在,Oracle Database本身也是一个软件,随着系统的使用场景和使用深度的增加一些原本没被发现的漏洞或BUG就会逐渐被发现。所以成熟的IT企业,往往会定期对数据库进行安全检查和补丁的更新;【一】Oracle版本命名规则在进行Oracle更新补丁之前,先对Oracle的版本命名有个认识。从9i之后,oracle版本命名规则定义如下:A.B.C...

继续访问

热门推荐 mysql[漏洞打补丁]小版本升级5.7.25到5.7.28

mysql[漏洞]小版本升级 事件背景 近日,公司进行安全扫描,发现mysql存在漏洞,高危漏洞编号为(CVE-2019-3822),此外还有多个中危,低危漏洞,目前mysql版本为5.7.25 解决方案 对mysql进行小版本升级到5.7.28,生产环境无法联网,用rpm 包离线安装,选择就地升级。 Mysql的两种升级方式 就地升级(In-place Upgrade) 关闭旧版本mys...

继续访问

Oracle打补丁步骤

1、登录MOS,在patches&updates查找自己想要安装的补丁号或者bug code,下载补丁。同时查阅readme,这里面写的是怎么安装补丁以及安装补丁的事项。 2、将下载好的zip文件传入要打补丁的主机。解压到一个文件夹里(可以是自己临时创建的一个文件夹<PATCH_TOP_DIR>,但需要注意整个文件夹包括里面的文件的属主都修改为oracle) 3、关闭数据库...

继续访问

Oracle 11.2.0.4 RAC 手动打补丁

1 补丁介绍 GI补丁一般包括DB补丁,在打GI补丁过程中会自动打上DB补丁。也就是说GI版本>=DB版本 比如下载GI补丁包p26635745_112040_Linux-x86-64,解压其实里面包括22502505、26392168、26609929三个目录,而DB补丁包p26392168_112040_Linux-x86-64.zip解压后就是26392168目录 1. 1 下载补丁和...

继续访问

oracle滚动打补丁,ORACLE打补丁的方法和案例

打补丁使用opatch工具,具体 *** 作方法以补丁包中的readme.txt为准1.查看某个补丁是否安装的方法(下面命令不行就升级opatch)$ORACLE_HOME/OPatch/opatchlsinventory2.下载补丁包查看当前opatch版本。Oracle 11.2.0.1.0自带的opatch版本是11.1.0.6.6。补丁包的README.html中有描述该补丁或PSU需要的最低版本...

继续访问

oracle滚动打补丁,Oracle打补丁过程补丁7272646

redhat enterprise linux 6.1安装oracle 11.1.0.6.0,会提示错误:OUI-18001:the operating systemRedHat enterprise linux 6.1安装Oracle 11.1.0.6.0会提示错误:OUI-18001:the operating system 'Linux


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8556783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存