zoukankan      html  css  js  c++  java
  • Linux 下 MySQL 5.5.8 源码编译安装记录

    系统:Ubuntu 10.10

    mysql源码文件:mysql-5.5.8.tar.gz

    安装所需工具:cmake,   GNU make,   gcc,  Perl,  libncurses5-dev,  bison(可选),  chkconfig

    注:
    1.官方2010-11-18的源码有几处bug,在编译之前参照官方的说明,进行了手动修改。

     

    官方说明链接:http://lists.mysql.com/commits/126782

    2.官方5.5版本参考手册:http://dev.mysql.com/doc/

    汗了一下,3392页的参考手册!

    =>工具安装:

    1. cmake

        ----没有自己编译安装cmake

        ----shell:~$ sudo apt-get install cmake

        ----版本:2.8.2

    2. GNU make

        ----Ubuntu自带

        ----版本:3.81

    3.GCC

        ----Ubuntu自带

        ----版本:4.4.5(官方文档:必须3.2以上)

    4.Perl

        ----Ubuntu自带

        ----版本:5.10.1

    5.libncurses5-dev (ncurses-devel)

        ----若差了这个包,在cmake的时候会报错。

        ----Debian/Ubuntu上的包名是libncurses5-dev,RedHat和其他版本对应的是ncurses-devel

        ----shell:~$ sudo apt-get install libncurses5-dev

        ----报错信息

    ------------------www.linuxidc.com---------------

                  -- MySQL 5.5.8
                  -- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
                  CMake Error at cmake/readline.cmake:82 (MESSAGE):
                       Curses library not found.  Please install appropriate package,

                       remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu , package name is libncurses5-dev ,

                       on RedHat and derivates it is ncurses-devel.
                  Call Stack (most recent call first):
                  cmake/readline.cmake:126 (FIND_CURSES)
                  cmake/readline.cmake:216 (MYSQL_USE_BUNDLED_LIBEDIT)
                  CMakeLists.txt:256 (MYSQL_CHECK_READLINE)


                   -- Configuring incomplete, errors occurred!

    ---------------------------------

    6. bison

        ----shell:~$ sudo apt-get install bison

        ----可选。没有这个工具,在make的时候报出警告。

        ----警告记录:

    ---------------------------------

     

              Warning: Bison executables not found in PATH

    ---------------------------------

    7.chkconfig

        ----后面配置mysql服务自启动的时候需要。

        ----shell:~$ sudo apt-get install chkconfig

    =>mysql安装:

    1.解压源代码文件

        ----shell定位到源代码文件所在目录

        ----解压

             shell:~$ tar zxvf mysql-5.5.8.tar.gz
    2.cmake操作

        ----shell定位到解压出的源代码文件夹目录(文件夹:mysql-5.5.8)
        ----cmake执行:

    ---------------------------------

             shell:~$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

                                         -DMYSQL_DATADIR=/home/system_username/Programming/mysql/mysqldata                

                                         -DSYSCONFDIR=/etc                                               

                                         -DWITH_INNOBASE_STORAGE_ENGINE=1

                                         -DWITH_ARCHIVE_STORAGE_ENGINE=1

                                         -DWITH_BLACKHOLE_STORAGE_ENGINE=1 

                                         -DWITH_FEDERATED_STORAGE_ENGINE=1

                                         -DWITH_PARTITION_STORAGE_ENGINE=1

                                         -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock

                                         -DMYSQL_TCP_PORT=3306

                                         -DENABLED_LOCAL_INFILE=1

                                         -DEXTRA_CHARSETS=all

                                         -DDEFAULT_CHARSET=utf8

                                         -DDEFAULT_COLLATION=utf8-general_ci

                                         -DMYSQL_USER=mysql

            注:没有换行。官方文档上,cmake 命令后面加个点不懂什么意思。在这里加上命令执行不了

    ---------------------------------

            源代码配置选项说明:

                         //mysql安装的主目录,5.5.8版本默认为/usr/local/mysql,所以可以不添加

                         -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

                         //mysql数据保存的路径,自定义

                         -DMYSQL_DATADIR=/home/system_username/mysql/mysqldata  

                         //mysql配置文件地址------The default my.cnf option file directory

                         -DSYSCONFDIR=/etc

                         //Compile storage engine xxx statically into server

                         /*Storage engines are built as plugins. You can build a plugin as a static module (compiled into the server)    

                          *or a dynamic module  (built as a dynamic library that must be installed into the server using the INSTALL  

                          *PLUGIN statement or the --plugin-load option before it can be used). Some plugins might not support static 

                          *or dynamic building.

                          */

                         -DWITH_INNOBASE_STORAGE_ENGINE=1

                         -DWITH_ARCHIVE_STORAGE_ENGINE=1

                         -DWITH_BLACKHOLE_STORAGE_ENGINE=1

                         -DWITH_FEDERATED_STORAGE_ENGINE=1

                         -DWITH_PARTITION_STORAGE_ENGINE=1

                         //Unix socket file

                         /*

                          *The Unix socket file path on which the server listens for socket connections. This must be an absolute path 

                          *name. The default is /tmp/mysql.sock

                          */

                         -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock

                         //数据库服务器TCP/IP连接的监听端口,默认为3306

                         -DMYSQL_TCP_PORT=3306

                         //Whether to enable LOCAL capability in the client library for LOAD DATA INFILE

                        //默认为关闭,这里开启

                         -DENABLED_LOCAL_INFILE=1

                         //数据库编码设置

                         -DEXTRA_CHARSETS=all

                         -DDEFAULT_CHARSET=utf8

                         -DDEFAULT_COLLATION=utf8-general_ci

    3.编译和安装

        ----shell定位到源代码文件夹目录

        ----执行:(编译用了大概20分钟)

              shell:~$ make

              shell:~$ make install

     

    4.后续配置

        ----进入mysql安装目录下的脚本目录
             shell:~$ cd /usr/local/mysql/scripts
        ----利用mysql_install_db脚本生成新的MySQL 授权表
            ./mysql_install_db  --basedir=/usr/local/mysql  --datadir=/home/system_username/Programming/mysql/mysqldata  

             --user=mysql 

        ----进入mysql安装目录下的支持文件目录
             shell:~$ cd /usr/local/mysql/support-files
        ----复制mysql配置文件
             shell:~$ sudo cp my-medium.cnf /etc/my.cnf

        ----复制服务文件并修改
             shell:~$ sudo cp mysql.server mysqld
        ----修改mysqld
             basedir=/usr/local/mysql
             datadir=/home/mysql
             mv mysqld /etc/init.d/mysqld

        ----启动服务
              shell:~$ service mysqld start

        ----关闭服务

              shell:~$ service mysqld stop

    ---------------------------------

    service命令:

    1.  用于管理Linux系统中服务的命令

    2.  作用是去/etc/init.d目录下寻找相应的服务,进行开启和关闭等操作

    3.  上述操作后,mysqld服务文件对应mysql.server文件

    ---------------------------------

        ----添加服务到自启动项
            shell:~$ sudo chkconfig --level 3 mysqld on

        ----设置软连接使mysql,  mysqldump,  mysqladmin这三个命令能在shell中直接运行
             shell:~$ sudo ln -s /usr/local/mysql/bin/mysql /usr/bin
             shell:~$ sudo ln -s /usr/local/mysql/bin/mysqldump /usr/bin
             shell:~$ sudo ln -s /usr/local/mysql/bin/mysqladmin /usr/bin

    ---------------------------------

    =>mysql数据库中文乱码解决 :

    1. 乱码分析

       ----从终端shell进入mysql

                       shell:~$ mysql

                       ............

                       ............

                       mysql> show variables like '%character%'

       ----得到以下数据库编码信息表:

                               +----------------------------------- +-------------------------------------------+
                                | Variable_name                    | Value                                               |
                               +------------------------------------+-------------------------------------------+
                                | character_set_client           | utf8                                                    |
                                | character_set_connection | utf8                                                    |
                                | character_set_database    | latin1                                                 |
                                | character_set_filesystem   | binary                                                |
                                | character_set_results         | utf8                                                     |
                                | character_set_server          | latin1                                                 |
                                | character_set_system         | utf8                                                    |
                                | character_sets_dir               | /usr/local/mysql/share/charsets/  |
                               +------------------------------------ +-------------------------------------------+

                      可以看出character_set_database  ,character_set_server 的编码还是默认的latin1。

              不知道为什么,之前DEFAULT_CHARSET设置成为utf8的,好像没起作用。查看官方文档

              发现,character_set_database不支持配置文件(/etc/my.cnf)变量设置,

               但是character_set_server 支持配置文件变量设置。

    2. 解决办法

        ----打开配置文件

                   shell:~$ sudo gedit /etc/my.cnf

              然后在[mysqld]配置选项下添加

                   character-set-server = utf8

         ----然后进入mysql

          执行:

                   mysql> show variables like '%character%'

          结果:character_set_database  ,character_set_server两项都变为utf8了

         ----测试:

                  往数据库表中插入中文字段,中文就正常显示了。

    注:1.用5.1版本的时候如下方法是可以解决中文编码问题的

                ----在配置文件[mysqld]和[client]节下分别添加: default-character-set = utf8

             2.不知到是不是手动编译的原因,在5.5.8中配置文件中用上述方法会造成数据库服务无法启动。

                ----错误日志如下:( datadir/username.err为错误日志文件)

                      ----------------------------------------------------

                      mysqld_safe mysqld from pid file /home/cyberwym/Programming/mysql/mysqldata/cyberwym.pid ended

                      ...........

                      ...........

                      [ERROR] /usr/local/mysql/bin/mysqld: unknown variable 'default-character-set=utf8'

                      [ERROR] Aborting

                      ----------------------------------------------------

                 ----这样会造成pid文件(datadir/username.pid)无法更新

                 ----在配置文件[mysqld]和[client]节下分别去掉: default-character-set = utf8 后,数据库服务就启动正常了

  • 相关阅读:
    C语言 atoi
    C语言 strtok
    C语言 strstr
    Python从菜鸟到高手(6):获取用户输入、函数与注释
    Python从菜鸟到高手(5):数字
    Python从菜鸟到高手(3):声明变量
    Python从菜鸟到高手(2):清空Python控制台
    Python从菜鸟到高手(1):初识Python
    《Python从菜鸟到高手》已经出版,开始连载了,购买送视频课程
    Python从菜鸟到高手(1):数字的奥秘
  • 原文地址:https://www.cnblogs.com/ylqmf/p/2229965.html
Copyright © 2011-2022 走看看