将自己的数据库和后端接口上传到自己的云服务器肯定是最好玩和必须要学会的啦,下面我就带着大家完成接数据库和接口在云服务器上的部署

数据库

导出本地数据库文件

首先先将自己的数据库表导出来,我使用的是Navicat,(有破解版的噢!!)

然后导出的文件,要把他放到你的服务器那里去,可以xhtp,如果你的云服务器是宝塔等方便的话,直接上传哈。我放的路径是root/data/,顺便放,最好文件夹命名啥的有些意义。【要记住文件的绝对路径!!】

安装mysql

然后打开你的Xshell(你的云服务器都有终端的吧,不用Xshell也行的)

进入服务器终端,先下载mysql

这个你可以自行去搜索自己服务器内核版本的方法哈

我的是CentOs

删除旧版 MariaDB(如果有)

yum remove mariadb-libs -y

添加 MySQL 官方 Yum 仓库

wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm # 下载YUM 仓库源配置包
rpm -ivh mysql80-community-release-el7-7.noarch.rpm  # 安装
yum repolist enabled | grep mysql  # 确认仓库是否成功添加

安装 MySQL

yum install mysql-server -y

启动 MySQL

systemctl start mysqld
systemctl enable mysqld

查看初始密码

MySQL 5.7/8.0 安装后,初始 root 密码会在日志文件中,查看方式:

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

复制下来备用。

进入Mysql

然后使用mysql -uroot -p,输入密码进入你的数据库中

然后有小伙伴疑问了,诶账号密码是多少啊??

一般的话是账号root,密码是root

但是有可能错,下面有提供重置密码办法,包见效的

  1. 停止 MySQL 服务

    systemctl stop mysqld
  2. 使用 --skip-grant-tables 启动 MySQL

    启动 MySQL 时,加上 --skip-grant-tables 选项,跳过权限表验证:

    mysqld_safe --skip-grant-tables --skip-networking &

    这样启动 MySQL 后,MySQL 将不验证用户密码,允许你进入数据库。

  3. 保留这个终端哈!!保持住放后台,新开一个终端

  4. 在新的终端:使用以下命令登录 MySQL:(不需要输入密码,直接进入 MySQL)

    mysql -uroot
  5. 修改密码

    一旦进入 MySQL,你可以使用 SQL 命令修改 root 用户的密码(假设是1234)。由于 MySQL 在 --skip-grant-tables 模式下无法使用 ALTER USER,我们需要直接修改用户表:

    USE mysql;
    UPDATE user SET authentication_string=PASSWORD('1819m') WHERE User='root' AND Host='localhost';
    FLUSH PRIVILEGES;
    EXIT;

    请注意,authentication_string 是 MySQL 5.7 及以上版本中的字段。如果你使用的是较早版本的 MySQL,可以用 password 字段。

  6. 重启 MySQL 服务

修改密码后,退出 MySQL 并重启 MySQL 服务

systemctl restart mysqld
  1. 测试新密码

    重启 MySQL 后,使用新密码尝试登录:

    mysql -uroot -p

常见报错:

2025-04-28T13:14:17.674781Z mysqld_safe A mysqld process already exists

意思是:已经有一个 MySQL 进程在运行了,而且是普通模式(没跳过密码)的,所以新的跳过密码模式起不来

所以你需要先彻底停止 MySQL,然后重新以跳过密码模式启动

  1. 尝试优雅停止服务(推荐):

    systemctl stop mysqld
    # 或
    systemctl stop mysql
  2. 强制杀掉进程:

    查一下 MySQL进程:

    ps -ef | grep mysql

    是这样类似的:

    mysql    12345  ...  /usr/sbin/mysqld

    记下 PID(比如上面是 12345),然后执行:

    kill -9 12345

    (如果多个 mysqld 进程,把所有有关的都 kill -9 掉)

输入命令show databases;可以看到已经存在的数据库

再输入命令create database blog_db default character set utf8 COLLATE utf8_general_ci;

通过命令show databases;可以看到新的数据库已经创建成功了

use blog_db;
show tables;

可以看到此时数据库中没有任何的表

接下来就是将.sql文件放入该数据库中了:

使用命令source root/data/blog_db.sql即可在该数据库中创建表了

再次使用命令show tables;就可以看到啦!!!

远程访问

