记一下部署后端和数据库到腾讯云过程遇到的坑(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通道进行连接。