重庆思庄Oracle、Redhat认证学习论坛

标题: 源码安装mysql的过程 [打印本页]

作者: 郑全    时间: 2015-4-4 23:20
标题: 源码安装mysql的过程
前言:从mysql 5.5版本开始,mysql源码安装开始使用cmake了,编译安装跟以前的版本有点不一样了。

一,安装步骤:

    1.安装前准备工作

       a.下载mysql源代码包,到mysql下载页面选择MYSQL Community Serve Source Code 版本

          注意:不要选择Linux-Generic版本,此版本为已经编译好的二进制版本

       b.检查本机Linux是否已安装好make,bison,cmake,gcc-c++,ncurses,如果尚未安装,先安装以上包,安装方法如下:

         注意:一般系统都会默认安装有make,gcc-c++.

         1.安装make编译器

            下载地址:http://www.gnu.org/software/make/

  1. # tar zxvf make-3.82.tar.gz    
  2. # cd make-3.82    
  3. # ./configure    
  4. # make    
  5. # make install   

            也可用:yum install make.i686 安装此包

        

       2.安装bison

          下载地址:http://www.gnu.org/software/bison/      

  1. <span style="font-size:13px;"># tar zxvf bison-2.5.tar.gz    
  2. # cd bison-2.5    
  3. # ./configure    
  4. # make    
  5. # make install </span>  

        也可用:yum install bison.i686 安装此包
         

3.安装gcc-c++

下载地址:http://www.gnu.org/software/gcc

  1. # tar zxvf gcc-c++-4.4.4.tar.gz    
  2. # cd gcc-c++-4.4.4    
  3. # ./configure    
  4. # make    
  5. # make install  

            也可用:yum install gcc-c++.i686 安装此包

4.安装cmake

下载地址:http://www.cmake.org/

  1. # tar zxvf cmake-2.8.4.tar.gz    
  2. # cd cmake-2.8.4    
  3. # ./configure    
  4. # make    
  5. # make install  

              也可用:yum install  cmake.i686 安装此包

         

5.安装ncurses

下载地址:http://www.gnu.org/software/ncurses/

  1. # tar zxvf ncurses-5.8.tar.gz    
  2. # cd ncurses-5.8    
  3. # ./configure    
  4. # make    
  5. # make install  

           也可用:yum install ncurses.i686 安装此包

         2.添加mysql用户与组

  1. #groupadd mysql  
  2. #useradd -g mysql -s /sbin/nologin -M mysql  

         3.mysql的源码编译

  1. #tar zxvf mysql-5.5.13.tar.gz  
  2. #cd mysql-5.5.13  
  3. #rm CMakeCache.txt  
  4. #cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55/  -DMYSQL_DATADIR=/usr/local/mysql55/data  -DWITH_INNOBASE_STORAGE_ENGINE=1  -DMYSQL_TCP_PORT=3306  -DMYSQL_UNIX_ADDR=/usr/local/mysql55/data/mysql.sock  -DMYSQL_USER=mysql  -DWITH_DEBUG=0  
  5. #make   
  6. #make install  

       4.编译完成后,安装数据库

  1. # cd /usr/local/mysql    
  2. # chown -R mysql .    
  3. # chgrp -R mysql .    
  4. # scripts/mysql_install_db --user=mysql  --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data  
  5. # chown -R root .   
  6. # chown -R mysql ./data  

          某次安装完数据库完后,启动不了数据库,查看日志显示:Can't open the mysql.plugin table...2009-06-01 00:52Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

解决方法:重新执行数据库安装过程,并带上   

  1. --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data  
于是搞定

   5.下面的命令是可选的,将mysql的配置文件拷贝到/etc      

cp support-files/my-medium.cnf /etc/my.cnf

如果原来的/etc目录下有my.cnf文件,则一定要用编译安装的my.cnf替换掉系统默认的my..cnf,否则会报如下错误:

  1. /usr/local/mysql/bin/mysqld: Table 'mysql.plugin' doesn't exist  
  2. 120406 23:57:45 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.  
  3. 120406 23:57:45 InnoDB: The InnoDB memory heap is disabled  
  4. 120406 23:57:45 InnoDB: Mutexes and rw_locks use GCC atomic builtins  
  5. 120406 23:57:45 InnoDB: Compressed tables use zlib 1.2.3  
  6. 120406 23:57:45 InnoDB: Initializing buffer pool, size = 128.0M  
  7. 120406 23:57:45 InnoDB: Completed initialization of buffer pool  
  8. InnoDB: The first specified data file ./ibdata1 did not exist:  
  9. InnoDB: a new database to be created!  
  10. 120406 23:57:45  InnoDB: Setting file ./ibdata1 size to 10 MB  
  11. InnoDB: Database physically writes the file full: wait...  
  12. 120406 23:57:45  InnoDB: Log file ./ib_logfile0 did not exist: new to be created  
  13. InnoDB: Setting log file ./ib_logfile0 size to 5 MB  
  14. InnoDB: Database physically writes the file full: wait...  
  15. 120406 23:57:45  InnoDB: Log file ./ib_logfile1 did not exist: new to be created  
  16. InnoDB: Setting log file ./ib_logfile1 size to 5 MB  
  17. InnoDB: Database physically writes the file full: wait...  
  18. InnoDB: Doublewrite buffer not found: creating new  
  19. InnoDB: Doublewrite buffer created  
  20. InnoDB: 127 rollback segment(s) active.  
  21. InnoDB: Creating foreign key constraint system tables  
  22. InnoDB: Foreign key constraint system tables created  
  23. 120406 23:57:46  InnoDB: Waiting for the background threads to start  
  24. 120406 23:57:47 InnoDB: 1.1.8 started; log sequence number 0  
  25. 120406 23:57:47 [ERROR] /usr/local/mysql/bin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2)  
  26. 120406 23:57:47 [ERROR] Can't start server: can't create PID file: No such file or directory  
  27. 120406 23:57:47 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended  



       6.启动mysql:       

  1. # bin/mysqld_safe --user=mysql &    
  2. # #启动mysql,看是否成功    
  3. # netstat -tnl|grep 3306  
  4. # 或者  
  5. # ps -aux|grep 'mysql'  

   可选步骤:设置root 密码:

/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'  

此步骤需要在数据库启动之后才能执行成功

  7.配置自启动

  1. # cp support-files/mysql.server /etc/init.d/mysqld  
  2. # chmod +x /etc/init.d/mysqld  
  3. # chkconfig –add mysqld  

      或者这样启动:    

  1. # #将mysql的启动服务添加到系统服务中    
  2. # cp support-files/mysql.server /etc/init.d/mysql.server    
  3. # #现在可以使用下面的命令启动mysql    
  4. # service mysql.server start    
  5. # #停止mysql服务    
  6. # service mysql.server stop    
  7. # #重启mysql服务    
  8. # service mysql.server restart   

8

为了方便,将mysql 的bin目录加到PATH中
export PATH=/usr/local/mysql/bin:$PATH
     


附:

关于重新编译问题:

Dealing with Problems Compiling MySQL

The solution to many problems involves reconfiguring. If you do reconfigure, take note of the following:

To prevent old object files or configuration information from being used, run these commands on Unix before re-runningCMake:

shell> make clean
shell> rm CMakeCache.txt

作者: 郑全    时间: 2015-4-5 09:33

如果在make时,报如下错误,一般是没有安装 libncurses5-dev 所致,在安装libncurses5-dev 后问题解决 :

。。。

