发表于: 2018-03-29 22:00:35

1 554


今天完成的事情:

1.本地连接远程服务器数据库

2.配置jdk

3.配置Maven

4.测试项目跑通远程数据库



早上登陆服务器mysql,先是拒绝登陆,又是出现下面这个情况

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)                                                                   

简直莫名其妙


为什么mysql.sock这个文件又莫名奇妙的没有了!

在日志里只看到昨天上午生成的socket有关信息,后面完全没有

2018-03-28T10:09:51.551600Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.

2018-03-28T10:09:51.552272Z 0 [Note] InnoDB: Waiting for purge to start

2018-03-28T10:09:51.602455Z 0 [Note] InnoDB: 5.7.21 started; log sequence number 2552022

2018-03-28T10:09:51.602756Z 0 [Note] Plugin 'FEDERATED' is disabled.

2018-03-28T10:09:51.606527Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key

2018-03-28T10:09:51.606876Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool

2018-03-28T10:09:51.607803Z 0 [Note] InnoDB: Buffer pool(s) load completed at 180328 18:09:51

2018-03-28T10:09:51.608395Z 0 [Note] Server hostname (bind-address): '*'; port: 3306

2018-03-28T10:09:51.608439Z 0 [Note] IPv6 is available.

2018-03-28T10:09:51.608450Z 0 [Note]   - '::' resolves to '::';

2018-03-28T10:09:51.608467Z 0 [Note] Server socket created on IP: '::'.

2018-03-28T10:09:51.624855Z 0 [Note] Event Scheduler: Loaded 0 events

2018-03-28T10:09:51.624997Z 0 [Note] mysqld: ready for connections.

Version: '5.7.21'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL)


仔细去找了关于socket文件的信息:

mysql有两种连接方式:

1.TCP/IP

2.socket

mysql.sock的作用是服务器和客户端在同一台服务器上并且是用loclhost连接的时候(就是访问本地),就会用到它来连接,这是一个套接字文件,就是为主机名为localhost的访问建立连接。如果没有,localhost用户是访问不到的。

而TCP/IP就是网络连接访问,就是使用IP地址去访问,不会使用到mysql.sock。就如同使用127.0.0.1访问数据库,而不是localhost。同样的远程访问也是使用此种连接方式。

然后就使用IP访问,仍然报错:

 mysql -h127.0.0.1 -uroot -p


ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)


难道是防火墙? iptables -L -n  可以看到没有规则,没有设置

查看firewell:

也没有开启

找了半天发现主要是这几个原因:

1.没有mysql.sock

2.拒绝登陆(Access denied for user XXXX

3.启动mysql(service mysql restart)的时候找不到mysql服务

4.不能通过‘IP地址’连接


思来想去,之前唯一一次解决的办法就是 mysqld --user=root

于是就执行了,不出意料又是一直等待。

通过fxp连接,看到socket路径下生成了文件mysql.sock

然后重新登录服务器,连接mysql,提示:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

不行。然后使用127连接:mysql -h127.0.0.1  -uroot -p  这次可以登录了。


但是在本地电脑用CMD又登不上去了……


使用Navicat连接:

连接测试:

不动配置再测试一下:

不能使用localhost,然后改了常规配置,SSH的配置不动:

‘常规’是连接数据库的账号密码IP属性配置,而SSH是连接服务器的账号密码IP属性配置。


Navicat可以登录,但是cmd命令提示无法登录

在服务器查看了user表,也设置了允许远程登录:


而且如果Navicat不使用SSH也是无法连接,和cmd命令行同样的提示。


2.配置jdk(之前配置过了,由于重装系统这里重新配置一遍)


2.1)下载jdk

下载 jdk-8u161-linux-x64.tar.gz 


2.2)上传到服务器

使用fxp上传到服务器


2.3)解压

复制到 /usr/local/java/ 下 

解压  tar -zxvf jdk-8u161-linux-x64.tar.gz

删除压缩包  rm -rf jdk-8u144-linux-x64.tar.gz


2.4)配置环境变量 

输入:vim profile 打开profile 描述文件

