本系列的lnmp的大框架基本上是按照http://www.linuxzen.com/lnmphuan-jing-da-jian-wan-quan-shou-ce-si-lnmpda-jian-yuan-ma-an-zhuang.html來寫的
最近在學習搭建LNMP環境,nginx相對來說還是比較好搭的,但是mysql就太坑爹了,之前在網上查資料的時候看到一個人說它花了一周的時間源碼搭建mysql,剛開始內心還有點嘲笑他,但是此時此刻我發現是我錯了,周日花了一天的時間使用源碼安裝了mysql,累感不愛。在ubuntu下mysql可以使用apt-get命令一步安裝,僅做少許配置,但是源碼安裝真是掉了一層皮,但是源碼安裝又是一個運維必須要會的一個東西,所以必須學習。
1、下載mysql
這個是最基本的第一步,下載地址http://dev.mysql.com/downloads/mysql/,我選擇了5.7版本的,這一版相對前幾版在配置上變化較大,這也是在我之后搭建的過程中發現的,但是后悔已經來不及了。
2、下載相關依賴
sudo apt-get install cmake libncurses5-dev bison g++
這里要注意的是ubuntu下的libncurses5-dev在紅帽下是另一個名字,這個請自行百度。
3、創建mysql用戶、組
groupadd mysql
useradd -r mysql -G mysql
4、解壓mysql
我把下載好的mysql壓縮包放在了/root目錄下,因為之后要多次使用root權限,索性直接切換到root了。
tar -xzvf mysql-5.7.9.tar.gz cd mysql-5.7.9.tar.gz
5、生成配置文件
在mysql5.7以前,使用configure生成配置文件,但是5.7是使用cmake生成的。這也就是為什么之前要安裝cmake的原因。
在這里要注意的一點是需要事先安裝好boost,如果沒有,在cmake最后再加個參數-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost
即可,系統會自動幫你下載解壓安裝boost
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost make&&make install
參數含義:
-DCMAKE_INSTALL_PREFIX:指定MySQL程序的安裝目錄,默認/usr/local/mysql
-DMYSQL_DATADIR:數據文件目錄
-DDEFAULT_CHARSET:指定服務器默認編碼,默認latin1
-DDEFAULT_COLLATION:指定服務器默認的整理編碼,默認latin1_general_ci
-DMYSQL_UNIX_ADDR:連接數據庫socket文件路徑,默認/tmp/mysql.sock
-DENABLED_LOCAL_INFILE:指定是否允許本地執行LOAD DATA INFILE,默認OFF
-DWITH_DEBUG bool值,表示是否開啟debug模式
-DWITH_MYISAM_STORAGE_ENGINE= MYISAM引擎支持(1|0)
-DWITH_INNOBASE_STORAGE_ENGINE= innoDB引擎支持(1|0)
-DWITH_MEMORY_STORAGE_ENGINE= MEMORY引擎支持(1|0)
-DWITHOUT_xxx_STORAGE_ENGINE:指定不編譯的存儲引擎
SYSCONFDIR:初始化參數文件目錄
-DMYSQL_TCP_PORT:服務端口號,默認3306
-DWITH_COMMENT:指定編譯備注信息
6、編譯安裝
創建安裝目錄 mkdir -p /usr/local/mysql/data
設置權限 chown -R mysql:mysql /usr/local/mysql 編譯並安裝 make&&make install
7、配置(這里的問題最多,出了很多問題,到現在只有這個勉強能用的方法)
①復制my.cnf配置文件
cp /usr/local/mysql/support-files/***.cnf /etc/my.cnf
②配置/etc/my.conf
[mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data log-error=/usr/local/mysql/mysql_error.log pid-file=/usr/local/mysql/mysql.pid #socket=/usr/local/mysql/mysql.sock user=mysql port=3306 explicit_defaults_for_timestamp=true [mysqld_safe] basedir=/usr/local/mysql datadir=/usr/local/mysql/data log-error=/usr/local/mysql/mysql_error.log pid-file=/usr/local/mysql/mysql.pid
③復制權限文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
④初始化MySQL(這步完成后/usr/local/mysql/data目錄下有數據了,本來是空的)
sudo bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid 生成無密碼用戶
或sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid 生成隨機密碼用戶
⑤啟動MySQL(修改密碼)
如果不先使用mysqld_safe直接啟動mysql的話,就會報錯
/usr/local/mysql/bin/mysqld_safe --user=mysql &
service mysql start
/usr/local/bin/mysql -u root -h 127.0.0.1 --skip-password(無密碼)
或/usr/lcoal/bin/mysql -u root -h 127.0.0.1 -p (有密碼)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password'; (注意前面的mysql>是進入mysql的標志,不是命令)
mysql> quit
service mysql stop
可以看到退出mysql服務時是把mysqld_safe也關閉的
⑧啟動mysql(登陸)
/usr/local/bin/mysqld_safe &
service mysql start
mysql -u root -p
從上面可以看出每次啟動mysql時都要先啟動mysqld_safe,在啟動mysql,關閉mysql時會把mysqld_safe一起關掉,所以這就是我認為安裝的不完美的地方,如果是終端apt-get安裝的話從來沒有發生過這種情況。看了mysql的官網在介紹安裝的時候也是這么講的也許是5.7版本就是這樣操作的,連接:
http://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html
http://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysql-install-db.html