发表于: 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>
<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。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了系统文件,真是可怕。
之前的时候什么都不懂,删除过公司的用户表,做设计的时候也有过没保存程序崩溃的经历,还有写日志电脑蓝屏的经历。所以深有体会。
有时候,“虚惊一场”这四个字是人世间最美好的成语。
还有,有时候的错误原因排除了所有能排除的,剩下的就算是再不可能,也是唯一的可能。
这几天都是服务器的配置,没有实质性的进展。感觉不好。
但是学习时候很开心。
评论