提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
之前完成了node服务器的主体搭建,这一步来进行mySql的安装,安装环境是centOS7
,然后由于忘记了mySql的密码,所以这里选择卸载重新安装;同时配置数据库连接池,避免多次连接的冲突问题
一、mySql相关
卸载
查看当前mySql安装情况
rpm -qa|grep -i mysql
执行
yum remove mysql
执行
rpm -e --nodeps xxx
查找mySql目录
find / -name mysql
删除对应的mySql目录
rm -rf /var/lib/mysql
rm -rf /var/lib/mysql/mysql
rm -rf /usr/lib64/mysql
rm -rf /usr/share/mysql
手动删除my.cnf
rm -rf /etc/my.cnf
查看是否还有mySql文件
rpm -qa|grep -i mysql | xargs rpm -e --nodeps
删除mySql遗留文件
find / -name mysql | xargs rm -rf
find / -name my.cnf | xargs rm -rf
卸载完成!
安装
Tips:centOS默认安装MariaDB
,安装MySQL,覆盖MariaDB
下载Mysql官方yum源
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
wget安装
yum install wget
yum安装
yum -y install mysql57-community-release-el7-10.noarch.rpm
安装MySQL服务器
yum -y install mysql-community-server
安装完成!
设置
启动mySql
systemctl start mysqld.service
查看状态
systemctl status mysqld.service
进入数据库
mysql -uroot -p
//root 123456
Tip:如果修改简单密码, 需要进行设置,否则安全度太低😂
开启mySql远程访问
主要是用pyCharm远程连接数据库进行操作
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
mysql> flush privileges;
mysql> exit
查看mysql端口号
show global variables like 'port';
完成mySql的基础设置了
二、创建数据库
创建数据库
创建数据库命令
create database zyRes;
Tip:我这里使用pyCharm进行数据库连接
建立表handInf
,包括handId
、handTime时间
handData数据
其中不设置handId为主键,否则不能插入多次结果
use zyInf;
create table handInf(
handId int not null,
handTime datetime not null,
handData varchar(2000) not null
)comment = '手诊表';
插入数据操作
insert into handInf (handId, handTime, handData) values(...);
三、连接服务器
配置
npm安装mySql模块
npm i mysql
在app.js
中引入模块
var mysql = require('mysql')
创建数据库连接实例、配置参数
var connection = mysql.createConnection({
host: '39.99.214.230',
port: '3306',
user: 'root',
password: '123456',
database: 'zyRes'
});
建立连接语句
connection.connect()
此时设置后存在重要问题,存在连接冲突问题:
前一次的连接握手还未停止,下一次的连接就过来会引发冲突中断运行,
为解决这个问题,参考了网上的资料如下设置:
每次调用手动关闭连接 connection.end()
Error: Cannot enqueue Handshake after invoking quit.
去掉connection.end()
保证让让数据库自己释放不活跃的连接。
Error: Cannot enqueue Handshake after already enqueuing a Handshake.
数据库连接已经执行了,不能进行多次连接了
为解决该问题,设置数据库连接池。
数据库连接池
新建根目录DB,以及子文件db.js
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit: 10,
host: '数据库的IP',
user: 'root',
password: '123456',
database: 'zyInf'
});
function query(sql, values, callback) {
console.log("数据库连接池");
pool.getConnection(function (err, connection) {
if(err) throw err;
console.log("获取连接 ");
connection.query(sql, values,function (err, results, fields) {
console.log(JSON.stringify(results));
//每次查询都会 回调
callback(err, results);
//只是释放链接,在缓冲池了,没有被销毁
connection.release();
if(err) throw error;
});
});
}
exports.query = query;
新建同级文件handleSql.js
,存储用到的sql语句
var handleSql = {
insert: "insert into handInf(handId, handTime, handData) values(?,?,?)",
getHistoryById: "select * from handInf where handId=?"
};
module.exports = handleSql;
在路由文件handRouter.js
中引入
var db = require('../DB/db');
var handleSql = require('../DB/handleSql')
具体使用例子 查询操作
//数据库操作
const sqlParams = [handId]
db.query(handleSql.getHistoryById, sqlParams, (error, results) =>{
if(error){
console.log(error)
} else {
results = JSON.parse(JSON.stringify(results))
res.send(results)
console.log("这里是results:", results)
}
})
成功!
总结
这篇文章记录的是将数据库连接上建议服务器的流程。包括了centOS环境下的卸载、安装、配置、连接及使用。卸载时需要卸载干净,配置时最好设置数据库连接池来管理连接。