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之後,做一些基本的優化工作:
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)