CentOS7下 Java、Tomcat、MySQL、Maven热部署
本文介绍了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服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令:
net stop mysql
,然后打开第一个cmd1窗口,切换到mysql的bin目录,运行命令: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 -version
验证Java是否配置成功。
安装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不一样。 关于防火墙端口可以查看后面的参考文档)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
出现success表明添加成功- 更新防火墙规则即可:
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
- How To Install Apache Tomcat 8 on CentOS 7
- windows环境中mysql忘记root密码的解决办法
CentOS7下 Java、Tomcat、MySQL、Maven热部署的更多相关文章
- CentOS7下部署java+tomcat+mysql项目及遇到的坑
CentOS 7 下安装部署java+tomcat+mysql 前置:CentOS7安装:https://jingyan.baidu.com/article/b7001fe1d1d8380e7382d ...
- Docker化tomcat 并且使用maven热部署
今天没事干 就把自己的tomcat docker化并且使用maven实现热部署 特别记录一下~ 1.首先进行centos7的安装 就不在记录了 注意的是最好使用centos7 因为docker 依赖 ...
- Maven添加Tomcat插件实现热部署
Maven热部署,顾名思义就是可以不影响项目在服务器中的运行情况,可以实现项目代码的更新,减少启动,编译时间,达到快速开发的目的,也不需要手动拷贝war包到远程项目,可以直接将项目以及war包部署到远 ...
- Maven开发基础总结(Maven自启动,Maven打war包,Maven热部署)
学习内容: 1.不依赖外部Tomcat,自己启动方式部署 2.Maven打war包,远程部署到centOS 3.Maven热部署(不关闭Tomcat部署应用) 做maven开发前提: 1.编码UT ...
- centos7下查看tomcat是否启动/系统日志等
centos7下查看tomcat是否启动/系统日志等 方法一: 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown ...
- CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇
CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境 CentOS7 + Python3 + D ...
- eclipse tomcat maven热部署
1. tomcat插件 如果是Kepler的话,已经自带了tomcat插件,如果没有,到http://www.eclipsetotale.com/tomcatPlugin.html下载安装或在线安装 ...
- maven tomcat 插件实现热部署
tomcat 的maven插件有助于提高开发效率,原因是: --可以直接把项目发布到远程的服务器上. --能够实现项目的热部署,在开发过程中修改了Java类,不需要重启tomcat 首先配置一个tom ...
- 关于Maven打包Java Web项目以及热部署插件Jrebel的使用
Java Web/Eclipse/Maven/Tomcat 最近有个新项目是java web项目,记录一下,可能比较乱.虽然没接触过Java,但是eclipse还是用过的 初识项目 同事说,项目是ma ...
随机推荐
- Zabbix实战-简易教程--技巧(本地化)
1.zabbix的logo图标替换(不建议修改) 3.0版本以下: 1.修改/usr/share/zabbix/include/page_header.php 2.修改/usr/share/zabbi ...
- 认识Java中的字符串
Java 中 String 类的常用方法 Ⅰ String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等,下面我们就来领略它的强大之 ...
- Mysql安装与主从配置
安装MySql 操作系统:Windows Server 2008 R2 Standard MySql版本:mysql-5.7.17-winx64 第一步:解压mysql-5.7.17-winx64.z ...
- PIL遇到问题解决
PIL 全称:Pillow 在使用PIL4.2.1版本读取jpeg文件时,报cannot identify image file,去github源查找原因:https://github.com/pyt ...
- 10 - JavaSE之网络编程
网络编程 网络通信协议分层思想 为什么要分层呢?因为整个网络协议非常复杂,要涉及到方方面面的知识,而且还有对底层硬件的操作,利用分层的思想,我们可以将复杂的通信协议分割成一层层的形式,上一层可以调用下 ...
- BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...
- 我的第一次Pascal程序
今天刚刚来学点Pascal语言,都怪我买的书大多是用Pascal语言写的,所以我只能试着学一点咯! 来一段程序员最经典的Hello World! ; begin write('Hello World! ...
- Java学习之封装
Java是一种面向对象的编程语言,对于面向对象的编程语言中有一种思想叫做封装. 封装是一种很重要的思想,今天在看教学视频时,觉得视频中的例子很好的解释了封装的重要性,能够提高程序的健壮性. 视频中以人 ...
- 五 : springMVC拦截器
springMVC拦截器的实现一般有两种方式 第一种方式是要定义的Interceptor类要实现了Spring的HandlerInterceptor 接口 第二种方式是继承实现了HandlerInte ...
- jquery实现上下滑动选择
$('.rightShow').on('mousewheel', function(ev) { var dir = ev.originalEvent.wheelDelta if(dir == 120) ...