zkl2333 发布的文章

最近重新安装了MySQL,遇到一些问题,发现几篇文章,觉得有用就转过来了。

MySQL5.7开启远程访问及Ubuntu18.04防火墙3306端口

在虚拟机中安装了Ubuntu18.04,MySQL5.7。系统默认的root等只能在本地访问,host被限制为localhost,为了进行Java程序测试,本地eclipse访问虚拟机的数据库,避免用户管理混乱,特意新建一数据库和用户。

新建数据库ttmsg,用户ub64,开启ub64用户远程访问的过程。

--新建数据库ttmsg
 
mysql> CREATE DATABASE ttmsg;
Query OK, 1 row affected (0.00 sec)
 
--新建用户ub64,和登陆密码,设置访问限制为%,允许远程访问。
mysql> CREATE USER 'ub64'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)
 
--给新建的用户ub64访问数据库ttmsg的所有权限
mysql> grant all privileges on ttmsg.* to 'ub64'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
--刷新权限列表,这样就可以用ub64用户登陆了
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
--新建数据表,开始测试。
mysql> CREATE TABLE Student(
    ->    ID   INT NOT NULL AUTO_INCREMENT,
    ->    NAME VARCHAR(20) NOT NULL,
    ->    AGE  INT NOT NULL,
    ->    PRIMARY KEY (ID)
    -> );
Query OK, 0 rows affected (0.01 sec)
 
mysql> show tables;
+-----------------+
| Tables_in_ttmsg |
+-----------------+
| Student         |
+-----------------+
1 row in set (0.00 sec)

在eclipse中调试java程序,尝试往Student表中插入数据,报错了。

------Records Creation--------
Exception in thread "main" org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
 
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:612)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:862)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:917)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:927)
    at com.tutorialspoint.StudentJDBCTemplate.create(StudentJDBCTemplate.java:14)
    at com.tutorialspoint.MainApp.main(MainApp.java:13)
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

好吧,检查报错说远程JDBC创建失败,没连上。检查一下MySQL是不是没有开通对外的3306端口过滤,导致外部地址无法访问呢,通过netstat命令,检查3306端口,果然只有一个127.0.0.1:3306的监听端口。

ub64@ub64-1804-1:~$ netstat -ntpl
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:6010                :::*                    LISTEN      -

怀疑是否配置mysqld.cnf文件,检查bind-address的设置值问题。

vim /etc/mysql/mysql.conf.d/mysqld.cnf

#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1

好吧,把bind-address修改成0.0.0.0,无限制,重启mysql服务。重新检查netstat,3306端口的访问已经有所有来源地址的监听了。

bind-address            = 0.0.0.0
 
ub64@ub64-1804-1:~$ service mysql restart
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'mysql.service'.
Authenticating as: ub64-1804-1 (ub64)
Password:
==== AUTHENTICATION COMPLETE ===
ub64@ub64-1804-1:~$ netstat -ntpl
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:6010                :::*                    LISTEN      -

继续程序代码测试,重新跑数据库访问程序。额(⊙﹏⊙),又出错了,还是一样的报错信息,还是没有建立连接。

------Records Creation--------
Exception in thread "main" org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
 
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:612)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:862)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:917)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:927)
    at com.tutorialspoint.StudentJDBCTemplate.create(StudentJDBCTemplate.java:14)
    at com.tutorialspoint.MainApp.main(MainApp.java:13)
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

好吧,那应该就是系统防火墙没有开了,我也没有设置过。检查防火墙通过规则,果然grep一下没有见到3306的端口记录。

ub64@ub64-1804-1:~$ sudo iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ufw-before-logging-input  all  --  0.0.0.0/0            0.0.0.0/0
ufw-before-input  all  --  0.0.0.0/0            0.0.0.0/0
ufw-after-input  all  --  0.0.0.0/0            0.0.0.0/0
ufw-after-logging-input  all  --  0.0.0.0/0            0.0.0.0/0
......
 
ub64@ub64-1804-1:~$ sudo iptables -L -n | grep 3306
ub64@ub64-1804-1:~$ 

那就好办了,iptables新增一条3306的端口允许通过规则,在重新检查一下iptables,这下有了。

ub64@ub64-1804-1:~$ sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
 
ub64@ub64-1804-1:~$ sudo iptables -L -n | grep 3306
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:3306
ub64@ub64-1804-1:~$ 

重新测试程序,程序访问成功。果然,开启mysql的访问,不仅要设置user表用户的访问控制权限,还要设置mysqld.cnf的bind-address,同时系统防火墙规则也要配置好3306的端口通过权限。这3个地方的控制缺一不可。

//程序日志
------Records Creation--------
Created Record Name = Zara Age = 11
Created Record Name = Nuha Age = 2
Created Record Name = Ayan Age = 15
 
mysql> select * from Student ;
+----+------+-----+
| ID | NAME | AGE |
+----+------+-----+
|  1 | Zara |  11 |
|  2 | Nuha |   2 |
|  3 | Ayan |  15 |
+----+------+-----+
3 rows in set (0.00 sec)

另外,在程序访问数据库进行操作的日志中出现了WARN告警如下:

Sun Oct 07 21:21:50 GMT+08:00 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

上网搜了一下,以下参考来自我是康小小的CSDN博客


原来是Mysql数据库的SSL连接问题,提示警告不建议使用没有带服务器身份验证的SSL连接,是在MYSQL5.5.45+, 5.6.26+
and 5.7.6+版本中才有的这个问题。解决办法在警告中已经说明了:

1.在数据库连接的url中添加useSSL=false;

jdbc:mysql://localhost:3306/test?useSSL=false
或者在使用Java进行JDBC连接的时候,可以在Properties对象中设置useSSL的值为false。 

2.url中添加useSSL=true,并且提供服务器的验证证书。

参考来源地址:https://blog.csdn.net/u010429286/article/details/77750177


作者:秋野001
来源:CSDN
原文:https://blog.csdn.net/ZENMELAOSHIYOUREN/article/details/82961610

最近有点浮躁,天天很忙又不知道忙些什么。有些事情想找人说,又找谁说都不合适。发过几篇关于生活的博文,又默默隐藏了。

学校有个老师找我参加一个不知道干啥的比赛,三五天粗制滥造了一个微信小程序。两个学生和一个从没见过的指导老师。我感觉受不了另一个同学的“伟大理想”和他“渣的一批”的沟通能力。受不了因为一个元素居中还是左对齐的频繁调整。受不了“临危受命”开发项目居然只给那么点时间。大概就是传说中甲方的“五彩斑斓黑”和改了十几稿然后用原稿。说实话一点也不喜欢团队合作,自己又很清高的总是说什么“这是设计师干的”、“这种问题别找前端”什么的。有点怀疑自己是不是不适合当前端了。

生活方面麻,不想写,写了这篇文章大概又会被我隐藏了。嘻嘻。

作者:梁晓声

都认为,寂寞是由于想做事而无事可做,想说话而无人与说,想改变自身所处的这一种境况而又改变不了。

是的,以上基本就是寂寞的定义了。

寂寞是对人性的缓慢的破坏。寂寞相对于人的心灵,好比锈相对于某些容易生锈的金属。

但不是所有的金属都那么容易生锈。金子就根本不生锈。不锈钢的拒腐蚀性也很强。而铁和铜,我们都知道,它们极容易生锈,像体质弱的人极容易伤风感冒。

某次和大学生们对话时,被问:“阅读的习惯对人究竟有什么好处?”

我回答了几条,最后一条是——可以使人具有特别长期地抵抗寂寞的能力。

他们笑。我看出他们皆不以为然。他们的表情告诉了我他们的想法——我们需要具备这一种能力干什么呢?

是啊,他们都那么年轻,大学又是成千上万的青年学子云集的地方,一间寝室住六名同学,寂寞沾不上他们的边啊!

但我同时看出,其实他们中某些人内心深处别提有多寂寞。

而大学给我的印象正是一个寂寞的地方。大学的寂寞包藏在许多学子追逐时尚和娱乐的现象之下。所以他们渴望听老师以外的人和他们说话,不管那样的一个人是干什么的,哪怕是一名犯人在当众忏悔。似乎,越是和他们的专业无关的话题,他们参与的热忱越活跃。因为正是在那样的时候,他们内心深处的寂寞获得了适量地释放一下的机会。

故我以为,寂寞还有更深层的定义,那就是——从早到晚所做之事,并非自己最有兴趣的事;从早到晚总在说些什么,但没几句是自己最想说的话;即使改变了这一种境况,另一种新的境况也还是如此,自己又比任何别人更清楚这一点。

这是人在人群中的一种寂寞。

这是人置身于种种热闹中的一种寂寞。

这是另类的寂寞,现代的寂寞。

如果这样的一个人,心灵中再连值得回忆一下的往事都没有,头脑中再连值得梳理一下的思想都没有,那么他或她的人性,很快就会从外表锈到中间。

无论是表层的寂寞,还是深层的寂寞,要抵抗住它对人心的伤害,那都是需要一种人性的大能力的。

我的父亲虽然只不过是一名普通的建筑工人,但在“文革”中,也遭到了流放式的对待。仅仅因为他这个十四岁闯关东的人,在哈尔滨学会了几句日语和俄语,便被怀疑是日俄双料潜伏特务。差不多有七八年的时间,他独自一人被发配到四川的深山里为工人食堂种菜。他一人开了一大片荒地,一年到头不停地种,不停地收。隔两三个月有车进入深山给他送一次粮食和盐,并拉走菜。

他靠什么排遣寂寞呢?

近五十岁的男人了,我的父亲,他学起了织毛衣。没有第二个人,没有电,连猫狗也没有,更没有任何可读物。有,对于他也是白有,因为他几乎是文盲。他劈竹子自己磨制了几根织针。七八年里,将他带上山的新的旧的劳保手套一双双拆绕成线团,为我们几个他的儿女织袜子,织线背心。

