背景:本人博客自2014年上線以來否纬,一直使用阿里云
ECS
最低配的實例誊爹,由于最近阿里云ECS
進行了升級遷移,原來的低配實例已經(jīng)不存在了赴捞,升級后實例的配置有所提升,當然價格更高了郁稍,為了更好的發(fā)揮服務器性能赦政,所以就想利用空閑時間對整站進行升級,包含阿里云ecs更換系統(tǒng)盤
,MySQL 5.7.19 編譯安裝與配置
,Nginx 1.12.1 編譯安裝與配置
,PHP 7.1.9 編譯安裝與配置
等恢着。
服務器環(huán)境
CentOS 6.3 64位 全新純凈的系統(tǒng)
/1核1GB
/經(jīng)典網(wǎng)絡 1MB
進入MySQL官網(wǎng)下載頁面桐愉,地址https://www.mysql.com/downloads/
,如果你想使用MySQL 5.7.19的源碼版本掰派,點此處直接下載!
進入MySQL Community Edition下載頁面
選擇操作系統(tǒng)為Source Code
从诲,選擇操作系統(tǒng)版本為Generic Linux
,選擇Compressed TAR Archive, Includes Boost Headers
版本或Compressed TAR Archive
版本靡羡,暫未研究兩個版本的區(qū)別系洛,開始以為Includes Boost Headers不用再去下載Boost庫,然而安裝時發(fā)現(xiàn)還是需要略步,所以此處先任意選擇一個版本碎罚,選擇點擊 Download 進行下載
進入/usr/local/src
目錄纳像,一般我喜歡把下載的文件放在此目錄,根據(jù)自己的喜好設定
[root@iZ2864f6btwZ src]# cd /usr/local/src
下載MySQL文件拯勉,如果wget沒有安裝竟趾,yum -y install wget
即可安裝
[root@iZ2864f6btwZ src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.19.tar.gz
問題錯誤:
如果此處下載遇到如下問題,說明你沒有安裝openssl宫峦,此問題一般只會出現(xiàn)在全新的機器上
[root@iZ2864f6btwZ src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.19.tar.gz--2017-09-22 16:20:26-- https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.19.tar.gz Resolving dev.mysql.com (dev.mysql.com)... 137.254.60.11 Connecting to dev.mysql.com (dev.mysql.com)|137.254.60.11|:443... connected. Unable to establish SSL connection.
解決方案:
安裝opensll岔帽,yum -y install openssl
再次執(zhí)行下載命令即可
由于MySQL 5.7需要boost 1.59以及以上版本,所以還需要下載boost庫导绷,根據(jù)本人測試1.59版本的最為適合犀勒,其它高版本在安裝的時候遇到了一些問題,目前未解決妥曲;下載地址贾费,你也可以點擊此處直接下載boost_1_59_0.tar.gz
,如果wget無法下載檐盟,建議使用迅雷下載后再上傳到服務器目錄
[root@iZ2864f6btwZ src]# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
解壓 boost并拷貝 boost 到 /usr/local/boost 目錄
[root@iZ2864f6btwZ src]# tar zxvf boost_1_59_0.tar.gz
[root@iZ2864f6btwZ src]# cp -r boost_1_59_0 /usr/local/boost
安裝編譯所需的常用組件和依賴包 [ 參考于網(wǎng)絡博客 ]
[root@iZ2864f6btwZ src]# yum -y install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl make cmake
創(chuàng)建mysql用戶組和用戶褂萧,用來運行mysql服務器, -g
指定用戶組, -r
創(chuàng)建系統(tǒng)用戶
[root@iZ2864f6btwZ src]# groupadd mysql
[root@iZ2864f6btwZ src]# useradd -r -g mysql -s /bin/false -M mysql
解壓MySQL葵萎,進入 mysql-5.7.19 目錄
[root@iZ2864f6btwZ src]# tar zxvf mysql-boost-5.7.19.tar.gz
[root@iZ2864f6btwZ src]# cd mysql-5.7.19/
新建MySQL安裝所需要目錄
[root@iZ2864f6btwZ mysql-5.7.19]# mkdir -p /usr/local/mysql /usr/local/mysql/{data,logs,pids}
修改 /usr/local/mysql 目錄所有者權限
[root@iZ2864f6btwZ mysql-5.7.19]# chown -R mysql:mysql /usr/local/mysql
使用cmake命令進行編譯
[root@iZ2864f6btwZ mysql-5.7.19]# 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 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost
使用make命令進行編譯导犹,接下來你將經(jīng)歷漫長的等待~
[root@iZ2864f6btwZ mysql-5.7.19]# make
問題錯誤:
編譯出現(xiàn)錯誤,查詢得知可能是由于內(nèi)存不足導致的
解決方案:
臨時增加交換空間 ( 虛擬內(nèi)存 )[root@iZ2864f6btwZ mysql-5.7.19]# dd if=/dev/zero of=/swapfile bs=1k count=2048000 2048000+0 records in 2048000+0 records out 2097152000 bytes (2.1 GB) copied, 34.6782 s, 60.5 MB/s [root@iZ2864f6btwZ mysql-5.7.19]# mkswap /swapfile Setting up swapspace version 1, size = 2047996 KiB no label, UUID=56026239-26e6-40d9-b080-b95acd9db058 [root@iZ2864f6btwZ mysql-5.7.19]# swapon /swapfile swapon: /swapfile: insecure permissions 0644, 0600 suggested. [root@iZ2864f6btwZ mysql-5.7.19]# chmod 600 /swapfile
查看創(chuàng)建的交換空間
[root@iZ2864f6btwZ mysql-5.7.19]# free -m total used free shared buff/cache available Mem: 992 51 70 0 869 789 Swap: 1999 0 1999
繼續(xù)執(zhí)行
make
命令[root@iZ2864f6btwZ mysql-5.7.19]# make clean [root@iZ2864f6btwZ mysql-5.7.19]# make
如果你編譯完成后不再想要此交換空間羡忘,你可以執(zhí)行如下命令:
[root@iZ2864f6btwZ mysql-5.7.19]# swapoff /swapfile [root@iZ2864f6btwZ mysql-5.7.19]# rm /swapfile
溫馨提示:
MySQL編譯過程等待時間會比較久谎痢,有時都以為是“卡”住了,你可以使用top
命令查看資源狀態(tài)卷雕,看看cc1plus节猿、make等進程是否在跳動,如果有跳動說明安裝還在繼續(xù)爽蝴,由于我的 ecs 配置較低沐批,此過程大約經(jīng)歷了幾個小時纫骑,特別是在29%和74%的時候,幾乎都要快放棄了九孩, 如果有經(jīng)濟的能力的話先馆,建議服務器配置還是盡量買高一點。
[root@iZ2864f6btwZ mysql-5.7.19]# top
make編譯完成
編譯完成后執(zhí)行 make install
進行安裝
[root@iZ2864f6btwZ mysql-5.7.19]# make install
將mysql添加到環(huán)境變量躺彬,修改/etc/profile文件煤墙,在文件最末尾添加export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
[root@iZ2864f6btwZ mysql-5.7.19]# vim /etc/profile
...
unset i
unset -f pathmunge
# mysql執(zhí)行路徑
export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
更新配置文件
[root@iZ2864f6btwZ mysql-5.7.19]# source /etc/profile
初始化數(shù)據(jù)庫, –initialize 表示默認生成一個安全的密碼宪拥,–initialize-insecure 表示不生成密碼
[root@iZ2864f6btwZ mysql-5.7.19]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
將mysql服務文件拷貝到/etc/init.d/
目錄仿野,并給出執(zhí)行權限
[root@iZ2864f6btwZ mysql-5.7.19]# cp support-files/mysql.server /etc/init.d/mysqld
[root@iZ2864f6btwZ mysql-5.7.19]# chmod a+x /etc/init.d/mysqld
將MySQL并加入開機自動啟動
[root@iZ2864f6btwZ mysql-5.7.19]# chkconfig --add mysqld
[root@iZ2864f6btwZ mysql-5.7.19]# chkconfig mysqld on
[root@iZ2864f6btwZ mysql-5.7.19]# chkconfig --list | grep mysqld
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
修改/etc/my.cnf
文件,編輯配置文件如下她君,僅供參考
[root@iZ2864f6btwZ mysql-5.7.19]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
[mysqld_safe]
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[client]
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
[mysql]
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
啟動MySQL
[root@iZ2864f6btwZ local]# service mysqld start
Starting MySQL.2017-09-23T16:13:16.049373Z mysqld_safe error: log-error set to '/usr/local/mysql/logs/mysqld.log', however file don't exists. Create writable for user 'mysql'.
The server quit without updating PID file (/usr/local/mysql[FAILED]2864f6btwZ.pid).
問題錯誤:
由于缺少mysqld.log
和mysqld.pid
文件導致無法正常啟動
解決方案:
創(chuàng)建mysqld.log
和mysqld.pid
文件[root@iZ2864f6btwZ mysql-5.7.19]# touch /usr/local/mysql/logs/mysqld.log [root@iZ2864f6btwZ mysql-5.7.19]# touch /usr/local/mysql/pids/mysqld.pid
修改 /usr/local/mysql 的權限
[root@iZ2864f6btwZ mysql-5.7.19]# chown mysql.mysql -R /usr/local/mysql/
再次啟動MySQL
[root@iZ2864f6btwZ local]# service mysqld start
查看MySQL運行狀態(tài)
[root@iZ2864f6btwZ local]# service mysqld status
MySQL is not running, but lock file (/var/lock/subsys/mysql[FAILED]
問題錯誤:
MySQL is not running, but lock file (/var/lock/subsys/mysql[FAILED]
解決方案:
刪除/var/lock/subsys/mysql
文件脚作,重新啟動MySQL[root@iZ2864f6btwZ local]# rm -f /var/lock/subsys/mysql [root@iZ2864f6btwZ local]# service mysqld start Starting MySQL. [ OK ]
連接MySQL
[root@iZ2864f6btwZ mysql-5.7.19]# mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
[root@iZ2864f6btwZ mysql-5.7.19]#
問題錯誤:
/etc/my.cnf 文件配置不正確
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
解決方案:
參考上述步驟 修改 /etc/my.cnf 文件
[root@iZ2864f6btwZ local]# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.19 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
查看數(shù)據(jù)庫,如果看到以下幾個數(shù)據(jù)庫說明數(shù)據(jù)庫初始化成功
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
進入mysql庫缔刹,查看用戶表信息
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql> select host,user,password from user;
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
mysql>
問題錯誤:
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
解決方案:
由于MySQL 5.7版本下的mysql數(shù)據(jù)庫下已經(jīng)沒有password這個字段了球涛,password字段改成了authentication_string,查詢時使用authentication_string字段即可mysql> select host,user,authentication_string from user; +-----------+---------------+-------------------------------------------+ | host | user | authentication_string | +-----------+---------------+-------------------------------------------+ | localhost | root | | | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | +-----------+---------------+-------------------------------------------+ 3 rows in set (0.00 sec)
設置密碼(推薦)校镐,注意此方法必須使用flush privileges
命令刷新一下權限才能生效
mysql> UPDATE user SET authentication_string=PASSWORD('newpassword') WHERE user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql>
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
另外一種方法可以快速密碼亿扁,但此方法設置的密碼使用history
命令可以看到,所以不太推薦
[root@iZ2864f6btwZ ~]# mysqladmin -u root password 'newpassword'
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
結(jié)尾:
至此鸟廓,MySQL 5.7.19 編譯安裝及配置已經(jīng)全部完成从祝,有疑問的朋友可以給我留言,若有毛病引谜,歡迎指正牍陌。