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,一经查实,立即删除!

相关文章

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

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

用python绘制熊猫图案_绘制带有熊猫和Matplotlib的一分钟烛台

给出了以下Pandas数据帧的示例date open high low close volume0 2015-03-13 08:00:00 71.602 71.637 71.427 71.539 0.0002491 2015-03-13 08:01:00 71.541 71.563 71.461 71.501 0.0002152 2015-03-13 08:02:00 71.521 71.537 71.504 71.533 0.0000483 2015-03-13 08:03:00 7…

mysql修改主从复制id_mysql主从复制设置

三、mysql复制master和每个slave是通过unique ID来区分的(server-id选项),而且每个slave需要配置好master的主机名,日志文件名,和日志位置这些可以通过在slave会话中使用命令CHANGE MASTER TO ,存储在slave的master.info文件中--begin1.在mas…

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

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

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

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

利用python进行数据分析第一版和第二版区别_《利用Python进行数据分析·第2版》第1章 准备工作...

1.1 本书的内容本书讲的是利用Python进行数据控制、处理、整理、分析等方面的具体细节和基本要点。我的目标是介绍Python编程和用于数据处理的库和工具环境,掌握这些,可以让你成为一个数据分析专家。虽然本书的标题是“数据分析”,重点确实Py…

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

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

python猴子偷桃_Python实例100个(基于最新Python3.7版本)

Python3 100例原题地址:http://www.runoob.com/python/python-100-examples.htmlgit地址:https://github.com/RichardFu123/Python100Cases转载请标注:https://blog.csdn.net/weixin_41084236/article/details/81564963原例为Python2.7版本重…

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

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

python什么元素为真_如何使用Python基础内置函数

如何使用Python基础内置函数发布时间:2020-08-05 13:46:59

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控制台,双击左侧的进程即可以查看到详…

python语言程序设计赵璐课后答案_Python语言程序设计

Q:为什么越来越多的学校和专业已经或者计划开设Python程序设计相关课程?A:相较于其它大部分的通用型程序设计语言,Python的基础语法相对简单,且在很多热门的领域都有着功能强大而全面的第三方库,使得那些即…

java println 数组_java 数组输出

那就把两个for循环的顺序改动一下,把条件也改一下就好。System.out.println("--------------------------武侠小说列表-----------------------------");System.out.println("序号\t\t""名称\t\t""作者\t\t""简介&quo…

python中find函数运算结果类型_Python 运算符与数据类型

Python 运算符运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算,在Python中运算符大致可以分为7种类型:算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算等,下面的例子将依次介绍这几种运算符的使用技巧.◆算数运算符◆算术运算(arithmetic operators)符…

python基本概念_python基本概念-关键要素

1. 要素1: 数据类型Python提供了几种内置的数据类型,现在我们只关注其中两种。Python使用int类型表示整数(正整数或负整数),使用str类型表示字符串(Unicode字符序列)。如果需要将一个数据项从某种类型转换为另一种类型,可以使用语…

java jar 没有主清单属性_Spring Boot jar中没有主清单属性的解决方法

使用Spring Boot微服务搭建框架,在eclipse和Idea下能正常运行,但是在打成jar包部署或者直接使用java -jar命令的时候,提示了xxxxxx.jar中没有主清单属性:D:\hu-git\spring-xxx-xxx\target>java -jar spring-cloud-eureka-0.0.1…

python分行_基于python实现对文件进行切分行

针对配置文件进行切分,重组,每隔30行为一段,进行重新生成功能。代码如下#!/usr/local/python/bin/python# codingutf-8import sysimport reimport osf open(config.conf,r)#判断文件条数def file_num(filename):num_col 0with open(filenam…

java 使用适当的签名_关于数字签名和policy文件设置!

目前做一项目,jbuilder4oraclewindows2000(linux),打算用appletservlet做成分布式b/s结构,其中有两个关键技术难点:1:与word,excel等程序集成。用jintegra解决(多谢路人甲等人的指点)2:applet存取客户机(browser)上的本地文件(主要…

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); //延…