macbook下,浏览器缓存文件的大致路径
/private/var/folders/dc/62rbq7yj5qxfhckt65xszl3r0000gn/T/33.jpg
默认情况下,新安装的 mariadb 的密码为空,在shell终端直接输入 mysql 就能登陆数据库。这时使用的是匿名身份。
第一次登录可以使用mysql_secure_installation 命令初始化。
修改数据库用户的密码的推荐方式,
# mysql -uroot -p
2.1 更新 mysql 库中 user 表的字段:
MariaDB [(none)]> use mysql;
MariaDB [mysql]> UPDATE user SET password=password('newpassword') WHERE user='root';
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> exit;
2.2 或者,使用 set 指令设置root密码:
MariaDB [(none)]> SET password for 'root'@'localhost'=password('newpassword');
MariaDB [(none)]> exit;
MariaDB [(none)]> show databases;
MariaDB [(none)]> show columns from users;
MariaDB [mysql]> UPDATE users SET pass=md5('A1234567') WHERE email='xxx';
如果是忘记了 root 密码,则需要以跳过授权的方式启动 mariadb 来修改密码。
mysql的启动 关闭 命令
mysql.server start / stop
mysql 的 show命令
show columns from test_table;
show create table test_table;
新增一个mysql用户
mysql -u root -p
>输入root数据库用户密码
2.新增用户
insert into mysql.user(Host,User,Password) values("localhost","xxx",password("***"));
注释:xxx为新建用户名,***为用户密码
3.执行该句后,还需要刷新权限表
flush privileges;
4.赋予用户权限
grant all on ttt.* to xxx@localhost identified by "***";
注释:ttt为数据的库名 database name,当然你也可以填* 为所有库, ***为用户密码
5.赋予权限,还需要再刷新权限表
MacBook 命令行工具brew不能更新
这次在MacBook上brew安装 mariaDB, 提示brew版本太老,需要更新,但是直接用命令 brew update,报错,提示没有/usr/local 目录的写入权限,不是这个目录的owner,
用sudo brew update, 还是不行,使用命令行的root用户去更改/usr/local的权限,和所有者, 用chown, chmod 命令,仍然不行,无法更改,root用户居然都改不了权限,怪了,问下google.
需要用重启mac, 然后按住Command + r 进入恢复模式,在恢复模式下打开终端,执行命令
csrutil disable
然后在正常重启mac, 使用sudo chmod, sudo chown,就可以更改/usr/local
的所有者与权限了。
为了mac系统的安全,推荐更改成功后,重新进入恢复模式,执行命令
csrutil enable
限制root用户的特权
node模块的全局安装及引用
全局安装mysql模块,
npm install -g mysql
然后修改环境变量
对于linux
vim /etc/bashrc
加入一行代码
export NODE_PATH="/usr/local/lib/node_modules:$NODE_PATH"
接着 :wq 保存
然后 source /etc/bashrc
对于Mac os
vim ~/.bash_profile
加入一行代码
export NODE_PATH="/usr/local/lib/node_modules:$NODE_PATH"
接着 :x 保存
source ~/.bash_profile
现在再reuqire全局模块就不会报错了。
let mysql = require('mysql');
这行代码不会报错了,如果不想改全局变量,就要require mysql模块的绝对路径mac下的node模块全局路径,
/usr/local/lib/node_modules
参考:
https://www.runoob.com/nodejs/nodejs-mysql.html
https://www.cnblogs.com/keithtt/p/6922378.html
https://luojia.me/2015/08/18/解决node无法调用全局模块的问题/
在浏览器端用JS创建和下载文件
https://www.cnblogs.com/xieshuxin/p/6731608.html
什么是data URI scheme及如何使用data URI scheme
https://sjolzy.cn/What-is-the-data-URI-scheme-and-how-to-use-the-data-URI-scheme.html
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'huangcongjie',
password : 'hcj9jjkl',
database : 'test'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
// var sql = 'SELECT * FROM websites';
// //查
// connection.query(sql,function (err, result) {
// if(err){
// console.log('[SELECT ERROR] - ',err.message);
// return;
// }
// console.log('--------------------------SELECT----------------------------');
// console.log(result);
// console.log('------------------------------------------------------------\n\n');
// });
// var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';
// var addSqlParams = ['菜鸟工具', 'https://c.runoob.com','23453', 'CN'];
// //增
// connection.query(addSql,addSqlParams,function (err, result) {
// if(err){
// console.log('[INSERT ERROR] - ',err.message);
// return;
// }
// console.log('--------------------------INSERT----------------------------');
// //console.log('INSERT ID:',result.insertId);
// console.log('INSERT ID:',result);
// console.log('-----------------------------------------------------------------\n\n');
// });
// var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?';
// var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com',6];
// //改
// connection.query(modSql,modSqlParams,function (err, result) {
// if(err){
// console.log('[UPDATE ERROR] - ',err.message);
// return;
// }
// console.log('--------------------------UPDATE----------------------------');
// console.log('UPDATE affectedRows',result.affectedRows);
// console.log('-----------------------------------------------------------------\n\n');
// });
// var delSql = 'DELETE FROM websites where id=6';
// //删
// connection.query(delSql,function (err, result) {
// if(err){
// console.log('[DELETE ERROR] - ',err.message);
// return;
// }
// console.log('--------------------------DELETE----------------------------');
// console.log('DELETE affectedRows',result.affectedRows);
// console.log('-----------------------------------------------------------------\n\n');
// });
connection.end();
html img 使用data格式加载图片
https://www.cnblogs.com/kaixiangbb/p/3302677.html
MariaDB插入中文出现???情况
https://www.cnblogs.com/charles1ee/p/7210092.html
mariadb数据库的相关命令是:
systemctl start mariadb #启动MariaDB
systemctl stop mariadb #停止MariaDB
systemctl restart mariadb #重启MariaDB
systemctl enable mariadb #设置开机启动
mysql的导入导出,
https://www.cnblogs.com/yuwensong/p/3955834.html
导出
mysqldump -u huangcongjie -p nodesql > nodesql.sql
只导出表结构
mysqldump -u huangcongjie -p -d nodesql > nodesql.sql
导入
mysql -u huangcongjie -p nodesql < nodesql.sql
导入数据库是发生的错误:
Specified key was too long; max key length is 767 bytes
解决办法:
https://blog.csdn.net/bigdataf/article/details/78921409
我遇到的错误就是由字符集引起的,把导出的文件nodesql.sql, 中所有的字符串“utf8mb4” 替换为 “utf8" 解决了问题。
utf8mb4与utf8的区别
https://blog.csdn.net/yan791124465/article/details/70738939
彻底解决mysql中文乱码
https://blog.csdn.net/u012410733/article/details/61619656
查看数据库的字符编码
show variables like "character_set_%";
查看数据库连接编码
show variables like "collation_%";
macbook 里mariadb数据库配置文件的地址:
/usr/local/etc/my.cnf
没有就创建一个my.cnf
修改my.cnf时, 应该先关闭数据库服务,改好后,在重新启动数据库服务。
debian软件包 最新版本查询
https://packages.debian.org/stretch/mariadb-server
let word =
`create table if not exists word(
id INT NOT NULL AUTO_INCREMENT,
spell VARCHAR(50) NOT NULL COMMENT '字母拼写',
trans VARCHAR(500) COMMENT '释义',
phonetic VARCHAR(100) COMMENT '音标(英音或者美音)',
phonetic_uk VARCHAR(100) COMMENT '英音音标',
phonetic_us VARCHAR(100) COMMENT '美音音标',
audio_path VARCHAR(100) COMMENT '音频资源路径',
img_path VARCHAR(200) COMMENT '图片资源路径',
misc VARCHAR(300) COMMENT '杂项',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
let lj =
`create table if not exists lj(
id INT NOT NULL AUTO_INCREMENT,
lj VARCHAR(500) NOT NULL COMMENT '例句',
trans VARCHAR(500) COMMENT '释义',
comefrom VARCHAR(100) COMMENT '出处',
articleId INT COMMENT '出自那篇文章,指向article表id列的外键',
seq INT COMMENT '例句在文章中的编号,从1开始计数',
misc VARCHAR(300) COMMENT '杂项',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
let article =
`create table if not exists article(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
author VARCHAR(100),
tag VARCHAR(300) COMMENT '备注',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
let event_user_action =
`create table if not exists event_user_action(
id INT NOT NULL AUTO_INCREMENT,
userId INT NOT NULL COMMENT '哪个用户的学习记录',
title VARCHAR(100) COMMENT '标题',
words VARCHAR(1000) COMMENT '单词列表',
acticleIds VARCHAR(300) COMMENT '文章ID列表',
ljIdsMy VARCHAR(1000) COMMENT 'user_lj表的id列表',
moment VARCHAR(100) COMMENT '写入时间',
anymodified VARCHAR(100) COMMENT '最近修改时间',
tag VARCHAR(300) COMMENT '备注',
PRIMARY KEY ( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
let event_lj =
`create table if not exists event_lj(
id INT NOT NULL AUTO_INCREMENT,
eventId INT COMMENT '指向event_user_action表id列的外键, 可为空',
ljId INT NOT NULL COMMENT '指向lj表id列的外键',
keywords VARCHAR(400) COMMENT '关键单词列表',
tag VARCHAR(300) COMMENT '备注',
PRIMARY KEY ( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
//存储用户创建的单词链接
let user_wlist =
`create table if not exists user_wlist(
id INT NOT NULL AUTO_INCREMENT,
userId INT,
moment VARCHAR(100) COMMENT '写入时间',
anymodified VARCHAR(100) COMMENT '最近修改时间',
words VARCHAR(500) COMMENT '单词列表',
tag VARCHAR(300) COMMENT '备注',
PRIMARY KEY ( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
let user_lj =
`create table if not exists user_lj(
id INT NOT NULL AUTO_INCREMENT,
userId INT NOT NULL,
wId INT COMMENT '指向user_word表的外键',
articleId INT COMMENT '指向user_article表的外键',
keywords VARCHAR(400) COMMENT '关键单词列表',
lj VARCHAR(300) NOT NULL COMMENT '用户造的句子',
trans VARCHAR(300) NOT NULL COMMENT '释义',
moment VARCHAR(100) NOT NULL COMMENT '写入时间',
anymodified VARCHAR(100) NOT NULL COMMENT '最近修改时间',
tag VARCHAR(300) COMMENT '备注',
PRIMARY KEY ( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
let user_word =
`create table if not exists user_word(
id INT NOT NULL AUTO_INCREMENT,
userId INT NOT NULL,
spell VARCHAR(50) NOT NULL COMMENT '用户的单词',
trans VARCHAR(300) NOT NULL COMMENT '释义',
moment VARCHAR(100) NOT NULL COMMENT '写入时间',
anymodified VARCHAR(100) NOT NULL COMMENT '最近修改时间',
tag VARCHAR(300) COMMENT '备注',
PRIMARY KEY ( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
let user_article =
`create table if not exists user_article(
id INT NOT NULL AUTO_INCREMENT,
userId INT NOT NULL,
title VARCHAR(100) NOT NULL COMMENT '标题',
moment VARCHAR(100) NOT NULL COMMENT '写入时间',
anymodified VARCHAR(100) NOT NULL COMMENT '最近修改时间',
tag VARCHAR(300) COMMENT '备注',
PRIMARY KEY ( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
let insertArticle = (value) => {
let _sql = "insert into article set title=?,author=?,tag=?;";
return query( _sql, value );
};
let insertLj = (value) => {
let _sql = "insert into lj set lj=?,trans=?,comefrom=?,seq=?,articleId=?,misc=?;";
return query( _sql, value );
};
let initArticleLj = async (filePath, num) => {
let objs = JSON.parse(fs.readFileSync(filePath));
let obj = objs[9];
objs.forEach(obj => {
insertArticle([obj.title, "", "Q:" + obj.question])
.then(res => {
// console.log(res.insertId);
for (let i = 0; i < obj.main.length; i++) {
let lj = obj.main[i];
console.log(obj.title + ", lj:" + lj.lj);
let kStr = null;
if (lj.keys.trim().length > 0) {
kStr = "K:" + lj.keys;
}
insertLj([lj.lj, lj.trans, "nce" + num + "_" + obj.cur, lj.seq,
res.insertId, kStr]);
}
});
});
};
initArticleLj("../corner/wordsInfo/xinGaiNian/lj_2", 2);
initArticleLj("../corner/wordsInfo/xinGaiNian/lj_3", 3);
initArticleLj("../corner/wordsInfo/xinGaiNian/lj_4", 4);