本文基於 Redhat Linux 6.7 的環境,Mysql 版本為 5.5.37
安裝前的檢查
必備的組件,如果沒有使用 yum 進行安裝,可以使用網上的源,也可以使用本地光盤作為 Yum 源。
1、CMake
2、make
3、gcc
4、ncurses
5、Perl
默認 Layout 與相關的配置參數。
Mysql默認安裝在 /usr/local/mysql 下,可以根據下面幾個參數對安裝目錄做自定義。
參數 | 說明 |
---|---|
-DCMAKE_INSTALL_PREFIX=dir_name | 基礎的文件夾,對應mysqld的--basedir參數 |
-DINSTALL_BINDIR=dir_name | bin目錄位置 |
-DINSTALL_DOCDIR=dir_name | 文檔目錄位置 |
-DINSTALL_DOCREADMEDIR=dir_name | Readme文件位置 |
-DINSTALL_INCLUDEDIR=dir_name | Include目錄位置 |
-DINSTALL_LAYOUT=name | 布局選項,包括Standalone、RPM、SRV4、DEB |
-DMYSQL_DATADIR=dir_name | 數據存放目錄 |
-DSYSCONFDIR=dir_name | 默認配置my.cnf目錄 |
標粗的三個是最重要和常用的目錄。
下載、編譯和安裝
從 這里 下載源代碼,版本選擇 5.5.37、Operating System 選擇 Source Code,找到 (mysql-5.5.37.tar.gz) 然后下載。下載后解壓縮到用戶目錄下,我的用戶為eccs,用戶目錄為 **/home/ap/eccs。
tar zxvf mysql-5.5.37.tar.gz .
cd mysql-5.5.37
mkdir bld
cd bld
我們所有的編譯操作都在bld文件夾內進行,編譯和安裝的步驟是很簡單的,使用camke編譯,然后生成 make,最后 make install。重要的是在編譯這一步指定相關的參數。
cmake .. -DCMAKE_INSTALL_PREFIX=/home/ap/eccs/mysql -DMYSQL_DATADIR=/home/ap/eccs/mysql_data -DSYSCONFDIR=/home/ap/eccs/mysql_conf -DMYSQL_UNIX_ADDR=/home/ap/eccs/mysql_conf/mysql.sock
make
make install
安裝數據庫、啟動數據庫
編譯安裝完成后,需要首先安裝數據庫,執行以下命令。
chmod +x scripts/mysql_install_db
./scripts/mysql_install_db --basedir=/home/ap/eccs/mysql --datadir=/home/ap/eccs/mysql_data --user=eccs
到這一步就可以啟動Mysql了,但是還沒有指定配置文件的位置,如果沒有指定配置文件,mysql按照以下數據自動從路徑中查找配置文件,分別是:
- /etc/my.cnf
- /etc/mysql/my.cnf
- /usr/local/mysql/etc/my.cnf
- ~/.my.cnf
如果不知道默認的位置,可以使用下面的命來查找(青雲)
[eccs@bj1eccap02 ~]$ /home/ap/eccs/mysql/bin/mysqld --verbose --help | grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /home/ap/eccs/mysql_conf/my.cnf ~/.my.cnf
明確了配置文件的位置,將配置文件按我們的要求修改,然后就可以啟動數據庫了。
/home/ap/eccs/mysql/support-files/mysql.server start
Starting MySQL [ OK ]
[eccs@bj1eccap02 ~]$ ps -ef | grep mysql
eccs 717 1 0 19:23 pts/0 00:00:00 /bin/sh /home/ap/eccs/mysql/bin/mysqld_safe --datadir=/home/ap/eccs/mysql_data --pid-file=/home/ap/eccs/mysql_conf/mysqld.pid
eccs 1081 717 0 19:23 pts/0 00:00:00 /home/ap/eccs/mysql/bin/mysqld --basedir=/home/ap/eccs/mysql --datadir=/home/ap/eccs/mysql_data --plugin-dir=/home/ap/eccs/mysql/lib/plugin --log-error=/home/ap/eccs/mysql_data/mysql_error.log --pid-file=/home/ap/eccs/mysql_conf/mysqld.pid --socket=/home/ap/eccs/mysql_conf/mysql.sock --port=33065
eccs 1498 1801 0 19:26 pts/0 00:00:00 grep mysql
設置口令
默認安裝的mysql口令為空,需要手工設置。
/home/ap/eccs/mysql/bin/mysqladmin -u root password '123456'
遇到的問題
前面幾次安裝的時候,到啟動服務器的環節,都會報錯,提示找不到pid之類的問題,總結下來發現就是因為默認 my.cnf 的問題。
To avoid a possible security hole where a user adds a --user=root option to a my.cnf file (thus causing the server to run as root), mysqld uses only the first --user option specified and produces a warning if there are multiple --useroptions. Options in /etc/my.cnf and $MYSQL_HOME/my.cnf are processed before command-line options, so it is recommended that you put a --user option in /etc/my.cnf and specify a value other than root. The option in/etc/my.cnf is found before any other --user options, which ensures that the server runs as a user other than root, and that a warning results if any other --user option is found.
如上所述,默認Mysql啟動的時候,會從 /etc/my.cnf 或者安裝目錄的根目錄下尋找my.cnf配置文件,如果發現就會使用配置文件中的參數而忽略命令行中的參數,這個特性是困擾很多人或造成問題的根源。我發現在 Redhat 6.7 中,即使我僅僅安裝 Basic Server 選項,在沒有安裝 Mysql 的情況下,系統中也存在 /etc/my.cnf 文件,此時查詢了系統的RPM包,發現存在這樣一個包。
[root@bj1eccap01 ~]# rpm -qa | grep -i mysql
mysql-libs-5.1.73-5.el6_6.x86_64
刪掉 /etc/my.cnf 之后,就一切正常了。
設置隨系統自啟動
讓應用隨系統自啟動一般有兩種方法,一種是放到rc.local下面,一種是放在/etc/init.d下面作為系統服務,兩種方法都是 root 用戶執行的,這里列出第二種方法。
[root@bj1eccap02 ~]# cp /home/ap/eccs/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@bj1eccap02 ~]# chkconfig --add mysqld
[root@bj1eccap02 ~]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[eccs@bj1eccap02 ~]$ service mysqld start
Starting MySQL.. [ OK ]
以后就可以使用 service 命令起停了。
本文為作者原創,如果您覺得本文對您有幫助,請隨意打賞,您的支持將鼓勵我繼續創作。
參考資料:
1、installing standar source
2、source configuration options
3、
4、Ignoring user change
5、腳本中實現切換用戶並
6、在Linux中,開機自動運行普通用戶的腳本程序