天天看點

CentOS6.5上安裝MySQL5.5

MySQL5.4以前的版本(如MySQL5.1系列)都可以用源碼通過正常的編譯方式安裝,即./configure;make;make install,生産場景的具體指令和參數為:

[root@Howden mysql-5.1.72]# ./configure \
--prefix=/opt/myslq \
--with-unix-socket-path=/opt/mysql/tmp/mysql.sock
--localstatedir=/opt/mysql/data \
--enable-assembler \
--enable-thread-safe-client \
--with-mysqld-user=mysql \
--with-big-tables \
--without-debug \
--with-pthread \
--enable-assembler \
--with-extra-charsets=complex \
--with-readline \
--with-ssl \
--with-embedded-server \
--enable-local-infile \
--with-plugins=partition,innobase \
--with-mysqld-ldflags=-all-static \
--with-client-ldflags=-all-static
[root@Howden mysql-5.1.72]# make
[root@Howden mysql-5.1.72]# make install      

MySQL從5.4版本開始加入了一些用于提高性能的新算法,同時編譯方式也和以前不同了,要采用cmake方式編譯安裝。是以先把cmake裝上,并安裝一個依賴包ncurses-devel:

[root@Howden ~]# tar xf cmake-2.8.8.tar.gz
[root@Howden ~]# cd cmake-2.8.8
[root@Howden cmake-2.8.8]# ./configure
[root@Howden cmake-2.8.8]# gmake
[root@Howden cmake-2.8.8]# gmake install
[root@Howden cmake-2.8.8]# yum install ncurses-devel      

我們需要安裝的MySQL是5.5版本,在安裝之前還必須建立mysql使用者和使用者組:

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

其中:

-s /sbin/nologin 表示禁止該使用者登入,加強安全

-M 表示不建立使用者家目錄

-g 指定使用者屬于mysql組

把MySQL的源碼包解壓縮之後,就可以用cmake方式安裝了:

[root@Howden mysql-5.5.32]# cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysql \
> -DMYSQL_DATADIR=/opt/mysql/data \
> -DMYSQL_UNIX_ADDR=/opt/mysql/tmp/mysql.sock \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
> -DENABLED_LOCAL_INFILE=ON \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_FEDERATED_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
> -DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
> -DWITH_FAST_MUTEXES=1 \
> -DWITH_ZLIB=bundled \
> -DENABLED_LOCAL_INFILE=1 \
> -DWITH_READLINE=1 \
> -DWITH_EMBEDDED_SERVER=1 \
> -DWITH_DEBUG=0
[root@Howden mysql-5.5.32]# make && make install      

安裝完成之後,配置一下環境變量,把mysql執行程式所在的目錄加入到PATH變量中:

[root@Howden ~]# echo 'export PATH=/opt/mysql/bin:$PATH' >> /etc/profile
[root@Howden ~]# source /etc/profile      

注意要把該路徑放在PATH變量的最前面,因為當你使用不加字首路徑的方式執行指令時,對PATH中的路徑是從前向後檢索。如果把這個路徑放在了PATH的最後,而系統中又有用rpm包安裝的mysql,會先從/usr/bin/下找到mysql執行程式,就會導緻錯誤。關于該問題的具體講解參考:http://oldboy.blog.51cto.com/2561410/1122867

接下來,把mysql的主配置檔案放到/etc/下。mysql的安裝包中提供了多個配置檔案可供選擇,以适應不同的系統環境。在測試環境中可以選擇最小的:

[root@Howden mysql-5.5.32]# ll support-files/*.cnf
-rw-r--r-- 1 root root  4699 Nov 19 22:35 support-files/my-huge.cnf
-rw-r--r-- 1 root root 19779 Nov 19 22:35 support-files/my-innodb-heavy-4G.cnf
-rw-r--r-- 1 root root  4673 Nov 19 22:35 support-files/my-large.cnf
-rw-r--r-- 1 root root  4684 Nov 19 22:35 support-files/my-medium.cnf
-rw-r--r-- 1 root root  2848 Nov 19 22:35 support-files/my-small.cnf
[root@Howden mysql-5.5.32]# /bin/cp support-files/my-small.cnf /etc/my.cnf      

在初始化mysql之前的最後一步,把mysql的data目錄的所有者和所屬組改為mysql:

[root@Howden mysql-5.5.32]# chown -R mysql.mysql /opt/mysql/data/      

然後就可以初始化mysql了:

[root@Howden mysql-5.5.32]# cd /opt/mysql/scripts/
[root@Howden scripts]# ./mysql_install_db --basedir=/opt/mysql/ --datadir=/opt/mysql/data/ --user=mysql      

在輸出中如果看到如下兩個OK就說明初始化成功了:

Installing MySQL system tables...
OK
Filling help tables...
OK      

現在就可以啟動mysql程序了,把它的守護程序腳本程式放到/etc/init.d/目錄下并賦予可執行權限,然後啟動:

[root@Howden mysql-5.5.32]# /bin/cp support-files/mysql.server /etc/init.d/mysqld
[root@Howden mysql-5.5.32]# chmod +x /etc/init.d/mysqld
[root@Howden mysql-5.5.32]# /etc/init.d/mysqld start
Starting MySQL... SUCCESS! 
[root@Howden mysql-5.5.32]# netstat -lntup | grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2375/mysqld      

這樣就啟動成功了!

在登入mysql時,如果遇到如下故障:

[root@Howden ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)      

可以先殺掉mysql程序,并删除資料檔案,然後重新初始化mysql:

[root@Howden ~]# pkill mysqld
[root@Howden ~]# lsof -i :3306
[root@Howden ~]# rm -rf /opt/mysql/data/*
[root@Howden ~]# /opt/mysql/scripts/mysql_install_db --basedir=/opt/mysql/ --datadir=/opt/mysql/data/ --user=mysql      
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> drop database test;
Query OK, 0 rows affected (0.04 sec)

mysql> select user,host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1       |
|      | Howden    |
| root | Howden    |
|      | localhost |
| root | localhost |
+------+-----------+
6 rows in set (0.00 sec)

mysql> delete from mysql.user;
Query OK, 6 rows affected (0.00 sec)

mysql> grant all privileges on *.* to system@'localhost' identified by '12345678' with grant option;
Query OK, 0 rows affected (0.00 sec)      

繼續閱讀