您的位置:首页 > 数据库 > MySQL

编译安装Mysql 5.5.x

2015-11-26 15:33 543 查看
1.安装cmake

MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具。

因此,我们首先要在系统中源码编译安装cmake工具。

# wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
# tar zxvf cmake-2.8.4.tar.gz

# cd cmake-2.8.4

# ./configure

# make
# make install

2.确保以下所需系统软件包已经被安装

通过 rpm -qa | grep name 的方式验证以下软件包是否已全部安装。

#gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libgcrypt* libtool* boost*

如果缺少相关的软件包,可通过yum -y install 的方式在线安装,或直接从系统安装光盘中找到并通过rpm -ivh 的方式安装。

3. 安装前的系统设置

建立mysql安装目录及数据存放目录

# mkdir /opt/mysql

# mkdir /opt/mysql/data

创建用户和用户组

# groupadd mysql

# useradd -g mysql mysql

赋予数据存放目录权限

# chown mysql:mysql -R /opt/mysql/data

4.从configure更换为cmake

我相信大多数人都已经习惯了之前的configure方式,并且所使用的参数也是比较个性化的,换成cmake之后,这一方面会带来不少的麻烦。

还好,MySQL的官方网站提供了二者的参数对照表,我们可以尽可能的保留之前的参数,来编译配置新的MySQL版本。

configure 与 cmake 参数对照指南:
http://forge.mysql.com/wiki/Autotools_to_CMake_Transition_Guide
以我自己为例,之前我一直使用的参数为:

./configure --prefix=/opt/mysql/ \

--sysconfdir=/opt/mysql/etc \

--localstatedir=/opt/mysql/data \

--with-tcp-port=3306 \

--with-unix-socket-path=/tmp/mysqld.sock \

--with-mysqld-user=mysql \

--enable-assembler \

--with-extra-charsets=all \

--enable-thread-safe-client \

--with-big-tables \

--with-readline \

--with-ssl \

--with-embedded-server \

--enable-local-infile \

--with-plugins=partition,innobase,myisammrg

经过与cmake的参数对照之后,去除掉已经被取消的参数(大多数是因为新版本已经默认启用),cmake的参数配置如下:

cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql \

-DSYSCONFDIR=/opt/mysql/etc \

-DMYSQL_DATADIR=/data \

-DMYSQL_TCP_PORT=3306 \

-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \

-DMYSQL_USER=mysql \

-DEXTRA_CHARSETS=all \

-DWITH_READLINE=1 \

-DWITH_SSL=system \

-DWITH_EMBEDDED_SERVER=1 \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1

5.编译安装 MySQL 5.5.x

通过http://www.mysql.com/downloads/mysql官方网址或国内的sohu镜像下载软件包,如目前最新的MySQL 5.5.13。

# wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.13.tar.gz
# tar zxvf mysql-5.5.13.tar.gz

# cd mysql-5.5.13

# cmake \

-DCMAKE_INSTALL_PREFIX=/opt/mysql \

-DMYSQL_DATADIR=/opt/mysql/data \

-DSYSCONFDIR=/opt/mysql/etc \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_MEMORY_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DMYSQL_UNIX_ADDR=/tmp/mysql/mysql.sock \

-DMYSQL_TCP_PORT=3306 \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DEXTRA_CHARSETS=all \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci

# make

# make install

#scripts/mysql_install_db --user=mysql --ldata=/data/mysqldata

说明:参数--ldata说明你的数据文件存放的目录,如果你使用默认的路径,那么这个参数可以去除。如果你不增加此参数,但是在配置文件(见下方的datadir配置)中指定了其他的目录,那么会在启动MySQL的时候出现类似的提示:

Starting MySQL. ERROR! The server quit without updating PID file (/data/mysql/data/VM_208.pid).

出现这个的解决办法就是增加--ldata参数,指定和配置文件中datadir相同的值,重新执行mysql_install_db即可。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

有时候会出现以下类似的问题。

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

使用参数-DENABLE_DOWNLOADS=1 自动下载。

有网络限制,设置http代理export http_proxy=http://example.com:80。环境变量http_proxy 也为 curl 等其他工具所用。尽管 yum 可以识别大写或小写的 http_proxy,但curl 要求环境变量的名称是小写。

如果这个cmake这个步骤有出现问题,解决后重新再cmake一次。如果输出类似这样,那么就好了。

-- Running cmake version 2.6.4

-- MySQL 5.6.16

-- Packaging as: mysql-5.6.16-Linux-x86_64

-- HAVE_VISIBILITY_HIDDEN

-- HAVE_VISIBILITY_HIDDEN

-- HAVE_VISIBILITY_HIDDEN

-- Using cmake version 2.6.4

-- Not building NDB

-- Library mysqlclient depends on OSLIBS -lpthread;m;rt;dl

-- GMOCK_SOURCE_DIR:/root/mysql-5.6.16/source_downloads/gmock-1.6.0

-- GTEST_LIBRARIES:gmock;gtest

-- Library mysqlserver depends on OSLIBS -lpthread;m;rt;crypt;dl

-- Configuring done

-- Generating done

-- Build files have been written to: /root/mysql-5.6.16

解决方法:

1、在预编译时添加相应的选项:cmake .    -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

[root@kongxl mysql-5.7.6-m16]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

2、或者下载一个boost包,放到/usr/local/boost目录下,然后在cmake后面加选项-DWITH_BOOST=/usr/local/boost

