MySQL源码安装

OS:RHEL Server 6.3

MySQL:mysql-5.5.25a.tar.gz

相关依赖包:

ncurses-5.9.tar.gz

bison-2.5.tar.gz

安装MySQL

一、安装依赖包

(1)ncurses

[root@test ~]# cd /data1/lnmp/

[root@test lnmp]# tar -xzf ncurses-5.9.tar.gz

[root@test lnmp]# cd ncurses-5.9

[root@test ncurses-5.9]# ./configure

[root@test ncurses-5.9]# make && make install

(2)bison

[root@test lnmp]# tar -xzf bison-2.5.tar.gz

[root@test lnmp]# cd bison-2.5

[root@test bison-2.5]# ./configure

[root@test bison-2.5]# make && make install

二、安装用于编译 MySQL 的 cmake 工具

[root@test lnmp]# tar -xzf cmake-2.8.8.tar.gz

[root@test lnmp]# cd cmake-2.8.8

[root@test cmake-2.8.8]#./configure

[root@test cmake-2.8.8]#make && make install

三、源码安装 MySQL

(1)建立运行MySQL的用户和组

[root@test ~]# groupadd mysql

[root@test ~]# useradd -M -g mysql -s /sbin/nologin mysql

(2)建立相关目录

[root@test ~]# mkdir /usr/local/mysql

[root@test ~]# mkdir /var/lock/mysql

[root@test ~]# mkdir /var/run/mysql

[root@test ~]# mkdir /var/log/mysql

[root@test ~]# mkdir /data1/mysql_db

[root@test  ~ ]# chown -R mysql:mysql /usr/local/mysql/

[root@test ~]# chown mysql:mysql /var/run/mysql/

[root@test ~]# chown mysql:mysql /var/lock/mysql/

[root@test ~]# chown mysql:mysql /var/log/mysql/

[root@test ~]# chown mysql:mysql /data1/mysql_db/

 

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

注意:

之所以要创建/var/lock/mysql和/var/run/mysql目录,这是因为mysql server是用mysql这个用户启动的。而/var/lock//var/run/这两个目录只有root才有写的权限,所以mysql这个用户不能在其中建立mysql.lock和mysql.pid文件。所以要在/var/lock//var/run/这两个目录分别再建立一个目录,例如:mysql。并把这个目录所有者和群组改为mysql这具用户和群组。此种做法也是为了便于管理,例如把日志存放在/var/log/mysql/,日志只会在这一个目录下轮转,便于管理;#chown mysql:mysql /var/run/mysql/ /var/lock/mysql/ /var/log/mysql/

错误:

如果数据库 /data1/mysql_db/ 目录权限设置不正确,在启动 mysql 时可能会出现下面的错误。

[root@test ~]# tail /var/log/mysql.log

120713 17:15:21 mysqld_safe Starting mysqld daemon with databases from /data1/mysql_db

 /usr/local/mysql/bin/mysqld: File './mysql-bin.index' not found (Errcode: 13)

120713 17:15:21 [ERROR] Aborting


120713 17:15:21 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete


120713 17:15:21 mysqld_safe mysqld from pid file /var/run/mysql/mysql.pid ended

[root@test ~]#

解决方法:
这里是用mysql这个用户启动数据库的。所以要把建立的数据库目录   /data1/mysql_db/  的所有者和群组更改为 mysql。

[root@test ~]#chown -R mysql:mysql /data1/mysql_db/

这一步最好在初始化完数据库时再做一下。初始化完成后,可以先检查这个目录下的新建立的文件和目录的权限是否正确,如果正确则不用再做这一步了。

为了安全可以指定用户 mysql 初始化数据库:
#./mysql_install_db   --user=mysql \
--defaults-file=/etc/my.cnf \
--basedir=/usr/local/mysql/ \
--datadir=/data1/mysql_db
----------------------------------------------------------------------------------------

(3)源码安装 MySQL

[root@test ~]# cd /data1/lnmp/

[root@test lnmp]# tar -xzf mysql-5.5.25a.tar.gz

[root@test lnmp]# cd mysql-5.5.25a

[root@test mysql-5.5.25a]#  cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DSYSCONFDIR=/etc \

-DINSTALL_MANDIR=/usr/share/man \

-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \

-DMYSQL_DATADIR=/data1/mysql_db \

-DEXTRA_CHARSETS=all \

-DDEFAULT_CHARSET=utf8 \

-DWITH_READLINE=ON

-DWITH_SSL=system \

-DWITH_DEBUG=0 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \ 

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DINSTALL_LAYOUT=STANDALONE \

-DENABLED_LOCAL_INFILE=1 \

-DENABLED_PROFILING=1 \

-DMYSQL_MAINTAINER_MODE=0 \

-DWITH_EMBEDDED_SERVER=1 \

-DMYSQL_TCP_PORT=3306 \

-DMYSQL_USER=mysql

[root@test mysql-5.5.25a]#make

[root@test mysql-5.5.25a]#make install

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

[root@test mysql-5.5.25a]# cmake . LH

注意:

在编译的时候有可能会出现以下错误。

-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)

