Mysql 編譯安裝並使用自定義用戶啟動


本文基於 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中,開機自動運行普通用戶的腳本程序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM