MySQL 编译安装并且开启DEBUG模式
因为想分析下mysql中一些操作的内部执行过程,单纯的看源码太枯燥了,所以决定结合mysql的执行过程来分析,mysql作为一款成熟的数据库软件,在设计的时候就考虑到了调试的问题,只是想开启调试模式的话,要编译源代码不能直接用rpm的安装方式,我是编译安装的5.7.16的版本,这里记录一下安装过程,以后再用就不用四处查资料了。
这里记录的只是最简单的编译安装模式,只是开启了DEBUG模式。首先编译过程中会产生大于3.6G左右临时文件,时间大约花费30分钟左右。
编译或者安装过程中如果出现任何错误,推荐删除缓存文件,从头再来,笔者抱着侥幸的心试过,后期登录数据库的时候出现了段错误,深层原因是线程违规访问了数据,最根本原因是缺失依赖导致没走mysql的设置文件,走了默认设置,出现了类似不兼容的问题。
1.首先检查必须的依赖软件冲突:
检查mariadb,这个如果不卸载,安装完毕之后启动服务会出错。
[root@ ~]# rpm -qa|grep mariadb
mariadb-libs-5.5.-.el7_0.x86_64
[root@ ~]# rpm -e mariadb-libs-5.5.-.el7_0.x86_64 --nodeps
检查是否安装了必须的依赖,如果缺失,在cmake的时候会出现各种错误,gcc、gcc-c++、bison-devel、ncurses-devel。
2.首先下载源码包:wget http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.16.tar.gz 。如果是服务器下载,最好是采用cdn的,速度能达到180+M/S,如果是个人电脑下载,可能mysql默认的是dev的网址,只要版本没错,应该就没问题。
3.解压:tar xvf mysql-5.7.16.tar.gz。
4.进入解压的文件夹,执行cmake,执行的时候要带编译参数,带参数的目的一部分是开启调试模式,一部是因为mysql在编译的时候回自动检查部分依赖,如果没有可以设置自动下载。
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mysql/data \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE= \
-DDOWNLOAD_BOOST= \
-DWITH_BOOST=/usr/local/boost \
-DWITH_DEBUG= \
-DCURSES_LIBRARY=/usr/lib/libncurses.so \
-DCURSES_INCLUDE_PATH=/usr/include
其中DDOWNLOAD_BOOST、DWITH_BOOST代表如果boost不存在是否自动下载,如果不设置并且本地没有,编译会失败,DWITH_DEBUG=1表示开启调试模式。如果编译过程中出现缺失libncurses.so,仍旧是依赖没有安装完整,如果本机有,可以手动制定位置,如果没有就安装。
5.make:很多人喜欢make && make install,这里最好分开使用,那个地方出了错,容易分辨。
6.make install:安装,安装完毕之后注意最后几行记录,它表示生成的mysql.server在什么位置,我的是在/usr/local/mysql/support-files文件夹下。mysql文件在/usr/local/mysql/bin文件夹下。
7.生成配置文件、生成权限。生成各种文件夹。
在/usr/local/mysql/support-files路径下有mysql自带的默认配置文件,将这个文件拷贝到/etc目录下并重命名为my.cnf,mysql启动的时候会首先在这个目录下找配置文件,默认的配置文件内容太少了,而且没指定错误文件的位置,这里修改一下,我的配置是:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL. [mysqld] # Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at % of total RAM for dedicated server, else %.
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks
# symbolic-links=
#
# innodb_buffer_pool_size = 128M
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin # These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = ..... # Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
这里我手动指定了,数据文件,sock文件,pid文件和错误文件的路径,这些路径明确了,接下来就好新建文件夹并赋予权限了。
按照设置里面新建好对应的路径文件:/var/lib/mysql;/var/log/;/var/run/mysqld/,并且给这些路径都赋予mysql权限,如果不权限不足,后期mysql服务或者mysql登录会有异常。
chown -R mysql.mysql /var/run/mysqld/
chown -R mysql.mysql /tmp
chown -R mysql.mysql /var/lib/mysq
chown -R mysql.mysql /var/log
因为前面编译的时候指定了一个参数是:DMYSQL_UNIX_ADDR=/tmp/mysql.sock,这个如果不处理,连接mysql的时候会出现错误,其实错误的原因也是权限问题,我试着修改这个路径的权限,但是没解决问题,最后的方法是新建了快捷方式:ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock。
8.到这里基本的工作就做完了,接下来是生成第一次登陆的密码,找到mysqld,使用mysqld --initialize命令来生成密码,这个生成的密码会打印到屏幕上,应该是在输出的最后几行,把这个密码复制下来,备用。
9.所有工作完成之后,启动系统,如果想开调试模式,启动的时候要加参数:/usr/local/mysql/support-files/mysql.server start --debug --console &,如果不出错误,myslq就已调试的模式启动了。调试文件在:/tmp/mysqld.trace中,注意:这个文件大小增长很快,如果不是硬盘很大,不建议mysql在调试模式下长期运行。
安装过程中一定要仔细注意分析错误信息,只要能找准问题所在,解决方案google上都有,mysql在启动或者登录过程中出了错误,mysql的错误日志中也有详细记录,有问题先看日志。
安装过程中参考了很多人的文章,不能一一列举,感谢大家的帮助,谢谢!
MySQL 编译安装并且开启DEBUG模式的更多相关文章
- ubuntu上安装mysql 编译安装
为什么要折腾?首先说明的是ubuntu上安装mysql等软件是非常容易简单的,其简单的程度盖过windows上的安装,一句sudo apt-get install就可以搞定.如果想用最简便的方法安装m ...
- Nginx PHP MySql 编译安装
以CentOS5.6为平台编译安装.确保系统已经安装gcc/gcc-c++编译器! 1.Nginx-1.0.14 2.PHP-5.3.10 3.MySql-5.1.61 安装相关依赖开发库: auto ...
- Mysql编译安装及优化
采取编译安装的方法,其好处为:编译安装与平台无关,安装的MySQL目录独立,维护起来方便,而且拥有更好的性能. 环境:CentOS release 6.9 (Final) x86_64 1)下载my ...
- 2、mysql编译安装
2.1前言: 此文档介绍的是cmake编译安装的方式: 二进制的安装方式在linux运维_集群_01中有详细的安装说明(已经编译完成,进行初始操作即可) 初始化操作时需要对编译好的mysql进行一下备 ...
- mysql 编译安装
mysql 编译安装方式: ```cd /home/oldboy/tools``` 创建 目录 if not have then mkd ...
- centos mysql 编译安装
centos mysql 编译安装 1.安装 创建MySQL用户 sudo useradd mysql 下载MySQL的源码包,我们这里使用的时5.5.18 安装依赖 sudo yum -y inst ...
- ubuntu 16.04 编译安装 amule (开启GUI)
安装依赖 $ -dev libgeoip-dev zlib1g-dev libupnp-dev libboost-all-dev libwxbase3.-dev libwxgtk3.-dev buil ...
- mysql编译安装(详细)(转载)
mysql编译安装(详细) 一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake,从 ...
- rpm安装MySQL5.5后配置,在centos5上;mysql编译安装在centos6.5上;
[1] 没有/etc/my.cnf: rpm包安装的MySQL是不会安装/etc/my.cnf文件的:处理:cp /usr/share/mysql/my-huge.cnf /etc/my.cnf [2 ...
随机推荐
- Nginx搭建https服务器
HTTPS简介 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来讲就是HTTP的安全版.即H ...
- Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示
注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...
- [转]ExtJS之遍历Store
原文地址:http://blog.sina.com.cn/s/blog_67cc6e7d0100ox6u.html ExtJS中,一般很少需要遍历Store,因为它的selectModel很好用,无论 ...
- .net项目在linux平台的CI流程(基于Jenkins+mono+jexus)
内容较多,主要分为以下4方面内容: Jenkins的安装部署(centos 7+) .net在linux平台CI流程所需的插件管理&配置 Jenkins配置连接Gitlab(也可使用对应插件连 ...
- 用TTS实现文本转语音
最近被toefl单词虐成狗::>_<:: 想做一个可以自动把单词转成语音的软件,这样就可以在路上戴耳机边走边听啦~ 用微软的TTS语音库可以很容易地实现.早期的TTS要想实现中英文混合朗读 ...
- TypeScript Type Compatibility(类型兼容)
TypeScript中的类型兼容是基于结构归类的.在普通分类的相比之下,结构归类是一种纯粹用于将其成员的类型进行关联的方法.思考下面的代码: interface Named { name: strin ...
- PHP解决抢购、秒杀、抢楼、抽奖等阻塞式高并发库存防控超量的思路方法
如今在电商行业里,秒杀抢购活动已经是商家常用促销手段.但是库存数量有限,而同时下单人数超过了库存量,就会导致商品超卖甚至库存变负数的问题. 又比如:抢购火车票.论坛抢楼.抽奖乃至爆红微博评论等也会引发 ...
- 数据库大数据处理---复制(SQLServer)
复制? 复制起初并不是用于作为高可用性功能而设计的,实际上复制的概念就像其名称一样,用于复制数据.比如将某个库中的数据“复制”到另一个库,到另一个实例中,由OLTP复制到OLAP环境中,由某数据中心复 ...
- 1、Jsp页面
一.JSP(java server page):是以Java语言为基础的动态网页生成技术. 1.特点: a).以 .jsp 为后缀的文本文件,不需要编译(相对于程序猿来说不需要编译) b).以html ...
- [Java] Java执行Shell命令
Methods ProcessBuilder.start() 和 Runtime.exec() 方法都被用来创建一个操作系统进程(执行命令行操作),并返回 Process 子类的一个实例,该实例可用来 ...