CMake Error at cmake/readline.cmake:83 (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:127 (FIND_CURSES)

  cmake/readline.cmake:217 (MYSQL_USE_BUNDLED_LIBEDIT)

  CMakeLists.txt:268 (MYSQL_CHECK_READLINE)

 

-- Configuring incomplete, errors occurred!

错误原因:

这是因为没有安装 curses library 的原因,如果是 Debian/Ubuntu 平台则要安装 libncurses5-dev,RHEL 平台安装 ncurses-devel

解决方法:
[root@test mysql-5.5.25a]#  yum install ncurses-devel  #或源码安装
[root@test mysql-5.5.25a]# rm -rf CMakeCache.txt     #删除CMakeCache.txt文件
[root@test mysql-5.5.25a]# cmake .  # 再重新编译,即可!
------------------------------------------------------------------------------------------

(4)建立 MySQL 配置文件

[root@test mysql-5.5.25a]# cp support-files/my-huge.cnf /etc/my.cnf

[root@test mysql-5.5.25a]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

[root@test mysql-5.5.25a]# chmod 755 /etc/rc.d/init.d/mysqld

[root@test mysql-5.5.25a]# echo " export PATH=$PATH:/usr/local/mysql/bin" >> /ect/profile
[root@test mysql-5.5.25a]# source /etc/profile

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

注意:

mysql-5.5.25a/support-files下共有5my.cnf配置文件。

★ my-small.cnf:适用于小型数据库,该配置文件专为物理内存小于64MB的服务器而设计。

★ my-medium.cnf:适用于物理内存在32MB64MB之间的专用于运行MySQL服务器,或物理内存在128MB以上。

★ my-large.cnf:适用于物理内存在512MB以上的专用于运行MySQL数据库的服务器。

★ my-huge.cnf:适用于物理内存在1GB2GB之间的专用于运行MySQL数据库服务器。

★ my-innodb-heavy-4G.cnf:适用于服务器物理内存在4GB以上,且需要运行复杂查询的MySQL数据库。

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

(5)修改/etc/rc.d/init.d/mysqld 脚本文件

根据 cmake 时指定的配置参数和 my.cnf 配置文件中的参数修改 mysqld 这个脚本中的变量;my.cnf 配置文件中的参数优先于 cmake 时指定的参数。如果 my.cnf 配置文件没有设置对应的参数,则数据库运行时会以 cmake 时指定的参数为准。my.cnf 中参数优先级高于 cmake 时的配置参数。

[root@test ~]# vim /etc/rc.d/init.d/mysqld

basedir=/usr/local/mysql

datadir=/data1/mysql_db

lockdir='/var/lock/mysql'

lock_file_path="$lockdir/mysql.lock"

mysqld_pid_file_path = /var/run/mysql/mysql.pid


(6) 修改  /etc/my.cnf  配置文件
根据  cmake  时的配置修改  my.cnf  文件的部分参数。 如果  my.cnf  配置文件没有设置对应的参数,则数据库运行时会以  cmake  时指定的参数为准。 my.cnf  中参数优先级高于  cmake  时的配置参数。

[root@test ~]# vim    /etc/my.cnf

# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock

# The MySQL server
[mysqld]
user            = mysql
port             = 3306
socket           = /tmp/mysql.sock
basedir                   = /usr/local/mysql
datadir          = /data1/mysql_db
pid-file         = /var/run/mysql/mysql.pid
log-error        = /var/log/mysql/mysql.log
character-set-server  = utf8
 
(7) 初始化数据库

[root@test scripts]# pwd

/usr/local/mysql/scripts

[root@test scripts]# ll

total 16

-rwxr-xr-x. 1 mysql mysql 14816 Jul 13 14:50 mysql_install_db

[root@test scripts]#./mysql_install_db --datadir=/data1/mysql_db/

[root@test ~]#chown -R mysql:mysql /data1/mysql_db/  #根据具体情况决定做不做这一步。

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

注意:

mysql_install_db  脚本的目的是生成新的 MySQL 授权表。它不覆盖已有的 MySQL 授权表,并且它不影响任何其它数据。
如果你想要重新创建授权表,首先停止 mysqld 服务器(如果它正运行)。然后重新命名数据目录下的 MySQL 目录并保存,然后运行 mysql_install_db 。

本例中可用的参数:
#./mysql_install_db  --user=mysql \
--defaults-file=/etc/my.cnf \
--basedir=/usr/local/mysql/ \
--datadir=/data1/mysql_db
------------------------------------------------------------------------------------------

(8)启动mysql
[root@test ~]# chkconfig --add mysqld
[root@test ~]# chkconfig --level 35 mysqld on
[root@test ~]# service mysqld start
 

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

注意:启动MySQL时出现以下错误:

[root@test ~]# service mysqld start

Starting MySQL.The server quit without updating PID file (/[FAILED]mysql/mysql.pid).

[root@test ~]# tail /var/log/mysql.log

120713 16:41:36 mysqld_safe Starting mysqld daemon with databases from /data1/mysql_db

/usr/local/mysql/bin/mysqld: Character set 'all' is not a compiled character set and is not specified in the '/usr/local/mysql/share/charsets/Index.xml' file

120713 16:41:36 [ERROR] Aborting


120713 16:41:36 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete


120713 16:41:36 mysqld_safe mysqld from pid file /var/run/mysql/mysql.pid ended

[root@test ~]#

错误原因:
这是因为我在编译 MySQL 的时候加上了  -DDEFAULT_CHARSET =all   参数。最好设为 -DDEFAULT_CHARSET =utf8。

解决方法:
修改配置文件 /etc/ my.cnf 文件,在 [mysql] 下加入 character-set-server = utf8。

[mysqld]

character-set-server = utf8

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

(9)设置 mysql 用户 root 的密码

[root@test ~]# mysqladmin -u root -p password 123456

[root@test ~]# mysql -u root -p -S /tmp/mysql.sock

Enter password:  <-----输入上面设置的数据库管理员密码:123456,回车即可登录数据库。

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.5.25a-log Source distribution


Copyright (c) 2000, 2011, 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>

如下图:

在初始化 mysql 数据库后,其中默认生成了4个数据库;每个数据库下都会有若干个表。

 

你可能感兴趣的:(源码,mysql,数据库,安装)