Loading

记一下部署后端和数据库到腾讯云过程遇到的坑(SpringBoot、Mysql、腾讯云)

一、打包项目

双击这里就行,打包生成的jar在target目录下


二、部署后端到服务器

1、将jar包移到服务器上

直接用xftp拖进去就行

2、运行该jar包

java -jar xxx.jar

如果报错 -bash: java: command not found,原因在于没装JDK

3、安装JDK

使用yum安装JDK

yum -y  install java-1.8.0-openjdk*

完成后输入以下指令查看是否安装成功

java -version

4、查询运行该jar包

java -jar xxx.jar

项目启动成功

5、设置后台运行

通过命令java -jar xxx.jar虽然可以启动并运行项目,但是一旦关闭可控制台,项目也随之关闭了,没法实时访问该项目。所以接下来还需要解决jar包后台运行的问题。

这里 命令后面加的空格和'&'是让程序在后台运行,2>&1是指将标准错误重定向到标准输出,于是标准错误和标准输出都重定向到指定的log文件中,从此终端彻底清静了。

nohup java -jar xxx.jar > log.file 2>&1 &

用这句命令运行jar包即可,运行结果:

之后用

tail -f log.file

命令查看控制台输出,若要停止项目

pkill -f xxx.jar

三、部署数据库到服务器

在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。

1、下载并安装MySQL官方的 Yum Repository

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpm

执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo

我是直接去官网下的tar,解压出来的rpm安装的,用这个命令安装应该会更简便一些

2、完成安装

使用yum命令即可完成安装

yum install mysql-server

如果是去官网下的rpm包,需按照依赖关系依次安装common→libs→client→server

rpm -ivh {rpm文件名}

若报错

[root@nfs_client tools]# rpm -ivh mysql-community-libs-5.7.22-1.el7.x86_64.rpm
warning: mysql-community-libs-5.7.22-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
        mysql-community-common(x86-64) >= 5.7.9 is needed by mysql-community-libs-5.7.22-1.el7.x86_64
        mariadb-libs is obsoleted by mysql-community-libs-5.7.22-1.el7.x86_64

在命令后面加上--nodeps --force即可

3、开启MySql

开启mysql服务

systemctl start  mysqld.service 启动mysql
systemctl status mysqld.service 查看mysql状态
systemctl stop mysqld.service   关闭mysql

ps -ef|grep mysql 查看mysql进程 
netstat -anop|grep 3306 查看3306端口 

4、登陆mysql修改root密码

查找临时密码

grep 'temporary password' /var/log/mysqld.log

使用临时密码登陆

mysql -uroot -p

然后输入临时密码

执行下面的命令修改MySql root密码

set password for root@localhost=password('你的密码');

在5.6后,mysql内置密码增强机制,低强度密码会报错:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

查看安全策略

SHOW VARIABLES LIKE 'validate_password%';

修改有效密码验证要求

set global validate_password.policy=0;
set global validate_password.length=1;

设置所有的ip可以访问该sql;

use mysql;
update mysql.user set host = '%' where user = 'root';

刷新权限,使设置生效

flush privileges;

5、服务器配置防火墙

做完上述步骤后尝试用navicat远程连接数据库,结果报了10038错误,查了一下是远程3306端口未对外开放的原因。

# 检查状态 
systemctl stauts firewalld.service 
# 其余还有 开始,重启等
systemctl start firewalld.service
systemctl restart firewalld.service

# 开机自启动
systemctl enable firewalld.service

#配置防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent
systemctl restart firewalld.service
firewall-cmd --query-port=3306/tcp # 检查是否ok

我是用iptables的,不过应该一样

6、配置安全组

设置安全组 (进入方法:进入控制台后,搜索私有网络,点击进入,点击安全与诊断->安全组)

配置安全组、设置规则

选自己云服务器所在的地区

点击新建然后弹出的对话框,其他的比较简单,就以自定义为例,点击确定后的对话框中选设置规则

添加入站和出站规则即可, 示例如下,配置所有ip可访问3306端口。

(这一步不知道是不是必须的,好像不配置安全组也能连上)

7、腾讯云配置防火墙

在进入到腾讯云控制台之后(在首页点击右上角的控制台->点击左上角的云产品->点击自己的服务器类型->点击服务器右上角的更多->管理->防火墙->添加规则)

8、安装Mysql数据库并连接成功!

其实我做完这些还是连不上,后来又执行

SHOW VARIABLES LIKE 'validate_password%';

发现,有效密码长度居然还是8没改过来,改正之后终于成功用navicat连上了


四、前端尝试向后台发送请求

在前端尝试向后台发送请求,发现后台根本没接到,原因是没有配置防火墙,为8080端口配置好防火墙即可

后台成功接到请求并报错,

解决方法:在连接参数里加上useSSL=false即可

部署完成!


五、后记

部署成功后正常连接了一段时间,某天下午突然使用navicat突然无法连接数据库并报错

见到这个错误我是完全懵逼的,因为前一秒还可以正常使用。上网查了很多解决办法:

1、修改mysql配置文件 my.cnf [mysqld]段加skip-name-resolve

2、修改hosts.allow 加mysqld : ALL : ALLOW

3、重启数据库

4、注释bind-address

等等都没有用,

之后我还尝试了重装数据库,重置服务器,使用mariadb等方法,依赖报同样的错误

最后终于发现了解决方案

https://blog.csdn.net/qq_45256805/article/details/107996700

总之原因就是连接腾讯云的MariaDB(mysql)数据库是使用Navicat和平常连接数据库的方式不同。连接腾讯云的MariaDB(mysql)数据库需要使用ssh通道进行连接。

posted @ 2021-03-30 19:51  s1beria  阅读(894)  评论(0编辑  收藏  举报