本文介紹了CentOS7 下MySQL5.7、Java、Tomcat、Maven熱部署等伺服器環境的搭建和調試過程。
學生伺服器資源擷取方法:
- 雲+校園計劃 - 騰訊雲
- 阿裡雲雲翼計劃
- github 學生包,裡面有Digital Ocean 50美元的VPS可用
已經将所需要的工具(Xshell,Xftp、FileZilla等sftp上傳工具,jdk-8u101-linux-x64.tar.gz和apache-tomcat-9.0.0.M10.tar.gz)上傳至百度雲 http://pan.baidu.com/s/1qYRms8G
MySQL5.7
安裝MySQL5.7
CentOS 7的yum源中貌似沒有正常安裝mysql時的mysql-sever檔案,需要去官網上下載下傳
# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# rpm -ivh mysql57-community-release-el7-11.noarch.rpm
# yum install mysql-community-server
# 成功安裝之後啟動mysql服務
# systemctl start mysqld.service
# 初次安裝mysql是root賬戶是沒有密碼的,需要我們自己設定密碼
# mysql -uroot
# mysql>set password = password("你的密碼");
# mysql>flush privileges;
# mysql> exit
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
安裝完MySQL5.7後 執行
mysql -uroot
首次登陸會出現此問題,原因是 MySQL5.7設定了臨時密碼。
$sudo cat /var/log/mysqld.log | grep password
2017-04-14T11:45:46.950302Z 1 [Note] A temporary password is generated for root@localhost: NS_E#kj!E5lJ
$mysql -uroot -pNS_E#kj!E5lJ
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
原來MySQL5.6.6版本之後增加了密碼強度驗證插件validate_password,相關參數設定的較為嚴格。使用了該插件會檢查設定的密碼是否符合目前設定的強度規則,若不滿足則拒絕設定。影響的語句和函數有:
create user,grant,set password,password(),old password
。簡單點說就是系統認為密碼太簡單,設定複雜點就行了。如
!QAZ2wsx
。
設定MySQL遠端連接配接
進入MySQL後通過
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密碼' WITH GRANT OPTION;
可以允許任意主機通路你在伺服器搭建的MySQL,可以吧
%
更換為你需要允許的IP和主機。
但是,在我進行遠端連接配接的時候發生如下錯誤