[root@kongxl mysql-5.7.6-m16]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=/usr/local/boost

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

6.配置并初始化数据库

创建my.cnf配置文件

# mkdir -p /opt/mysql/log

# mkdir -p /opt/mysql/etc

# touch /opt/mysql/etc/my.cnf

# cp support-files/my-default.cnf /opt/mysql/etc/my.cnf

初始化数据库

执行前需赋给scripts/mysql_install_db文件执行权限

# chmod 755 scripts/mysql_install_db

# scripts/mysql_install_db --user=mysql --basedir=/opt/mysql/ --datadir=/data/mysqldata/

创建管理MySQL数据库的shell脚本

# mkdir /opt/mysql/init.d

# cp support-files/mysql.server /opt/mysql/init.d/mysql

赋予shell脚本可执行权限:

# chmod +x /opt/mysql/init.d/mysql

删除其他my.cnf

find / -name my.cf

rm -rf /etc/my.cnf

rm -rf /opt/mysql/my.cnf

修改配置文件 my.cnf

vim /opt/mysql/etc/my.cnf

[mysqld]

datadir = /data/mysqldata

#socket = /var/lib/mysql/mysql.sock

server-id=150

log-bin=master-bin

log-bin-index=master-bin.index

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

启动MySQL:

# /opt/mysql/init.d/mysql start

设置mysql开机自动启动设置

chkconfig --add mysql

##有的系统需要下面的

chkconfig --level 345 mysql on

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

root@rekfan mysql]# service mysql restart

MySQL server PID file could not be found![失败]

Starting MySQL...The server quit without updating PID file (/usr/local/mysql/data/rekfan.pid).[失败]

1.可能是
4000
/usr/local/mysql/data/rekfan.pid文件没有写的权限

解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data”  然后重新启动mysqld!

2.可能进程里已经存在mysql进程

解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9  进程号”杀死,然后重新启动mysqld!

3.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。

解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。本人就是使用第三条方法解决的 !http://blog.rekfan.com/?p=186

4.mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。

解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data

5.skip-federated字段问题

解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。

6.错误日志目录不存在

解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限

7.selinux惹的祸,如果是centos系统,默认会开启selinux

解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

通过命令行登录管理MySQL服务器(提示输入密码时直接回车):

在此之前,为方便调用mysql,我们先生成一个mysql的软链。

ln -s /opt/mysql/bin/mysql /usr/bin/

然后修改密码

mysql -uroot  -h127.0.0.1 -p

mysql> SET PASSWORD = PASSWORD('123456');

输入以下SQL语句,创建一个具有root权限的用户(admin)和密码(12345678):

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '123456';

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' IDENTIFIED BY '123456';

为root帐户设置初始密码

# /opt/mysql/bin/mysqladmin -u root password '123456'

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[root@mysql-master etc]# mysql -uroot -p

Enter password: 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql/mysql.sock' (2)

[root@mysql-master etc]# mkdir -p /tmp/mysql

[root@mysql-master etc]# ln -s /var/lib/mysql/mysql.sock /tmp/mysql/mysql.sock

方案1.

 1.#ps -A|grep mysql

   显示类似:

  1829 ?        00:00:00 mysqld_safe

   1876 ?        00:00:31 mysqld

  2.#kill -9 1829

  3.#kill -9 1876

  4.#/etc/init.d/mysql restart

  5.#mysql -u root -p

 

   他的麻烦解决了,我的还没解决!

 

继续找

方案2

先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.

另外看看是不是权限问题.

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

[root@localhost beinan]#chown -R mysql:mysql /var/lib/mysql

[root@localhost beinan]# /etc/init.d/mysqld start

启动 MySQL: [ 确定 ]

[root@localhost lib]# mysqladmin -uroot password '123456'

[root@localhost lib]# mysql -uroot -p

Enter password:

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

Your MySQL connection id is 3 to server version: 4.1.11

Type 'help;' or '/h' for help. Type '/c' to clear the buffe

 

他的也解决了,我的麻烦还在继续,依然继续寻找

 

方案3

问题解决了,竟然是max_connections=1000 他说太多了,然后改成500也说多,无奈删之问题解决了。

 

还是不行

方案4

   

     /var/lib/mysql 所有文件权限 改成mysql.mysql

    

     不行不行

 

方案5

     摘要:解决不能通过mysql .sock连接MySQL问题 这个问题主要提示是,不能通过 '/tmp/mysql .sock'连到服务器,而php标准配置正是用过'/tmp/mysql .sock',但是一些mysql 安装方法 将 mysql .sock放在/var/lib/mysql .sock或者其他的什么地方,你可以通过修改/etc/my.cnf文件来修正它,打开文件,可以看到如下的东东:

   [mysql d] 

  socket=/var/lib/mysql .sock 

  改一下就好了,但也会引起其他的问题,如mysql 程序连不上了,再加一点: 

  [mysql ] 

  socket=/tmp/mysql .sock 

  或者还可以通过修改php.ini中的配置来使php用其他的mysql .sock来连,这个大家自己去找找

  

  或者用这样的方法:

  ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock

成功了,就是这样ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

删除本机匿名连接的空密码帐号

/opt/mysql/bin/mysql -uroot -p'new-password'

mysql>use mysql; //选择系统数据库mysql

mysql>select Host,User,Password from user; //查看所有用户

mysql>delete from user where password="";

mysql>flush privileges;

mysql>select Host,User,Password from user; //确认密码为空的用户是否已全部删除

mysql>exit;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql