mysql源码安装分析_MySQL源码分析(0):编译安装及调试(转)

编译安装

为了实现MySQL的更高级别的性能调优,我们通常需要理解其内部实现机制,并对其进行优化调试。在下面的系列中,我们会分别介绍MySQL的部分内部实现机制。

首先我们介绍如何从源代码部署一台MySQL服务器。

1.下载MySQL Community Server源码

http://dev.mysql.com/downloads/ 本文中演示使用的是mysql-5.5.0-m2版本。

2.安装环境:

[root@localhost ~]# uname -a

Linux localhost.localdomain 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost ~]# gcc -v

......

Gcc-4.1.2 x86_64-redhat-linux

Thread model: posix

gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)

3.编译安装(以下命令全部以root身份运行)

(1)添加运行MySQL程序的mysql用户:

groupadd mysql

useradd mysql –g mysql

CFLAGS="-g –O0" CXX=gcc CXXFLAGS="-g –O0 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=Folder_you_want_to_install --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile  --enable-assembler --with-plugins=innobase --with-fast-mutexes

建议使用-O0选项,即不使用gcc优化代码,方便于在调试时可以直接看到代码。

--with-plugins=innobase,启用innodb存储引擎插件。

make && make install

此命令结束后应该能在安装目录下看到MySQL的文件了。

4.配置

配置MySQL的参数,可以support-files下配置文件的模板:

cp support-files/my-medium.cnf /etc/my.cnf

vi /etc/my.cnf

按照测试的需求修改,注意加上datadir和innodb等部分重要参数。

bin/mysql_install_db --user=mysql

这里安装必要的数据库文件,如MySQL的系统表,--user=mysql是用来运行mysql的用户。

5.测试

简单测试一下,运行mysqld_safe &

在RHEL系统上以root运行mysqld_safe时,会自动切换到mysql用户来运行mysqld程序。

查看mysqld进程,记录下启动时参数(斜体加粗部分),为今后的调试做准备。

[root@localhost ~]#ps aux | grep mysql

mysql    12261  0.0 13.0 1746120 200992 ?      Tl   Apr19   0:01 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --log-error=/usr/local/mysql/var/localhost.localdomain.err --pid-file=/usr/local/mysql/var/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306

root     12286  0.0  0.1 109396  2276 pts/3    S+   Apr19   0:00 mysql

root     22624  0.0  0.0  61192   748 pts/6    S+   10:20   0:00 grep mysql

mysqladmin –u root –p shutdown

这条命令会关闭mysqld

调试程序

安装结束,进入正题调试环节。通常Linux下程序员倾向于使用强大的gdb(GNU Project Debugger)来调试程序,可以查看程序的内部结构、设置断点、查看调用堆栈等。在本文中,我们尝试使用kdbg,其本质上是带有图形界面的gdb,更方便直观,但依赖 KDE桌面环境。

1.安装

yum install kdbg

2.启动kdbg并选择可执行程序libexec/mysqld。不同版本的kdbg在界面上可能不同

e7619ced4a2356de2c4e31847d870fa8.png

3.在execution->arguments中输入前面记录mysqld的启动参数

4944bfac4bbb5fd7bc0790c9817c4e4e.png

4.设置断点,按F5开始运行调试

d9acf9015a4d947fb8ca72ee6c8d9ce9.png

5.当程序运行到断点时会暂停,此时可以查看输出、调用栈和当前的堆栈值等

39f4c44befd027c980ee94bea9953c10.png

ad26eac268b9a77e4264e5bbfaafaf5c.png

大小: 34.9 KB

ad7c30ca295031bec39b55e36becb799.png

大小: 54 KB

33c04bfd9d055b23ea4adf4509db4806.png

大小: 41.1 KB

a7ee05609aa649d6d1b014e8cc03acdf.png

大小: 120.6 KB

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-02-03 18:23

浏览 1528

分类:数据库

评论

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

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

相关文章

前端做后台管理系统有前途吗_关于后台管理系统前端项目的思考

开发后台管理系统是大部分前端开发人员接触过的项目,如何更好的进行项目的搭建、组件的开发、数据结构的设计等等,这些都是需要考虑的问题。以下是我结合一些项目的经历和其他大佬的项目代码与技术分享,做出了对于后台管理系统中前端项目的思…

响应式编程优点 有效_什么是响应式编程?

响应式编程是一种通过异步和数据流来构建事物关系的编程模型。这里每个词都很重要,“事物的关系”是响应式编程的核心理念,“数据流”和“异步”是实现这个核心理念的关键。为了帮助大家理解这个概念,我们不妨以APP初始化业务为例来拆解一下这…

虚拟跳线软件干什么用的_视频教程:用 ESI 的虚拟跳线给你的声音添加效果

本视频讲述了如何在互联网上给你的声音添加效果。你可以使用任何想用的效果器,而且不仅可以输入你的声音,输入信号还可以是任何乐器音源,例如键盘或吉他,你甚至可以直播你的整个工程。请先看视频:视频中使用Bitwig给声…

极光推送java demo_极光推送- 3 分钟 Demo - 极光文档

3 分钟快速使用 JPush Android Demo本文目的在于,指导新接触极光推送的开发者,在短短几分钟时间内把极光推送跑起来:安装 Demo 客户端到手机在 Portal 上推送通知客户端收到推送并显示在状态栏创建极光推送开发者帐号Portal 上创建应用使用注…

java ldap添加用户名密码_java ldap用户密码md5加密

