频道栏目
首页 > 资讯 > 浏览器 > 正文

成绩查询系统--发布篇--centOS7tomcat开机启动+mysql数据库配置

15-06-20        来源:[db:作者]  
收藏   我要投稿

前情介绍

成绩查询系统投入使用,部署在一台linux服务器上,是centOS7系统的.之前在本机的虚拟机中装过centOS7,还写了一篇博客.这次呢,系统是已经装好了的,我不需要再装一次了,然后jdk环境之前就弄好了,mysql也已经装好了(但是实际上从未投入过使用),还有jboss服务器也装好了,不过我的项目用的是tomcat,所以我只要装一个tomcat就好了.

Tomcat安装

首先,从tomcat官网上下载,tomcat的linux版本,我下载的是tomcat7,版本是:apache-tomcat-7.0.62.tar.gz.对于这个我直接是用图形化界面操作的,解压,放到/usr/local下面,重命名为tomcat.安装主要参考:简单介绍Linux下安装Tomcat的步骤

然后就是启动tomcat了,输入命令:[cd /usr/local/tomcat],然后输入命令为[./bin/startup.sh],.开始启动的时候,说没有权限,于是用root登录,并且修改权限为777;命令[chmod 777 startup.sh];后来发现还是无法启动,于是在bin目录下的setclasspath.sh文件下,添加java_home和jre_home (根据实际情况),就行了.主要参考:linux下tomcat无法启动

 

export JAVA_HOME=/opt/zimbra/jdk1.6.0_31
export JRE_HOME=/opt/zimbra/jdk1.6.0_31/jre 
后来tomcat启动成功了,启动成功的时候,终端会输出一段文字,之后是tomcat start.输入localhost:8080,可以访问了.然后就是部署我们的系统,最开始的时候,我是把源码打了一个zip的包,后来发现放到tomcat的webapps下,并不会自动部署.后来,想到我的项目是一个动态web项目,我应该是打成war包,然后放到webapps下,然后启动中的tomcat才会自动部署.于是,重新打了一个war包,果然可以用了.

 

自此以为所有的事情都完成了,但是后来发现2个问题.首先,tomcat没有设置为开机自启动,于是,每次开了服务器,我还要手动输入,[cd /usr/local/tomcat],然后输入[./bin/startup.sh],自己启动tomcat.第二个是,我们的项目,连接的mysql的数据库是在我电脑上的,这样子的话,每次要用项目,我的电脑就必须是开启状态,而且感觉这样的话,数据在我电脑上,很不安全,所以要把数据库改到linux的mysql上.

tomcat开机启动

tomcat的开机启动,做法比较简单.主要参考linux教程:[4]配置Tomcat开机启动 ,里面的步骤非常详细和清楚(除了部分地方图文不对应,而且主要看图比较好).