编辑 MySQL 配置文件:

  1. 编辑 MySQL 配置文件:

    vim /etc/my.cnf     # CentOS 系统
  2. 找到 bind-address 配置,改成:

    bind-address = 0.0.0.0

    (0.0.0.0 表示允许接收所有 IP 地址的连接请求)
    如果找不到 bind-address,可以手动加在 [mysqld] 小节下。

  3. 保存并退出,然后重启 MySQL:

    systemctl restart mysqld   # CentOS

给 MySQL 用户授权远程访问

默认 root 账号只允许本地访问,要授权可以远程连接。

  1. 登录 MySQL:

    mysql -uroot -p

    输入你的密码登录。

  2. 授权 root 用户可以远程访问(或者单独新建一个专门的远程用户也行)

    执行:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

    解释一下:

    • 'root'@'%' —— 表示允许任意 IP 地址以 root 身份连接
    • '你的密码' —— 填你想用的密码,Navicat登录时要用

    如果你想安全一些,可以指定具体 IP,比如:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'你的本地IP' IDENTIFIED BY '你的密码' WITH GRANT OPTION;

    (比如你的电脑 IP 是 123.123.123.123,就写 'root'@'123.123.123.123'

  3. 记得执行:让权限变更生效。

    FLUSH PRIVILEGES;

开放端口

确保防火墙和云服务器安全组放通了 3306 端口

  • Linux 本机防火墙(CentOS 用的是 firewalld)
  • 云服务器控制台里的安全组

都要放行 3306 端口!

CentOS 放行 3306

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

然后可以检查:

firewall-cmd --list-ports

确认 3306 已经在开放的端口列表里。

云服务器安全组设置

去你的云服务器后台(比如腾讯云、阿里云、华为云等)找到对应实例的安全组设置,把入方向TCP 3306端口开放给自己的 IP 或全部 IP(0.0.0.0/0)。

如果不设置,哪怕本机放开了也连接不上。

打开 Navicat:

  • 连接类型:MySQL
  • 主机名/IP地址:云服务器的公网 IP(比如 82.156.xxx.xxx)
  • 端口:3306
  • 用户名:root
  • 密码:你授权时设置的密码

测试连接,如果设置正确,就能连接成功了

常见问题排查

问题 原因 解决方法
Can't connect to MySQL server on 'IP' 防火墙或安全组没有开放 3306 检查服务器防火墙 + 安全组设置
Access denied for user 'root'@'xxx' 用户没有远程权限或密码错误 重新授权 root 用户,确保密码正确
连接超时 MySQL没有监听外网IP 确认 bind-address=0.0.0.0 并重启 MySQL

部署后端nodejs项目

准备工作

在服务器上

第一步:安装 Node.js(含 npm)

yum install -y nodejs

验证安装成功

node -v
npm -v

第二步:全局安装 PM2

npm install -g pm2

设置 PM2 开机自启动(针对常见 Linux)

pm2 startup

部署 Node.js 应用

第三步:配置防火墙

确保云服务器的防火墙允许相关端口(如 4000 和 3306)开放

云服务器的就要配置安全组和上文的3306配置一样

1) 上传项目代码

将你的 Node.js 项目上传到服务器上

将自己的node项目打包,就直接压缩包就可以了,上传到服务器(用宝塔、xthp、git克隆都可以)

2) 安装依赖

进入项目目录并安装项目的依赖:

npm install

3)配置 .env 文件

编辑 .env 文件,确保数据库连接信息指向正确的 IP 地址,特别是 DB_HOST 应设置为云服务器的公网 IP:

DB_HOST=82.156.103.216
DB_PORT=3306
DB_USER=root
DB_PASSWORD=1234
DB_NAME=blog_db
JWT_SECRET=1234
NODE_ENV=production

4) 启动应用

使用 PM2 启动 Node.js 应用:

pm2 start src/server.js --name mmx-blog-api

pm2 save

注意src/server.js要看你的项目的,可能是index.js根据实际情况

配置 PM2 自动启动

确保服务器重启后 PM2 会自动启动应用:

pm2 startup
pm2 save

5) 检查应用是否运行

  • 确保应用正在运行并监听正确的端口:

    netstat -tuln | grep 4000
  • 检查 PM2 状态:

    pm2 list

6) 测试应用访问

  • 在浏览器中访问 http://82.156.103.216:4000 进行测试。