-- Check size of wint_t - done
-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:85 (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:128 (FIND_CURSES)
  cmake/readline.cmake:202 (MYSQL_USE_BUNDLED_EDITLINE)
  CMakeLists.txt:409 (MYSQL_CHECK_EDITLINE)


-- Configuring incomplete, errors occurred!
See also "/u01/mysql-5.6.23/CMakeFiles/CMakeOutput.log".
See also "/u01/mysql-5.6.23/CMakeFiles/CMakeError.log".


作者: 郑全    时间: 2015-4-5 09:39

如果继续编译,继续报如下的错误,可以再次确认以下安装是否完成:

 

    yum install gcc gcc-c++ -y
    yum install -y ncurses-devel.x86_64
    yum install -y cmake.x86_64
    yum install -y libaio.x86_64
    yum install -y bison.x86_64

我这里遇到的是 gcc-c++没有安装正确所导致,安装gcc-c++后,问题解决。


 

-- Looking for asprintf - found
-- Check size of pthread_t
-- Check size of pthread_t - done
-- Using cmake version 2.8.12.2
-- Not building NDB
-- Performing Test HAVE_PEERCRED
CMake Error at /usr/share/cmake/Modules/CMakeCXXInformation.cmake:37 (get_filename_component):
  get_filename_component called with incorrect number of arguments
Call Stack (most recent call first):
  CMakeLists.txt:3 (PROJECT)


CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: Internal CMake error, TryCompile configure of cmake failed
-- Performing Test HAVE_PEERCRED - Failed
-- Library mysqlclient depends on OSLIBS -lpthread;m;rt;dl
-- Googlemock was not found. gtest-based unit tests will be disabled. You can run cmake . -DENABLE_DOWNLOADS=1 to automatically download and build required components from source.
-- If you are inside a firewall, you may need to use an http proxy: export http_proxy=http://example.com:80
-- Library mysqlserver depends on OSLIBS -lpthread;m;rt;crypt;dl
-- CMAKE_BUILD_TYPE: RelWithDebInfo
-- COMPILE_DEFINITIONS: HAVE_CONFIG_H
-- CMAKE_C_FLAGS:  -Wall -Wextra -Wformat-security -Wvla -Wwrite-strings -Wdeclaration-after-statement
-- CMAKE_CXX_FLAGS:
-- CMAKE_C_FLAGS_RELWITHDEBINFO: -O3 -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -DDBUG_OFF
-- CMAKE_CXX_FLAGS_RELWITHDEBINFO:  -DDBUG_OFF
-- Configuring incomplete, errors occurred!
See also "/u01/mysql-5.6.23/CMakeFiles/CMakeOutput.log".
See also "/u01/mysql-5.6.23/CMakeFiles/CMakeError.log".


作者: 郑全    时间: 2015-4-5 09:41

 

 

我的make 命令行为:

 

cmake \
 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
 -DDEFAULT_CHARSET=utf8 \
 -DDEFAULT_COLLATION=utf8_general_ci \
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
 -DMYSQL_DATADIR=/usr/local/mysql/data \
 -DMYSQL_TCP_PORT=3306 \
 -DENABLE_DOWNLOADS=0


作者: 郑全    时间: 2015-4-5 09:48

在运行编译命令前加一个  time  可以看到这个命令运行所需要的时间 ,如下:

 

# time make install

 

。。。

-- Installing: /usr/local/mysql/sql-bench/bench-count-distinct

real    0m58.194s
user    0m7.304s
sys     0m10.029s

 

 

 


作者: 郑全    时间: 2015-4-5 10:46

 

把 mysql 加到path中,最好使用以下命令:

 

echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile 

这样,每次启动,所有用户都可以执行这个mysql了。

 


作者: 郑全    时间: 2015-4-5 10:50

cmake

 

参数说明:

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql        //安装目录

-DINSTALL_DATADIR=/usr/local/mysql/data         //数据库存放目录

-DDEFAULT_CHARSET=utf8                        //使用utf8字符

-DDEFAULT_COLLATION=utf8_general_ci            //校验字符

-DEXTRA_CHARSETS=all                            //安装所有扩展字符集

-DENABLED_LOCAL_INFILE=1                        //允许从本地导入数据


作者: 郑全    时间: 2015-4-5 11:06

启动服务报错:

 

[root@ mysql]# service mysqld start
Starting MySQL.......The server quit without updating PID f[失败]usr/local/mysql/mysqld.pid).
[root@ mysql]# 
查看日志报错如下:
2014-06-24 14:56:54 31726 [Note] Server socket created on IP: '::'.
2014-06-24 14:56:54 31726 [ERROR] Can't start server : Bind on unix socket: Permission denied
2014-06-24 14:56:54 31726 [ERROR] Do you already have another mysqld server running on socket: /usr/local/mysql/mysql.sock ?
2014-06-24 14:56:54 31726 [ERROR] Aborting
解决原因是:
/usr/local/mysql根目录需要赋予mysql权限
根据日志文件显示,首先检查运行权限,再看一下/usr/local/mysql/mysql.sock,发现/usr/local/mysql目录下并没有该文件,是否是没有权限写目录?
看到/usr/local/mysql目录是root用户,所以赋予mysql操作权限。
chown -R mysql.mysql /usr/local/mysql

再次运行,可以正常启动成功。

 

[root@ data]# service mysqld start
Starting MySQL. SUCCESS! 

 

[root@sztech1 ~]# mysql 
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.6.23 Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |

| test                   |
+--------------------+
+--------------------+
3 rows in set (0.00 sec)

 

[此贴子已经被作者于2015-04-05 11:09:51编辑过]

作者: 郑全    时间: 2015-4-5 11:16

安装好后,

设置默认用户帐号:

 

 

use mysql;
delete from user;
delete from db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.%'  identified by 'root' WITH GRANT OPTION;
GRANT PROXY ON ''@'' TO 'root'@192.168.0.%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES  ON *.* TO 'root'@'localhost' identified by 'root' WITH GRANT OPTION;
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;
flush privileges;

#删除自带的测试库


drop database test;


作者: 郑全    时间: 2015-4-5 11:44

 

安装完成后,status的结果:

 

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.6.23, for Linux (x86_64) using  EditLine wrapper

Connection id:          17
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.6.23 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /usr/local/mysql/mysql.sock
Uptime:                 59 min 32 sec

Threads: 2  Questions: 120  Slow queries: 0  Opens: 87  Flush tables: 1  Open tables: 80  Queries per second avg: 0.033
--------------


作者: 郑全    时间: 2015-4-11 23:43

如果要安装 memcached ,

把 CMakeList.txt中的 :OPTION(WITH_INNODB_MEMCACHED "" OFF)
改为:OPTION(WITH_INNODB_MEMCACHED "enable innodb memcache" ON)
然后正常编译安装了






欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2