可以根據下面進行排錯
- 伺服器是否可以通路,是否能ping 通
- 安全組及端口号是否打開或者被占用
- 伺服器是否運作或者關閉隻允許本機通路
- 重新開機試試
當我排除上面3中情況後,發現屬于第四中,可能是因為還沒有立即生效。
解決MySQL中文亂碼問題
在我建立資料時發現中文無法插入,于是檢視使用
show variables like 'character%';
如圖所示,發現預設不是utf-8,如圖:
于是通過在CentOS7中修改檔案/usr/share/mysql/my-default.cnf,在[mysqld],[mysql],[client]下分别添加如下内容:
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character_set_server = utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
修改完成後,重新開機mysql服務,systemctl restart mysql,然後進入mysql,再次使用
show variables like 'character%';
指令檢視,如圖:
發現一樣,說明utf-8可以使用,但是無法插入中文,于是猜測可能是系統原生不支援utf-8,更改系統編碼後發現果然如此。
# cat /etc/locale.conf
LANG="en_US.UTF-8"
# vim /etc/locale.conf
# cat /etc/locale.conf
LANG="zh_CN.UTF-8"
于是更改為
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
執行
source /etc/locale.conf
或者
重新開機伺服器
之後,再次重新開機MySQL服務。
如圖,發現可以插入中文。
解決MySQL忘記密碼
通過跳過權限安全檢查設定新密碼。
- 首先檢查mysql服務是否啟動,若已啟動則先将其停止服務,可在開始菜單的運作,使用指令:
,然後打開第一個cmd1視窗,切換到mysql的bin目錄,運作指令:net stop mysql
mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server 5.5\my.ini" --console --skip-grant-tables
,将指令中的MySql版本更換你的版本。
該指令通過跳過權限安全檢查,開啟mysql服務,這樣連接配接mysql時,可以不用輸入使用者密碼。
此時已經開啟了mysql服務了!
這個視窗保留不關閉。
- 打開第二個cmd2視窗,連接配接mysql
- 輸入指令:
出現:mysql -u root -p
,在這裡直接回車,不用輸入密碼。 然後就就會出現登入成功的資訊。Enter password:
- 使用指令切換到mysql資料庫:
use mysql;
- 使用指令更改root密碼:
UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
- 重新整理權限:
FLUSH PRIVILEGES;
- 然後退出,重新登入:
quit
- 重新登入: 可以關掉之前的cmd1 視窗了。
- 輸入指令:
- 然後用
啟動服務net start mysql
- 登入:
mysql -u root -p
- 出現輸入密碼提示,輸入新的密碼即可登入:
Enter password: ***********
- 登入:
顯示登入資訊: 成功 就一切ok了
Java環境配置
環境準備
通過
uname -r
判斷系統是多少位
- 64位 : 出現x86_64
- 32位 : 出現i686或i386
安裝Java JDK8.0
- 建立Java目錄,存放Java和Tomcat
-
cd /usr/local/
-
mkdir Java
-
cd Java
-
- 使用FileZilla将下載下傳好的jdk-8u101-linux-x64.tar.gz 和 apache-tomcat-9.0.0.M10.tar.gz上傳至Java目錄下(傳送的國外伺服器很慢,國内幾乎是國外的十倍,但是也隻有兩三百KB,也可能是電腦問題)
- 将上傳的jdk解壓,然後重命名為jdk
-
tar -zxv -f jdk-8u101-linux-x64.tar.gz
-
mv jdk1.8.0_101 jdk
-
cd jdk
-
- 配置環境變量Environment=JAVA_HOME=/usr/local/Java/jdk
-
vim /etc/profile
- 打開之後按鍵盤(i)進入編輯模式,将下面的内容複制到底部
JAVA_HOME=/usr/local/Java/jdk PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar export PATH JAVA_HOME CLASSPATH
- 寫完之後我們按鍵盤(ESC)按鈕退出,然後按(:wq)儲存并且關閉Vim。
- 使用
指令使其立即生效source /etc/profile
-
驗證Java是否配置成功。java -version
-
安裝Tomcat9
- 在Java目錄下解壓上面一步已經上傳上去的Tomcat9.0
-
tar -zxv -f apache-tomcat-9.0.0.M10.tar.gz
-
mv apache-tomcat-9.0.0.M10 tomcat
-
cd tomcat
-
- 啟動指令為
/usr/local/Java/tomcat/bin/startup.sh
- 啟動完成後還需開放8080端口(CentOS7這個版本的防火牆預設使用的是firewall,與之前的版本使用iptables不一樣。 關于防火牆端口可以檢視後面的參考文檔)
-
出現success表明添加成功firewall-cmd --zone=public --add-port=8080/tcp --permanent
- 更新防火牆規則即可:
firewall-cmd --reload
- 重新開機防火牆
systemctl restart firewalld.service
-
- 然後再次在浏覽器中輸入http://ip:8080,如果看到tomcat系統界面,說明安裝成功。
- Tomcat 8080 端口無法通路
- 檢視8080端口被那個程式占用(應該是Java) netstat -anp 然後再殺死占用程序。
- 可能是你的伺服器提供商有安全組來控制端口,你需要去提供商那裡開啟端口(PS:我的阿裡雲伺服器就是必須要設定端口安全組才可以通路端口)
- 關閉指令為
/usr/local/Java/tomcat/bin/shutdown.sh
Maven 熱部署
Maven 熱部署可以通過一行指令部署到本地伺服器,沒有問題的話就一行指令部署到正式伺服器。及其友善了開發和部署。因為我的Tomcat9遇到很多問題。
可以參考 maven自動部署到遠端tomcat教程 進行部署和測試。
下面是我遇到的一個錯誤,因為沒有配置IDEA的make 導緻出錯。
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) on project liwenhao: Cannot invoke Tomcat manager: Connect
ion reset by peer: socket write error -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1]
可以通過将make如下配置
即可成功
war包部署在伺服器亂碼
可以通過配置如下屬性,解決中文war包伺服器亂碼。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
配置完圖。
在我通過
mvn tomcat7:deploy
指令熱部署時,會出現mysql無法連接配接的情況,後來在我重新進行熱部署的時候,沒有出現這個問題。
猜測
應該是我的配置檔案的問題
參考文檔
- centos 7 開放 80端口
- centos7 設定中文
- CentOS 7下徹底解除安裝MySQL資料庫
- CentOS7 遠端通路MySQL
- Centos 7 mysql 5.7 給root開啟遠端通路權限,修改root密碼
- 連接配接Mysql提示Can’t connect to local MySQL server through socket的解決方法
- How To Install Apache Tomcat 8 on CentOS 7
- windows環境中mysql忘記root密碼的解決辦法