进入编辑模式,在最后一行输入:

export JAVA_HOME=/software/jdk1.8.0_111
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

然后保存退出

重置资源:source /etc/profile


java -version 查看:


3.配置Mven


3.1)同jdk一样在apache官网下载maven二进制包:apache-maven-3.5.3-bin.tar.gz

3.2)复制解压,然后把mvn的命令创建连接(方便使用mvn):

     ln -s /usr/local/java/apache-maven-3.5.3/bin

3.3)同样打开描述文件,添加maven变量

由于之前添加软链接的时候添加错了,所以mvn不能用,只能使用全路径

然后就想把软链接删除掉

然后就执行了 rm -rf ./bin

然后可以使用mvn命令了



4.测试本地跑通远程数据库


一直没办法通过cmd连接,困扰了好久

然后问了一下小伙伴们…在控制台开通了3306端口,终于可以了。

因为之前可以连接,而且控制端还有个配置ALL端口都允许,所以还以为端口是已经通了的,没往这方面想。

虽然只是一个端口配置的问题,但是困扰了我好久。就是因为之前Navicat可以跑通,所以还特地去查了java如何通过SSH通道连接数据库,还想着配置SSH通道的配置。

但是这总不是最好的办法。

然后就是通过本地操作远程数据库了。

查询,插入数据:

修改了resource连接远程服务器:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
<property name="jdbcUrl">
<!--<value>jdbc:mysql://localhost:3306/jnshu</value>-->
       <value>jdbc:mysql://119.29.17.188:3306/jnshu</value>
</property>

<!--连接池中保留的最大连接数。Default: 15 -->
   <property name="maxPoolSize">
<value>30</value>
</property>

<!--初始化时获取的连接数,取值应在minPoolSizemaxPoolSize之间。Default: 3 -->
   <property name="initialPoolSize">
<value>5</value>
</property>

<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
   <property name="maxIdleTime">
<value>60</value>
</property>

<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
   <property name="acquireIncrement">
<value>5</value>
</property>

</bean>


通过本地跑通测试:

    @org.junit.Test
   public void testSelectById(){

//        logger.debug(userMapper.selectById(6));

       System.out.print(userMapper.selectById(4092919));

//        userMapper.selectById(1);

   }

查询到了数据


松了一口气。

虽然只是一个小问题,但给我的感触还是蛮大的,任何一个问题,哪怕是常识性的问题都不容忽视。

希望明天早上不会再来一次“Can't connect”和“Access denied


明天计划的事情:


又是配置一天

梳理之前的知识,今天没写代码

重新写项目,打包上传服务器


遇到的问题:

1.mysql.sock缺失的问题:无法重启mysql服务。mysqld --user=root 自动生成.sock。

2.远程连接IP地址的问题:修改mysql库下user表,然后使用127.0.0.1登录。添加端口,并不是All就真的代表所有了。

3.配置的时候linux软链接:后面带/是删除文件夹,不带是删除文件软链接

4.在服务器操作的时候,使用了 rm -rf ./bin

赶紧把日志down下来看(但是太大了,down了几个小时最后没反应还是把进程杀掉了)

还以为把系统所有bin文件夹全删了,还好有个. 而且当前不是根目录,后面不是/


收获:


服务器数据库的配置,maven和jdk配置。一些相关的问题能准确的找到原因并解决了

服务器的控制台和远程连接,连带着防火墙和SSH隧道和本地/远程连接问题的相关知识

慎用rm

如果是在一个访问量过百万的系统下不小心rm了系统文件,真是可怕。

之前的时候什么都不懂,删除过公司的用户表,做设计的时候也有过没保存程序崩溃的经历,还有写日志电脑蓝屏的经历。所以深有体会。

有时候,“虚惊一场”这四个字是人世间最美好的成语。


还有,有时候的错误原因排除了所有能排除的,剩下的就算是再不可能,也是唯一的可能。


这几天都是服务器的配置,没有实质性的进展。感觉不好。

但是学习时候很开心






返回列表 返回列表
评论

    分享到