在这里不过多介绍ldap,因为这样的文章特别多,这里就简单直接的记录这一个问题。在springboot中通过引入spring-boot-starter-data-ldap,使用LdapTemplate真的挺方便,现在遇到一个问题,添加用户时,userPassw…

java dumpstack_Java获取执行进程的dump文件及获取Java stack

转发自https://blog.csdn.net/MCC_MCC_MCC/article/details/806231561.Windows/Linux环境下查看Java进程ID方法使用Java自带的工具VisualVM工具实现,在CMD或者是Linux终端下执行“jvisualvm”命令即可以进入VisualVM控制台,双击左侧的进程即可以查看到详…

mysql not in优化_实践中如何优化MySQL(收藏)

SQL语句的优化:1、尽量避免使用子查询3、用IN来替换OR4、LIKE前缀%号、双百分号、_下划线查询非索引列或*无法使用到索引,如果查询的是索引列则可以5、读取适当的记录LIMIT M,N,而不要读多余的记录6、避免数据类型不一致7、分组统计可以禁止排…

java 鼠标精灵_纯Java实现跨平台鼠标键盘模拟、找图找色,Java版按键精灵

由原本的Java使用JNI调用dll实现模拟辅助操作,升级到纯Java来实现,最新: https://github.com/xnx3/xnx31.[代码][Java]代码/*** 鼠标、键盘、延迟等基本操作*/public static void simple(){Robot robot new Robot();robot.delay(1000); //延…

o2oa二次开发比开发难吗_6年经验大牛,带你一起打开 Revit 二次开发的新世界大门...

​知乎视频​www.zhihu.com你好,这里是BIMBOX。一线的BIM工作者使用最多的软件是Revit,它功能强大,涵盖建筑、结构、MEP等专业,也正因为涵盖专业太多,它显得有点繁琐和笨拙,不仅约束了创造力,有…

python中的str方法和repr方法_Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些

Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些发布时间:2020-11-05 17:11:48来源:亿速云阅读:95作者:Leah本篇文章给大家分享的是有关Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些,小编觉得挺实用的…

requestbody前端怎么传_学习前端开发前的基础知识了解「V1001」

一、什么是http协议?什么是协议,就是一群人协商好了,统一认知的规则。【例】你,我,他,还有她他他,大家一致认定结婚的时候都要给份子钱,这种大家认同的就是协议。http协议,就规定了…

postmapping注解参数说明_从零搭建后端框架:优雅的参数校验Validator

前两天项目群里发生了关于参数校验的问题讨论,很多开发团队没有对这些做硬性规范时,还是有很多童鞋本着“不多事”的原则,产品文档里没有特别说明就不写。对于2B的产品经理来说,因为一次新迭代,可能回涉及到N多的页面&…

ups计算软件_浅析UPS与蓄电池与逆变器的区别

早期的电信机房中,通常采用将220V交流电源经过整流,为48V电池组充电,由电池组直接给程控交换机供电。随着计算机网络和通信网络在电信机房的应用,需要为其提供高质量的220V的交流电源。由于有现有的48V电池组,所以通常…

django调用java_07.手把手教将深度学习利用Django将模型发布成服务供java调用

标题问题一.python发布成服务1.先建立一个深度学习模型并训练好2.建立一个预测方法去调用训练好的模型3.建立一个Django工程4.将python利用模型预测的代码放入Django项目中5.get请求加上参数6.github二.JAVA请求url,返回json数据问题python作为一个含科学计算与深度…

springboot转发http请求_网易后端实习生分享:Springboot异常和错误处理规范

由于错误在所难免,异常处理已经成为开发工作中不可或缺的部分。在web开发中,我们通常不希望用户看到一个写满StackTrace的错误页面;同时,我们希望出现错误或发生异常时,开发运维人员可以看到详细的错误信息&#xff0c…

springmvc 拦截器_Spring MVC拦截器学习

1 介绍Spring Web MVC是基于Servlet API构建的原始Web框架。2 拦截器2.1 定义springmvc框架的一种拦截机制2.2 使用2.2.1 两步走实现HandlerInterceptor接口注册(xml或者注解 )2.2.2 HandlerInterceptor接口实现HandlerInterceptor接口import org.spring…

java文件读入原理_描述一下JVM加载class文件的原理机制

1、JVM 简介JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从“Hello World ”开始的,然后会写个复杂点class ,然后再找一些开源框架,比如Spring ,Hibernate 等等,再然后就开发…

微信流媒体直播java_微信小程序直播带货教程

微信小程序直播带货教程微信小程序正式推出直播带货组件,很多正在使用 “api工厂” 的用户,这几天一直在问,现有小程序如何使用直播带货的功能,需要不需要做很复杂的改动?是否需要重新开发小程序?使用门槛高…

vue和java实现页面增删改_SpringBoot-Vue实现增删改查及分页小DEMO

前言主要通过后端 Spring Boot 技术和前端 Vue 技术来简单开发一个demo,实现增删改查、分页功能以及了解Springboot搭配vue完成前后端分离项目的开发流程。开发栈前端开发工具:WebStorm开发框架:vue axios包管理工具: npm打包工具&#xff1…

读取24位ad的值_实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值

摘要:一文带你用小熊派开发板动手做土壤湿度传感器。一、实验准备1.实验环境一块stm32开发板(推荐使用小熊派),以及数据线已经安装STM32CubeMX已经安装KeilMDK,并导入stm32开发板对应的芯片包(小熊派使用的是STM32L431…