linux安装JavaEE环境JDK、Tomcat、Mysql

JDK

1、把压缩包上传到linux服务器目录/usr/local/tmp
这里使用FileZilla上传
2、解压压缩包:tar zxvf jdk-8u191-linux-x64.tar.gz
3、把解压后的文件复制到/usr/local/jdk8
cp -r jdk1.8.0_191 /usr/local/jdk8
4、配置环境变量,linux是通过修改环境变量配置文件来配置,使用vim编辑:
vim /etc/profile
在文件中添加环境变量信息:
#export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export JAVA_HOME=/usr/local/jdk8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar#jdk1.6以后不用配置classpath

20200421165530

5、解析文件或者重启系统
source /etc/profile
6、验证java环境:
[root@localhost ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

Tomcat安装

1、把安装包上传到服务器/usr/local/tmp
[root@localhost local]# ls tmp
apache-tomcat-7.0.68.tar.gz  Demo.class  Demo.java  mysql-5.6.31-linux-glibc2.5-x86_64.tar.gz
2、解压
[root@localhost local]# tar -zxvf tmp/apache-tomcat-7.0.68.tar.gz
3、复制解压文件到/usr/local/tomcat7.0
命令:cp -r apache-tomcat-7.0.68 /usr/local/tomcat7.0
上一步直接把文件解压到local目录了,这一步直接省略。
[root@localhost local]# ls
apache-tomcat-7.0.68  bin  etc  games  include  jdk8  lib  lib64  libexec  sbin  share  src  tmp
4、添加环境变量vim /etc/profile
export TOMCAT_HOME=/usr/local/apache-tomcat-7.0.68
export CATALINA_HOME=/usr/local/apache-tomcat-7.0.68#tomcat启动主服务

20200421165616

运行配置:source /etc/profile
5、开放端口让通过防火墙(centos默认开放端口只有22)
[root@localhost local]# vim /etc/sysconfig/iptables
类似22端口,增加开放8080端口的配置:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
比如要开放连续的多个端口:8080:9900  #开放8080到9900之间的所有端口。
重启服务,使其端口配置生效。
[root@localhost local]# service iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:  
分别有:restart  start   stop

6、启动Tomcat
进入到Tomcat的bin目录
直接启动:./startup.sh
[root@localhost bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.68
Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.68
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.68/temp
Using JRE_HOME:        /usr/local/jdk8
Using CLASSPATH:       /usr/local/apache-tomcat-7.0.68/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.68/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# ./shutdown.sh

启动并打印启动信息:
[root@localhost bin]# ./startup.sh & tailf /usr/local/apache-tomcat-7.0.68/logs/catalina.out
..............###显示启动过程的日志信息
INFO: Server startup in 1567 ms

MYSQL

CentOS上安装MySql官方推荐使用rpm在线安装的方式进行安装。但是使用在线安装的方式无法修改安装的路径,而且速度慢。

1、复制MySQL道服务器/usr/local/tmp

2、解压缩到/usr/local

[root@localhost local]# tar -zxvf tmp/mysql-5.6.31-linux-glibc2.5-x86_64.tar.gz
修改文件名太长
[root@localhost local]# mv mysql-5.6.31-linux-glibc2.5-x86_64 mysql-5.6.31
[root@localhost local]# ls
apache-tomcat-7.0.68  etc    include  lib    libexec       sbin   src
bin                   games  jdk8     lib64  mysql-5.6.31  share  tmp

3、创建用户和用户组

首先:单独为MySQL创建用户和用户组的目的是为了保证mysql服务的独立性,隔离风险;即便mysql服务被黑掉,得到了mysql用户权限,也不会影响整个系统的安全,因为读写不了其他文件。             
其次:所指定的用户是想要运行mysqld进程用户名。这个是可变的,不一定非要是mysql。设置这个用户以后,所有通过mysqld进程创建的文件都会属于这个用户。
添加名为mysql用户组
[root@localhost local]# groupadd mysql
创建用户mysql,并指定所属组为mysql
[root@localhost local]# useradd -r -g mysql mysql

4、赋权,让用户组合用户具有操作权限

一定要保证在需要赋予某个目录权限的这个目录中操作;.号表示本级目录。
变更mysql用户组具有操作本级目录的权限:
[root@localhost mysql-5.6.31]# chgrp -R mysql .
变更mysql用户具有操作本级目录的权限:
[root@localhost mysql-5.6.31]# chown -R mysql .
上面两条命令可以同时换成一条来完成操作:
chown -R mysql:mysql ./
mysql:mysql,第一个mysql是用户名,第二个mysql是组名
chown -R mysql:mysql /usr/local/mysql-5.6.31  #这种也可以

5、初始化(安装数据库注册服务)

判断/etc/my.cnf(mysql全局配置文件)是否存在,如果存在,则删除。
[root@localhost mysql-5.6.31]# ls /etc/my.cnf
/etc/my.cnf
[root@localhost mysql-5.6.31]# rm /etc/my.cnf
rm: remove regular file `/etc/my.cnf'? y
[root@localhost mysql-5.6.31]# ls /etc/my.cnf
ls: cannot access /etc/my.cnf: No such file or directory
执行初始化脚本文件
[root@localhost mysql-5.6.31]# ls scripts
mysql_install_db
[root@localhost mysql-5.6.31]# ./scripts/mysql_install_db --user=mysql #使用mysql用户执行该脚本

6、修改配置文件

配置my.cnf和启动文件,如没有特殊操作,直接复制mysql服务启动配置文件到/etc/下并重命名为my.cnf
[root@localhost mysql-5.6.31]#  cp support-files/my-default.cnf /etc/my.cnf
其实步骤5中的判断/etc/my.cnf可以不用,如果文件存在会提示是否覆盖?
[root@localhost mysql-5.6.31]#  cp support-files/my-default.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
配置启动服务文件
将mysql加入到可控制启动的服务的文件夹内,并命名mysql,就可以用service mysql start控制启动mysql
[root@localhost mysql-5.6.31]# cp support-files/mysql.server /etc/rc.d/init.d/mysql
    /etc/init.d 是/etc/rc.d/init.d的链接,在/etc/init.d添加一个文件会同步在/etc/rc.d/init.d下添加一个相同文件
测试出问题:
[root@localhost mysql-5.6.31]# service mysql-5.6.31 start
/etc/init.d/mysql-5.6.31: line 256: my_print_defaults: command not found
/etc/init.d/mysql-5.6.31: line 276: cd: /usr/local/mysql: No such file or directory
Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)

原因是我的MySQL文件夹带了版本信息,目录名不是默认mysql,解决办法在MySQL全局配置/etc/mycnf中设置MySQL的主目录。
[root@localhost init.d]# vim /etc/my.cnf  
basedir=/usr/local/mysql-5.6.31
datadir=/usr/local/mysql-5.6.31/data
或者
vim /etc/init.d/mysql
#   basedir=<path-to-mysql-installation-directory>
basedir=/usr/local/mysql-5.6.31
datadir=/usr/local/mysql-5.6.31/data
保存,再测试---通过
[root@localhost mysql-5.6.31]# service mysql start
Starting MySQL.. SUCCESS!

开机自启动mysql服务
让mysql服务加入到开机启动指令管理的服务列表中,前提是服务文件拷贝到init.d下
chkconfig --add mysql
显示服务列表:chkconfig --list
如果mysql服务的345都是no的话则执行:
chkconfig mysql on
否则执行如下命令:
chkconfig --level 345 mysql on
on : 针对的服务有等级限制,具体查询chkconfig详细
验证:reboot重启后,运行netstat -na | grep 3306有监听说明成功

7、命令行操作MySQL

以上配置没有问题,启动服务后可以通过命令进入MySQL命令行模式:
[root@localhost mysql-5.6.31]# mysql -u root -p
-bash: mysql: command not found
提示没有命令,需要添加软连接,把mysql中/bin/mysql添加到/usr/bin/中,类似windows中添加一个可执行文件的path或者快捷方式。
[root@localhost mysql-5.6.31]# ln -s /usr/local/mysql-5.6.31/bin/mysql /usr/bin/mysql
这样就可以使用mysql命令行了
[root@localhost mysql-5.6.31]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
...
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.11 sec)

8、设置root密码

如果忘记密码无法登陆,则先通过启动安全模式的方式进入到mysql后修改密码。
进入/etc/my.cnf 在[mysql]下添加skip-grant-tables 启动安全模式   vi /etc/my.cnf
重启服务:service mysql restart
登录mysql,输入密码时直接回车mysql -u root -p
修改mysql数据库中的user表的password,5.7版本以下才有这个列,5.7及其上密码列为authentication_string:mysql> use mysql
Database changed
mysql> update user set password=password('123456') where user='root';
刷新权限:
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
退出,重新连接,测试ok
[root@localhost mysql-5.6.31]# mysql -u root -p123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.

9、设置远程连接(外部访问数据库)

执行赋予权限命令
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
刷新权限:
mysql> flush privileges;
注:
grant 权限 on 数据库对象 to 用户
如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 "grant option"
%可能是localhost或192.168.0.%或192.168.%.%等等,所以直接使用%
    grant使用可以参考https://www.cnblogs.com/crxis/p/7044582.html

开启防火墙mysql3306端口的外部访问,CentOS升级到7之后,使用firewalld代替了原来的iptables。
[root@localhost mysql-5.6.31]# vim /etc/sysconfig/iptables
[root@localhost mysql-5.6.31]# service iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

外部测试:

20200421165727

10、一系列测试如下

mysql> show satabases;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'satabases' at line 1                 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.02 sec)

mysql> create database demo default character set utf8;
Query OK, 1 row affected (0.01 sec)

mysql> use demo
Database changed
mysql> create table user(id int(10) primary key auto_increment, name varchar(20));
Query OK, 0 rows affected (0.08 sec)

mysql> show tables;
+----------------+
| Tables_in_demo |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

mysql> insert into user values(default,'张三丰'),(default,'江小白');
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from user;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | 张三丰    |
|  2 | 江小白    |
+----+-----------+
2 rows in set (0.00 sec)

11、在服务器上如何批量操作sql语句

拷贝sql脚本文件到服务器
在MySQL命令行中执行脚本文件:source /usr/local/tmp/xx.sql


在mysql有时执行了错误的update或者delete时导致大量数据错误恢复的办法。执行时没有开启事务,也没有对数据进行。这时就需要使用到sqlbinlog工具。

sqlbinlog需要开启,具体的打开方法就不说了。

使用sqlbinlog会产生bin文件,恢复就需要用到这些文件。文件中记录着数据库的所有操作。(此方法的操作是将数据库之前所执行的语句重新执行一次,以达到恢复效果)

具体步骤:

1,先找到bin文件,一般都是在mysql的data文件夹中,结尾以.00000X等形式结束。
2,寻找需要还原的时间点 使用语句   mysqlbinlog  文件名    例(MySQLbinlog xxbin.000001)来查看内容,然后找到对应的具体时间
3,导出sql语句,使用语句   文件名>sql文件路径   例(mysqlbinlog xxxbin,00001>>a.sql mysql -u root -p
如果需要指定时间导出--start--date -stop='' ' 来导出指定时间执行的语句例(sqlbinlog --start-stop='2015-11-22 10:00:00'  xxbin.000001>a.sql mysql -u root -p )这句意思是导出在2015-11-22 10点之前的语句,反之start是导出时间之后的。 和stop可以同时使用。
如果存在多个bin文件,则按照需要导出。
4,使用mysql将导出的语句执行一次。