zoukankan      html  css  js  c++  java
  • MySQL 编译安装并且开启DEBUG模式

    因为想分析下mysql中一些操作的内部执行过程,单纯的看源码太枯燥了,所以决定结合mysql的执行过程来分析,mysql作为一款成熟的数据库软件,在设计的时候就考虑到了调试的问题,只是想开启调试模式的话,要编译源代码不能直接用rpm的安装方式,我是编译安装的5.7.16的版本,这里记录一下安装过程,以后再用就不用四处查资料了。

    这里记录的只是最简单的编译安装模式,只是开启了DEBUG模式。首先编译过程中会产生大于3.6G左右临时文件,时间大约花费30分钟左右。

    编译或者安装过程中如果出现任何错误,推荐删除缓存文件,从头再来,笔者抱着侥幸的心试过,后期登录数据库的时候出现了段错误,深层原因是线程违规访问了数据,最根本原因是缺失依赖导致没走mysql的设置文件,走了默认设置,出现了类似不兼容的问题。

    1.首先检查必须的依赖软件冲突:

    检查mariadb,这个如果不卸载,安装完毕之后启动服务会出错。

    [root@5201351 ~]# rpm -qa|grep mariadb
    mariadb-libs-5.5.41-2.el7_0.x86_64
    [root@5201351 ~]# rpm -e mariadb-libs-5.5.41-2.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=1 
    -DDOWNLOAD_BOOST=1 
    -DWITH_BOOST=/usr/local/boost 
    -DWITH_DEBUG=1 
    -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 70% of total RAM for dedicated server, else 10%.
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    # symbolic-links=0
    #
    # 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的错误日志中也有详细记录,有问题先看日志。

    安装过程中参考了很多人的文章,不能一一列举,感谢大家的帮助,谢谢!

  • 相关阅读:
    C#输出JS代码封装类Alart
    我的汇编学习之路(2)win8(64位)下安装debug
    .NET使用一般处理程序生成验证码
    ?运算符(null合并运算符)和三木运算符
    讲解:小菜鸟自制的.NET实体类生成器
    我的汇编学习之路(1)进制转换
    未来
    callee,caller区别
    string::size_type
    ubuntu 12.04 LTS u盘安装
  • 原文地址:https://www.cnblogs.com/likui360/p/6082581.html
Copyright © 2011-2022 走看看