第一步,修改tomcat下的startup.sh文件,切换到tomcat的bin目录下,然后用命令[vi startup.sh],打开start.sh文件,也可以用图形化界面,找到该文件,直接打开.在紧挨着[# !/bin/sh]这句的下面,加上三句话.

 

#chkconfig: 2345 80 90    
#description:tomcat auto start    
#processname: tomcat
其中,chkconfig,是加入到自启动中的关键,别写错单词了.最开始由于操作不熟练,虽然是拷贝过去的,但是后来一不小心改掉了,变成kconfig,于是后面命令[chkconfig --list]报错,tomcat 服务不支持 chkconfig.因为那句就是去找#chkconfig: 2345 80 90的.

 

顺便说下,vi的部分操作,用vi进入startup.sh文件之后,点击按键esc,然后点击按键i,这样可以看到--insert--的字样,表示可以输入.修改完毕之后,按esc,输入[:wq],就可以保存并退出了.还有就是查找的方式,进入文件之后,输入[./],之后就会看到[/],然后在[/]的命令后面输入你要查找的文字,如export,于是最后输入完毕,就是这样[/export],回车他就会去自动跳转到下一个export的地方.

第二步,第一步编辑完startup.sh,就可以编辑catalina.sh,都是在tomcat的bin目录下.按照vi的搜索的方式,找到[export QIBM_MULTI_THREADED=Y],紧挨着这个添加三句环境变量.而这三句的地址都是tomcat的安装目录(根据你实际的情况),就到tomcat,我的tomcat真正的路径是/usr/local/tomcat.修改完毕之后,[:wq],保存退出.

 

export CATALINA_BASE=/usr/local/tomcat
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_TMPDIR=/usr/local/tomcat
第三步,将startup.sh做一个快捷方式,将该快捷方式,放到/etc/rc.d/init.d下,名为tomcat7.你也可以考虑直接将catalina.sh,直接拷贝到该目录下,并做一下一些修改,重命名为tomcat7,也行.参考这篇文章:linux tomcat7 自动启动 .

 

命令是这样的[ln -s /usr/local/tomcat/bin/startup.sh /etc/rc.d/init.d/tomcat7],然后从界面上,就可以看到在init.d,会有一个快捷方式指向startup.sh文件了.

当然从终端是这么看的,切换到etc目录下[cd /etc/rc.d/init.d],然后用ll或者ls,就可以看下是否有可执行的权限,一般是有的,没有的话,要么专门添加可执行的权限,要么全加.命令分别是[chmod +x tomcat7],或者[chmod 777 tomcat7].

第四步,将tomcat添加到开机启动服务中,命令为[chkconfig --add tomcat7],如果报错[tomcat 服务不支持 chkconfig],请检查startup.sh的最上面,那chkconfig的三句话是否正确.

第五步,确认下是否添加成功.用命令[chkconfig --list],查看,效果应该是这样子的.

 

tomcat          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
第六步,重启linux,一开机就输入localhost:8080,看是否能用.能用,就表示成功了.不能用,请自行查找资料解决.

 

以上,就是tomcat配置自启动的过程了.

centOS的mysql

tomcat的问题解决完了,现在就是将mysql从我的电脑35上,切换到服务器244上.这个遇到了不少问题.

初始化mysql的密码

首先,我要找到linux的mysql在哪,或者怎么打开.在任意的地方,打开终端,输入命令[mysql -u root -p],然后要求输入密码,输入root,不管用.

 

[root@bogon 桌面]# mysql -u root -p
Enter password:
ERROR 1045 (28000):Access denied for user 'root'@'localhost' (using password: YES)
这里出错,需要设置初始化密码.输入命令[mysql_secure_installation],后面就会让你修改密码,并确认密码.下面所有带背景的地方,都是我输入值的地方.

 

 

[root@localhost /]#mysql -u -root -p
Enter password:
ERROR 1045 (28000): Access denied for user '-root'@'localhost' (using password: YES)
[root@localhost /]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] n
... skipping.
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n
... skipping.
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] n
... skipping.
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
Cleaning up...
然后密码修改完了之后,再输入命令,输入密码,就可以进入了.

 

 

[root@localhost /]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.6.24 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, 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.

 

建库建表

 

这样,建立数据库officialsystem,用命令[create database officialsystem],就可以了.然后,重启tomcat,这个过程比较纠结,我都是靠重启linux服务器来重启的tomcat,我也不知道为什么我shutdown.sh的tomcat之后,再startup.sh不管用,后来,我才想到,我其实可以用将webapps中的tomcat自动部署的解压的文件删掉.然后让他根据放在webapps的war包自己再部署一次.

后来,我发现,我们写的代码真的非常有问题.首先,我本来是有4张表的,但是tomcat重启之后,数据库中只有3张表,因为之前实体Official的id类型是int,但是后来改为了String,然后在id上还没去掉默认为自增的生成策略[@GeneratedValue].于是删掉这句注解,然后就顺利生成了四张表.

然后,就是给Users表中写入数据,手动写入用insert into语句,可以测试了.用刚写好的管理员账号登陆后台,想要往backstage表中写入数据,可是,发现修改失败.原来,我们做的功能都是更新,但是最初的写入功能,我们是没有的.所以,我们需要初始化数据,于是又手动网backstage中添加了一条数据,全写了1.

Mysql Workbench远程连接linux的mysql

然后想要更新backstage表,发现还是失败.然后把update的这句话,放到mysql的图形化界面,发现是中文乱码问题.

说明一下Mysql Workbench是在window上使用,可以远程连接linux上的mysql的工具.从csdn上下载下来的,版本是这样的mysql-workbench-community-6.2.4-winx64.msi,然后安装不成功,因为没有C++2013,于是去下载,vcredist_x64.exe,安装完毕之后,顺利安装好workbench.

然后远程连接mysql,又比较悲剧了.由于我没有截图,我就提供一下别人的图了.参考:CentOS-7下安装MySQL5.6.22

连不上,主要要做2步,1.给用户远程访问的权限;2.关闭防火墙.

第一步,在终端,进入mysql,输入[GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '这里是你的密码' WITH GRANT OPTION;],主要将这里是你的密码,改成你真正的密码.不写密码[GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION;],直接执行这句也行,这样的话不用输入密码就能访问.

我这句的作用是将所有的用户名,都设置能远程访问该mysql中所有的表,如果不想都放开,可以根据这个规则,来设置.grant 权限1,权限2,…权限n on 数据库名.表名 to用户名@用户地址 identified by‘口令’.我写的那句是参考这篇文章拿来的,MYSQL远程登录权限设置 .