这一种从前的女人才有的技能,他一直保持到逝世那一年。织,成了他的习惯。那一年,他七十七岁。

劳动者为了不使自己的心灵变成容易生锈的铁或铜,也只有被逼出了那么一种能力。

而知识者,我以为,正因为所感受到的寂寞往往是更深层的,所以需要有更强的抵抗寂寞的能力。

这一种能力,除了靠阅读来培养,目前我还贡献不出别种办法。

胡风先生在所有当年的“右派”中被囚禁的时间最长——三十佘年。他的心经受过双重的寂寞的伤害。胡风先生逝世后,我曾见过他的夫人一面,惴惴地问:先生靠什么抵抗住了那么漫长的与世隔绝的寂寞?

她说:“还能靠什么呢?靠回忆,靠思想。否则他的精神早崩溃了,他毕竟不是什么特殊材料的人啊!”

但我心中暗想,胡风先生其实太够得上是特殊材料的人了啊!

幸亏他是大知识分子,故有值得一再回忆之事,故有值得一再梳理之思想。若换了我的父亲,仅仅靠拆了劳保手套织东西,肯定是要在漫长的寂寞伤害之下疯了的吧?

知识给予知识分子之最宝贵的能力是思想的能力。因为靠了思想的能力,无论被置于何种孤单的境地,人都不会丧失最后一个交谈伙伴,而那正是他自己。自己与自己交谈,哪怕仅仅做这一件在别人看来什么也没做的事,他足以抵抗很漫长很漫长的寂寞。如果居然还侥幸有笔有足够的纸,孤独和可怕的寂寞也许还会开出意外的花朵。《绞刑架下的报告》、《可爱的中国》、《堂·吉诃德》的某些章节、欧·亨利的某些经典短篇,便是在牢房里开出的思想的或文学的花朵。

思想使回忆成为知识分子的驼峰。

而最强大的寂寞,还不是想做什么事而无事可做,想说话而无人与说;而是想回忆而没有什么值得回忆的,是想思想而早已丧失了思想的习惯。这时人就自己赶走了最后一个陪伴他的人,他一生最忠诚的朋友——他自己。

谁都不要错误地认为孤独和寂寞这两件事永远不会找到自己头上。现代社会的真相告诫我们,那两件事迟早会袭击我们。

人啊,为了使自己具有抵抗寂寞的能力,读书吧!人啊,一旦具备了这一种能力,某些正常情况下,孤独和寂寞还会由自己调节为享受着的时光呢!

信不信,随你……

晚上看了个电影《后来的我们》,前半段还是笑嘻嘻,笑着说着渣男渣女。

看到了后半段,却笑不出来了。男主至少还有个奋斗的目标。他从小想做游戏,一开始是爱好,到后来为了家庭。而我该做些什么呢?我毕业之后面对的也是这样残酷的生活吗?

越看越压抑,室友都在打游戏,边打边疯狂咆哮着。很烦躁啊。和对象聊过以后,我说我创业,你来给我当秘书,我当大老板。哈哈哈说得真简单。暑假出去在一家科技公司搬砖,才深刻的体会到了生活的压力。这一行工资真的只是看起来高而已,竞争压力太大了吧。要过那种小晓口中“一眼看穿以后十年”的日子吗?

靠拿工资真的活得下去吗,刨掉衣食住行还有几个钱?了解过学长学姐毕业之后的工资。刚开始几年能不靠家里活下去已经算混的好了啊。和对象聊天,嘴上说着以后我养你,真的养得起吗?电影里天天粗茶淡饭的日子可不是我想给她的。

好在我比对象大几年,得好好想办法在她毕业之前混得体面了。

说实话这部电影后半段,我有点看不懂。我也只是个孩子啊,忽然就把生活的残酷摔在了我的脸上。我有点懵。

在最近的项目中用到了websocket,遇到了一些问题,记下来。

案情重现

首先实例化一个连接(随便找的回声测试)

var ws = new WebSocket('ws://121.40.165.18:8800')

然后想当然的加上事件监听↓

ws.addEventListener('message', fun(event))

function fun(e) {
    console.log(e.data)
}

然后发现不起作用,而改用匿名函数就没啥问题。

ws.addEventListener('message', function (event) {
    console.log(event.data)
})

笔记

其实仔细想想就没发现了,第一次ws.addEventListener('message', fun(event))中传入的fun(event)不是一个函数,而是fun(event)的返回值undefind
正确的方法是

ws.addEventListener('message', fun)

举个例子

function main(f) {
    f('123')
}
function fun(str) {
    console.log(str)
    return 'qwe'
}
main(fun)//'123'
main(fun())// Uncaught TypeError: f is not a function

其中fun是作为一个变量传入的main函数,而如果传入fun(),则传入的实际是fun()的返回值'qwe'

正确的操作如下

var ws = new WebSocket('ws://121.40.165.18:8800')

ws.addEventListener('message', fun)

function fun(e) {
    console.log(e.data)
}

我可真是个小机灵鬼呢~