1、MySQL源码分析整理稿MySQL源码分析Jon Yao编译安装为了实现MySQL的更高级别的性能调优,我们通常需要理解其内部实现机制,并对其进行优化调试。在下面的系列中,我们会分别介绍MySQL的部分内部实现机制。首先我们介绍如何从源代码部署一台MySQL服务器。1. 下载MySQL源码本文中演示使用的是mysql-5.5.8版本。2. 安装环境:rootlocalhost # uname -aLinux nx 2.6.35-24-generic #42-Ubuntu SMP Thu Dec 2 01:41:57 UTC 2010 i686 GNU/Linuxrootlocalhost #
2、gcc -vUsing built-in specs.Target: i686-linux-gnuConfigured with: ./src/configure -v -with-pkgversion=Ubuntu/Linaro 4.4.4-14ubuntu5 -with-bugurl=file:/usr/share/doc/gcc-4.4/README.Bugs -enable-languages=c,c+,fortran,objc,obj-c+ -prefix=/usr -program-suffix=-4.4 -enable-shared -enable-multiarch -enab
3、le-linker-build-id -with-system-zlib -libexecdir=/usr/lib -without-included-gettext -enable-threads=posix -with-gxx-include-dir=/usr/include/c+/4.4 -libdir=/usr/lib -enable-nls -with-sysroot=/ -enable-clocale=gnu -enable-libstdcxx-debug -enable-objc-gc -enable-targets=all -disable-werror -with-arch-
4、32=i686 -with-tune=generic -enable-checking=release -build=i686-linux-gnu -host=i686-linux-gnu -target=i686-linux-gnuThread model: posixgcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)添加运行MySQL程序的mysql用户(root权限): groupadd mysql useradd mysql g mysql cmake . -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE
5、_INSTALL_PREFIX:PATH=/usr/local/mysql -DCOMMUNITY_BUILD:BOOL=ON -DENABLED_PROFILING:BOOL=ON -DENABLE_DEBUG_SYNC:BOOL=OFF -DINSTALL_LAYOUT:STRING=STANDALONE -DMYSQL_DATADIR:PATH=/usr/local/mysql/data -DMYSQL_MAINTAINER_MODE:BOOL=OFF -DWITH_EMBEDDED_SERVER:BOOL=ON -DWITH_EXTRA_CHARSETS:STRING=all -DWI
6、TH_SSL:STRING=bundled -DWITH_UNIT_TESTS:BOOL=OFF -DWITH_ZLIB:STRING=bundled -LH make & make install3. 配置配置MySQL的参数,可以support-files下配置文件的模板:跳转到MySQL安装路径,cmake指定的地址:/usr/local/mysqlcp support-files/my-f /etc/fvi /etc/f#/# Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = /us
7、r/local/mysql/datainnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /usr/local/mysql/data# You can set ._buffer_pool_size up to 50 - 80 %# of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M# Set ._log_file_size
8、to 25 % of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50#/按照测试的需求修改,注意加上datadir和innodb等部分重要参数。修改/usr/local/mysql用户访问权限,chown R mysql .chgrp R mysql . 软连接,配置MySQL的资源文件路径/usr/local/share/mysql - /usr/local/mysql/shar
9、e/设置path环境变量,方便实用:PATH=/usr/local/mysql/bin:/usr/JDK/bin:设置服务启动cp support-files/my.server /etc/inid.d/mysqlvi /etc/init.d/mysql修改配置路径basedir=/usr/local/mysqldatadir=/usr/local/mysql/datamysqld_pid_file_path=/usr/local/mysql/data/nx.pid4. 安装数据库bin/mysql_install_db -user=mysql这里安装必要的数据库文件,如MySQL的系统表,-
10、user=mysql是用来运行mysql的用户。5. 试运行服务简单测试一下,运行/etc/init.d/mysql start在Ubuntu系统上以root运行mysqld_safe时,会自动切换到mysql用户来运行mysqld程序。查看mysqld进程,记录下启动时参数(斜体加粗部分),为今后的调试做准备。rootlocalhost # ps aux | grep mysqlroot 20023 0.8 0.0 1896 584 pts/0 S 19:36 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe -datadir=/usr/local/
11、mysql/data -pid-file=/usr/local/mysql/data/nx.pidmysql 20446 2.6 2.7 320624 27848 pts/0 Sl 19:36 0:00 /usr/local/mysql/bin/mysqld -basedir=/usr/local/mysql -datadir=/usr/local/mysql/data -plugin-dir=/usr/local/mysql/lib/plugin -user=mysql -log-error=/usr/local/mysql/data/nx.err -open-files-limit=655
12、35 -pid-file=/usr/local/mysql/data/nx.pid -socket=/tmp/mysql.sock -port=33066. 停止服务/etc/init.d/mysql stop调试安装结束,进入正题调试环节。通常Linux下程序员倾向于使用强大的gdb(GNU Project Debugger)来调试程序,可以查看程序的内部结构、设置断点、查看调用堆栈等。在本文中,我们尝试使用Eclipse CDE,其本质上是带有图形界面的gdb,更方便直观,但依赖Java桌面环境。1. 安装到www.eclipse.org下载最新版的Eclipse C+ 版本2. 在调试选
13、项中输入前面记录mysqld的启动参数。3. 设置断点,按F5开始运行调试。4. 当程序运行到断点时会暂停,此时可以查看输出、调用栈和当前的堆栈值等。参考资料http:/www.kdbg.org/主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改。源码结构(MySQL-5.5.8)1. BUILD: 内含在各个平台、各种编译器下进行编译的脚本。如compile-pentium-debug表示在pentium架构上进行编译的脚本。2. Client: 客户端工具,如mysql, mysqladmin之类。3. Cmake:新版mysql使用编译配置初始化工具包4.
14、Cmd-line-utils: readline, libedit工具。5. Config: 给aclocal使用的配置文件。6. Dbug: 提供一些调试用的宏定义。7. Docs: 文档库8. Extra: 提供innochecksum,resolveip等额外的小工具。9. Include: 包含的头文件10. libmysql: 库文件,生产libmysqlclient.so。11. libmysql_r: 线程安全的库文件,生成libmysqlclient_r.so。12. libservices: 5.5.x中新加的目录,实现了打印功能。13. Man: 手册页。14. Mysql-test: mysqld的测试工具一套。15. Mysys: 为跨平台计,MySQL自己实现了一套常用的数据结构和算法,如string, hash等。16. Packaging: 打包工具包17. Netware: 在netware平台上进行编译时需要的工具和库。18. Plugin: mysql以插件形式实现的部分功能。19. Pstack: 异步栈追踪工具。20. Regex: 正则表达式工具。21. Scripts: 提供脚本工具,如mysql_install_db等22. Sql: mysql主要代码,将会生成mysqld文件。23. Sql-ben
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1