第二步,权限设置好了,就可以关闭防火墙了.首先据说centOS7对于关闭firewall,跟之前不一样了.现在是这样的

 

[root@bogon 桌面]# systemctl stop firewalld.service #停止firewall
[root@bogon 桌面]# systemctl disable firewalld.service #禁止firewall开机启动
首先输入上面的两句,分别为停止firewall,以及将禁止friewall开启启动,没做这个操作之前,可以用[systemctl list-unit-files],来查看系统中的开机启动,当时firewall的状态是enable,作为了就变成disable了.

 

PS,我开始的时候执行[systemctl stop firewalld.service],不行,一直说我语法有问题.后来,我重启电脑,直接在桌面上输入[systemctl stop firewalld.service]没有问题,所以,我觉得可能是因为我当时不是在桌面路径下输入的.

现在防火墙关闭了,安装iptables,然后再永久禁用iptables.其实,我不知道为什么要安装iptables之后,再禁用.这样的话,干脆就不要安装啊.不过我还是做了.

按照说法是,centOS虽然默认的不是iptables,但是也是已经安装好的的,所以给3306端口配置开放规则.编辑iptables文件.输入命令[vi /etc/sysconfig/iptables],然后加上一句[-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT].

 

[root@bogon 桌面]# vi /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or usesystem-config-firewall
# please do not ask us to add additionalports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --stateRELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp--dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-withicmp-host-prohibited
-A FORWARD -j REJECT --reject-withicmp-host-prohibited
COMMIT

然后永久关闭防火墙iptables,重启服务器.才能连接成功

 

 

[root@bogon bin]# chkconfig iptables off
注意:正在将请求转发到“systemctl disableiptables.service”。
做完以上命令之后,将服务器电脑重启,然后再用mysql workbench才能连接上.

 

mysql中文乱码问题

回到刚刚的问题,更新数据,数据中带中文,不成功,错误大概是这样的

MYSQL写入数据时报错ERROR 1366 (HY000): Incorrect string value: '\xE8\x8B\xB1\xE5\xAF\xB8...' for c
然后,我们要做的主要就是将mysql的编码都改为utf-8.这个问题,我之前在我的window的mysql下解决过,主要就是改my.ini文件,将latin1的都改为utf-8.

 

[mysql]
default-character-set=utf8

 

还是从头说下,首先,要从终端进入mysql,或者在mysql weorkbench中,输入[show variables like 'character%'],

然后发现,database和server都是latin1,所以需要修改这两个为utf-8.输入命令[vi /etc/my.cnf],打开,发现我的my.cnf中的内容,比我看到的所有人提供的资料中的内容都要少.比如这篇文章中CentOS 6.5安装MySQL中文乱码问题解决 ,说

 

[client]
default-character-set = utf8      #这个是我添加的

 

只有这一句是他添加的,可是我的my.cnf中根本没有[client],也没有[mysql],只有一个[mysqld].于是我根据这篇文章中的,CentOS7下让MySQL支持中文 内容修改,基本上全部拷贝他提供的,比如他在[mysql]中添加最后一句,我则是将这三句都拷过来.

[mysql]

no-auto-rehash

default-character-set=utf8

最后说明下我主要加了,这些东西,最后,大概是变成这样.对于mysqld,不仅改变了server的编码,并且还设置新建的数据库和表的编码.

 

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8


[mysql]
no-auto-rehash
default-character-set=utf8

 

然后,在终端,输入[service mysql restart],重启mysql服务.如果,此时终端在mysql中,输入exit,退出mysql.再输入[service mysql restart] ,就可以了.PS,如果你的my.cnf拷贝的有问题的话,[service mysql restart]会执行很长时间,表示不成功的.而没有问题的话,大概3-4秒中,重启就可以完成了.

然后再查看[show variables like 'character%'],数据库编码就成功了,都是utf-8,除了filesystem,一直都是binaray,二进制外.

然后为了以防万一,重新建立数据库officialsystem,然后用命令[show create databse officialsytem],看出数据库的编码,为utf8.

接下来,还是初始化一遍管理员的数据,和backstage的数据,通过界面更新backstage数据,成功.

excel导入数据到mysql

最后一步,就是将official中的真实数据给导入.这里得说明一下,由于我们在实体上只写了@Entity这个标签,没有写表名,所以在window的mysql,hibernate生成的表是首字母小写的,如实体是Official,表为official,但是在linux中的mysql,hibernate生成的表,则跟实体一样,Official的表还是Official,所以每次查表的时候,都感觉很费劲,当初为什么不给设置一个默认的表名呢.

然后,将数据往数据库中到,观察到的效果是非常非常的慢,平均1分钟写2条数据.开始的时候,我以为是连接数的问题,于是修改刚刚说过的my.cnf文件,在[mysqld]下加了一句[max_connections=1000].重启mysql [service mysql restart],再执行,还是不管用,还是非常慢.

PS,除了这样彻底修改最大连接数,还有一种临时的方式,就是在终端mysql中,先输入[show variables like 'max_connections'],看一下当前最大的连接数,然后输入[set global max_connections = 1000],这种的只在mysql当前服务进程中有效,一旦mysql重启,又会恢复到初始状态.参考:Centos修改Mysql数据库最大并发连接数脚本 ,其中提到的[显示当前运行的Query:mysql>show processlist;],这句命令蛮有用的,我在下面的问题解决之后,用这个观察了一下运行状态,当时主要是3-4条记录,主要是35来执行,连接数据库的时候,注意到time 最开始是10,刷新之后变成6,然后变成2.就可是正常导入数据了.

后来仔细观察代码,发现代码是这个样子的,

 

public class DBHelper {

	    String driver = "com.mysql.jdbc.Driver";
	    String url = "jdbc:mysql://localhost:3306/officialsystem?useUnicode=true&characterEncoding=UTF-8";
	    
	    Connection con = null;
	    ResultSet res = null;
            //连接数据库,过程非常慢
	    public void DataBase() {
	            try {
	                Class.forName(driver);
	                con = DriverManager.getConnection(url, "root", "root");
	            } catch (ClassNotFoundException e) {
	                // TODO Auto-generated catch block
	                  System.err.println("装载 JDBC/ODBC 驱动程序失败。" );  
	                e.printStackTrace();
	            } catch (SQLException e) {
	                // TODO Auto-generated catch block
	                System.err.println("无法连接数据库" ); 
	                e.printStackTrace();
	            }
	    }
	    
	    // 增删修改
	    public int AddU(String sql, String str[]) {
	        int a = 0;                                                                                                                                                //每次都要执行
	        DataBase();
	        try {
	            PreparedStatement pst = con.prepareStatement(sql);
	            if (str != null) {
	                for (int i = 0; i < str.length; i++) {
	                    pst.setString(i + 1, str[i]);
	                }
	            }
	            a = pst.executeUpdate();
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	        return a;
	    }
	}
addU方法,每次都会去执行DataBase(),连接数据库,而这个过程,在我后来看来观察看来,是非常慢的.于是,将代码改成这样

 

 

public class DBHelper {

	Connection con = null;
	ResultSet res = null;
	//构造方法时,连接数据库
	public DBHelper() {

		String driver = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/officialsystem?useUnicode=true&characterEncoding=UTF-8";
 
		try {
			Class.forName(driver);
			con = DriverManager.getConnection(url, "root", "root");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.err.println("装载 JDBC/ODBC 驱动程序失败。");
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.err.println("无法连接数据库");
			e.printStackTrace();
		}

	}

	// 增删修改
	public int AddU(String sql, String str[]) {
		int a = 0;
		try {
			PreparedStatement pst = con.prepareStatement(sql);
			if (str != null) {
				for (int i = 0; i < str.length; i++) {
					pst.setString(i + 1, str[i]);
				}
			}
			a = pst.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return a;
	}

}
然后就是最开始的时候,大概有10-15秒中,没有任何反应的在连接数据库,然后就是非常快速的往数据库中插入数据,大概20秒之后,插入450条数据完成.

 

最后,就是将Official表中的isTrue字段,都更新为"是",但是使用[update officialsystem.Official set isTrue = '是']之后,不行.参考:Error Code: 1175. You are using safe update ,将mysql的运行模式,改为了0;若运行模式为1,则在非主键条件下无法执行update或delete命令.所以在mysql中,输入[set SQL_SAFE_UPDATES=0],然后再更新,就成功了.之后再改回来了,输入[set SQL_SAFE_UPDATEA=1],这样数据库的安全级别就比较高了.

PS,由于Official表的主键是String类型,但是值其实就是1,2,这种,要查看的话,输入[select * from Official order by -id desc],就可以从小到大排序了,不同就是在id前面加了[-].

到此,tomcat的自启动和mysql数据库的切换就完成了.查了很多资料,试了n多次,终于完成了.为了防止我忘记,所以立马写了这篇博客,以此纪念我查了n多的资料.

相关TAG标签
上一篇:建立视图报ORA-01031:insufficientprivileges
下一篇:线上问题排查命令----Shell篇
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站