728x90

prisma init

 

 

schema.prisma 파일안에 

datasource db {
    provider = "mysql"
    url      = "mysql://유저:비번@localhost:3306/markhouse__"
}

//Prisma Generate는 데이터 모델을 사용하여 Prisma Client를 생성하는 도구입니다. 
//Prisma Client를 사용하면 데이터베이스에 대한 CRUD 작업을 쉽게 수행할 수npx prisma migrate reset 있습니다.

generator client {
    provider = "prisma-client-js"
}

model User {
    id    Int     @id @default(autoincrement())
    email String  @unique
    name  String?
    posts Post[]
}

model Post {
    id       Int    @id @default(autoincrement())
    title    String
    author   User   @relation(fields: [authorId], references: [id])
    authorId Int
}

 

❯ npx prisma db push
Prisma schema loaded from prisma/schema.prisma
Datasource "db": MySQL database "markhouse__" at "localhost:3306"

MySQL database markhouse__ created at localhost:3306

🚀  Your database is now in sync with your Prisma schema. Done in 136ms

✔ Generated Prisma Client (4.10.1 | library) to ./node_modules/@prisma/client in 44ms

 

| markhouse__생김

 

 

 

 

+

만약 show tables를 실행했을 때 _prisma_migrations 테이블만 보인다면, 아마도 Prisma Migrate를 통해 생성한 마이그레이션 파일로 데이터베이스 스키마를 생성하지 않은 것으로 추정됩니다.

Prisma Migrate를 사용하여 데이터베이스 스키마를 생성하려면 다음과 같은 단계를 따라야 합니다.

  1. prisma init 명령어를 사용하여 Prisma 프로젝트를 초기화합니다.
  2. schema.prisma 파일을 생성하고, 데이터베이스 스키마를 정의합니다.
  3. prisma migrate save 명령어를 사용하여 마이그레이션 파일을 생성합니다.
  4. prisma migrate up 명령어를 사용하여 마이그레이션을 적용하여 데이터베이스 스키마를 생성합니다.

위 단계를 수행하고 나면 show tables 명령어를 실행하여 데이터베이스 내 모든 테이블을 볼 수 있습니다. 만약 테이블이 여전히 보이지 않는다면, DBeaver에서 해당 데이터베이스에 대한 연결을 확인해야 합니다. 데이터베이스 연결이 올바른지 확인하고, 다시 시도해 보시기 바랍니다.

 

 

권한 문제가 생긴다면

 

모든 사용자 조회하는 법 

SELECT user, host FROM mysql.user;

 

사용자 조회해보고

비밀번호 확인해볼 것(모른다면 재설정하기)

ALTER USER '사용자명'@'호스트명' IDENTIFIED BY '새로운 비밀번호';

또는

ALTER USER '사용자명'@'호스트명' IDENTIFIED WITH mysql_native_password BY 'new_password';

 

권한도 확인해볼 것

권한 체크 

SHOW GRANTS FOR 'database_user'@'localhost';

권한 주기

GRANT CREATE, DROP ON *.* TO 'database_user'@'localhost';

 

 

root 모든 걸 볼수 있는거 

다른 권한에서 만든 것도 볼 수 있음 

 

다른 유저로 안들어가졌던 이유는 그저 비번 틀려서 접근 안되었던 거였음. 

 

dbeaver는 그냥 mysql에서 만든 데이터 깔끔하게 보여주는 툴임. 

localhost, 유저, 비번 잘입력하면 연결은 되어서 생성됨

 

추가로 테이블 생성했을 때 mysql터미널에서는 생긴게 보이는데 dbeaver에 바로 반영안되는 이유가 뭐지?

아 dbeaver refresh 버튼 눌러서 새로고침하니까 있다 얏호~!~!~!~

 

 

 

+

 

root는 MySQL에서 가장 높은 권한을 가진 사용자입니다. root 사용자는 모든 데이터베이스와 모든 객체에 대한 모든 권한을 가지고 있습니다. 즉, root 사용자는 MySQL 서버에서 모든 작업을 수행할 수 있습니다.

MySQL에서 root 사용자는 기본적으로 "localhost" 호스트에서만 로그인할 수 있습니다. 이는 보안상의 이유로 설정되어 있습니다. 따라서, 원격 호스트에서 root 계정으로 로그인하려면 특별한 설정이 필요합니다.

그러나, root 계정은 매우 강력하며 위험하기 때문에 일반적으로 MySQL 서버에는 다른 사용자 계정을 만들어 사용합니다. 이렇게 하면 보안상의 문제를 최소화할 수 있습니다.

 

+

 

sudo는 "Superuser Do"의 준말로, 리눅스나 유닉스 시스템에서 일반 사용자가 시스템 관리자(root)의 권한을 일시적으로 얻을 수 있는 명령어입니다.

리눅스나 유닉스 시스템에서 root 계정은 시스템 전체를 관리할 수 있는 권한을 가지고 있으므로, root 권한을 가진 사용자로 로그인하면 시스템 보안에 큰 위험이 따릅니다. 따라서, 보안상의 이유로 일반 사용자가 root 권한을 가지지 못하도록 설정되어 있습니다.

이때, 일반 사용자가 시스템 관리 작업을 수행해야 할 경우, sudo 명령어를 사용하여 일시적으로 root 권한을 얻을 수 있습니다. 이때, 사용자는 자신이 수행하려는 작업을 sudo 명령어 뒤에 입력하면 됩니다.

예를 들어, 일반 사용자가 시스템 업데이트를 수행하려면 다음과 같이 sudo 명령어를 사용할 수 있습니다.

 

+

mysql_native_password는 MySQL에서 기본으로 제공하는 인증 플러그인 중 하나입니다.

이 플러그인은 기존의 비밀번호 인증 방식과 호환되도록 설계되어 있어, 기존에 비밀번호로 인증했던 사용자들도 계속해서 이 플러그인을 사용하여 인증할 수 있습니다.

auth_socket 플러그인과 달리, mysql_native_password 플러그인을 사용하는 경우에는 비밀번호가 필요합니다. 따라서, 해당 사용자의 비밀번호를 잊어버린 경우에는 비밀번호를 재설정해주어야 합니다.

만약 mysql_native_password 플러그인 대신 caching_sha2_password 플러그인을 사용하는 경우에는, 새로운 비밀번호를 설정할 때 IDENTIFIED WITH mysql_native_password 구문을 생략해야 합니다.

 

728x90
728x90

 

 

 

ㅋㅋ그놈의 에러ㅋ

걍 db안켜서..ㅋㅋ...

나한테 깔려있는 sql처럼 자동인줄알았지

 

sudo service mysql restart

 

 

이건 자동실행시켜주는 거.

 

 

 

 

 

728x90
728x90

참고로 나는 이 두 에러가 스벅의 부실한 와이파이 때문이었음.. 

응아니고 mariadb 실행안해서였음요!!  기존에 쓰던 mysql는 초기설정으로 자동실행되게 설정해놓은 거라 마리아디비는 쓸라면 실행해줘야됐음!!!!!! ()

 

ConnectionError [SequelizeConnectionError]: connect ETIMEDOUT 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)   

 

 


+자동실행되는 설정

출처:  https://codecoco.tistory.com/category

 


db연결하는 법 

mysql과 같음 이 코드 mysql연결하는거 보고 한거임(시퀄라이즈가 다른 sql데이터베이스들도 호환가능해서)

출처는 책임 | Node.js 교과서 | 조현영 p.315

 

 

 

package.json에 npm start하기 위해 넣기

start 노드몬 앱 넣기

시작할거를 main에 app.js로 

{
  "name": "4th-project-yunminblock",
  "version": "1.0.0",
  "description": "소윤이 보아라",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon app"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.2",
    "morgan": "^1.10.0",
    "mysql2": "^2.3.3",
    "nunjucks": "^3.2.3",
    "sequelize": "^6.13.0",
    "sequelize-cli": "^6.3.0",
  },
  "devDependencies": {
    "nodemon": "^2.0.15"
  }
}

 

시퀄라이즈에 필요한 모듈패키지설치

npm i express morgan nunjucks sequelize sequelize-cli mysql2

npm i -D nodemon

 

 

설치 완료 후

 

npx sequelize init

 

하면 

config, models, migrations, seeders폴더가 생성됨

models폴더 안에는 index.js가 있음

 

몇개는 지금 블록체인중이라서 넣은거라 안따라해도 됨

index.js 를 이렇게 수정고우

const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || "development";
const config = require(__dirname + "/../config/config.json")[env];
const db = {};

//기존
const sequelize = new Sequelize(
  config.database,
  config.username,
  config.password,
  config
);

db.sequelize = sequelize;

module.exports = db;

 

이제 시퀄라이즈 통해 express앱과 mysql연결할거임

app.js 파일 만들고 안에 코드 넣기

const express = require("express");
const path = require("path");
const morgan = require("morgan");
const nunjucks = require("nunjucks");

const { sequelize } = require("./models");

const app = express();
app.set("port", process.env.PORT || 3307);
app.set("view engine", "html");
nunjucks.configure("views", {
  express: app,
  watch: true,
});

sequelize
  .sync({ force: false })
  .then(() => {
    console.log("데이터베이스 연결성공");
  })
  .catch((err) => {
    console.log(err);
  });

app.use(morgan("dev"));
app.use(express.static(path.join(__dirname, "public")));
app.use(express.json());

app.use(express.urlencoded({ extended: false }));

app.use((req, res, next) => {
  const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
  error.status = 404;
  next(error);
});

app.use((err, req, res, next) => {
  res.locals.message = err.message;
  res.locals.error = process.env.NODE_ENV !== "production" ? err : {};
  res.status(err.status || 500);
  res.render("error");
});

app.listen(app.get("port"), () => {
  console.log(app.get("port"), "번 포트에서 대기중");
});

마리아db포트가 3307로 되어 있어서 이렇게 했는데

사실 상관없는거같긴함 (서버는 계속 헷갈리는데 db서버가 3307포트인건 알겠고 여기서 넣는 포트는 아마 localhost:로 화면에 띄워주는 포트라고 이해함요..네.. )

여기서 3001로 바꿔도 잘됨 config에 port주소가 3307로 잘들어가 있기만 하면 문제없는듯 그거는 마리아db연결용 이건 보여주는포트용으로이해햇음

 

 

이제 중요한거.

config 내용임!!!

 

나는 마리아 디비쓰니까 그 유저네임이랑 그 비번 그 host로 적어줘야 한다

마리아 디비의 port랑

그래서 이렇게 했다

{
  "development": {
    "username": "mariatest",
    "password": "1234",
    "database": "mariadb",
    "host": "localhost",
    "dialect": "mysql",
    "port": "3307"
  },
  "test": {
    "username": "mariatest",
    "password": "1234",
    "database": "database_test",
    "host": "0.0.0.0",
    "dialect": "mysql"
  },
  "production": {
    "username": "mariatest",
    "password": "1234",
    "database": "database_production",
    "host": "0.0.0.0",
    "dialect": "mysql"
  }
}

아마 두세번째 애들은 상관없을듯 혹시나 해서 저렇게 넣어둔거임

 

 

 

이제 npm start하면 끝!!!

 


 

 

사실 위에도 말했지만 나는 연결안된다고 에러떴었음

ConnectionError [SequelizeConnectionError]: connect ETIMEDOUT
    at ConnectionManager.connect

 

암튼 이거 몰라서 mariadb들어가서 확인해보려는데 접근이 안됨

 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

 

 

sudo service mysql restart

이것도 해보고 계속 안되다가 

+아냐 이게 실행이야 이거 하니까 된거임!!

+

 

 

sudo mysql -u root -p

로 하니까 들어가짐

 

들어가서 문제 있나 확인함

 

흠... config랑 비교해봄 

user mariatest 인지 host localhost로 되어있나..

 

npm start했을 때 db없다길래 

npx sequelize db:create

로 생성하고

실행

npm start

 

 

안에도 잘있군

 

얏호

 

 

 

https://velog.io/@pier101/Linux-wsl-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85-%EB%A7%8C%EB%93%A4%EA%B8%B0nginx

 

[Linux] wsl 환경에서 로그인,회원가입 만들기(+nginx)

wsl 환경에서 node.js+react(+nginx)를 활용해 웹페이지를 만들어 보면서 ubuntu 환경에서 서버를 어떻게 구축하는지에 대한 감을 익히고 서버 구성에 대해 알아볼 것이다.📢본 작업은 wsl상에서 서버를

velog.io

 

 

 

 

 

728x90
728x90

 

상황: 

우분투 연결안된 비주얼코드창에서 마리아db연결하겠다고 삽질하고 있었던 것을 깨닫

 

마리아db 이미 깔려있고 리눅스창에서 작업해야되는거니까 mysql 워크벤치 연동은 의미없다는 것을 깨닫

 

비주얼코드 우분트연결 창 켜서 

폴더만들어서 안에 로그인되는 코드넣어놓고 작업시작

npm i

디비 생성

 

역시 같은 에러.

이 오류에 경우

 

1. 비번 틀렷을 경우

2. 권한설정이 안됐을 경우.

3. 기타 등등 있대서

 

비번은 바꿔주고 확인해봤으니 아니고

 

 

 

비번바꾸기

use mysql;

사용자와 비밀번호 출력하기

select user, password from user;

abc 사용자의 비밀번호를 1234로 설정

update user set password=password('1234') where user='abc';

변경 사항 적용

flush privileges;

 

 

 

 

 

 

권한설정이 문제인가 해서

 

mariadb 계정 권한설정

MariaDB [mysql]> grant all privileges on *.* to 'test'@'localhost' with grant option; Query OK, 0 rows affected (0.002 sec)

https://94mogi.tistory.com/7

바꿔봤는데도 안됐음 

 

 

우분투 파일 권한 설정

이 문젠가 싶어서 그것도 해봄 

하위폴더까지 다 권한줌

[root@~/]# chmod 755 -R /폴더명

777도 해봄(이거는 보안상 위험할 수 있대서 다시 755로 바꿨다, 물론 에러 원인은 아니었지만)

 

(이거 개념 나중에 참고하삼 https://withcoding.com/103)

연산자 설명 배리 굿https://nachwon.github.io/shell-chmod/

 

[Shell] chmod - 파일 및 폴더의 권한 설정

chmod 셸 명령어는 파일 또는 폴더의 권한을 변경할 때 사용한다.

nachwon.github.io

 

 

여전히 같은 에러 뜸

 

이번에는 계정이 문젠가 싶어서 

기존계정 삭제하고 다시 만들어봄

 

 

 

mariadb 계정 삭제

 

use mysql

DROP USER '계정'@'접속대역';

 

새로 만들고

권한설정도 하고

 

플러그인이 문제인가 싶어서 해봄

MariaDB [mysql]>  update user set plugin='mysql_native_password' where user='mariatest';

확인

MariaDB [mysql]> select user,host,plugin from mysql.user;

 

 

이걸로 해봤는데도 안됨

 

 

 

 

 

혹시나해서 비밀번호 초기화 해봄

(및 보안강화를 위한 설정명령어, 라고 함.)

 

sudo mysql_secure_installation

이후에 우분투 켜서 다시 접속하려는데 안됨

mysql -u root -p

sudo mysql

이거 둘다 안됨

 

 

 

 

mariadb들어갈때 

sudo mysql해서 들어가는데 

에러뜸

 

 

새로운 에러 등장~~

에러 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

 

 

 

service mysql start 

sudo su-로 들어가서 하니까 시작되고

나와서

sudo mysql하니까 접속됨

 

 

 

들어와서 db생성 실행해보니

 

역시 안되고

 

 

엇 생각해보니까

이 mariadb 포트가 3307인데 

config에 포트 추가로 넣은거 걍 아무거나 넣어본거였거든

 

똑같은 포트번호 3307으로 해봄

 

 

 

 

와우 

생성잘됨

 

 

삽질2 포트번호가 달라서 그랬던거임

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

생각해보니까 이 에러도

 

전에 mariadb깔고 실행할때 떴던 에러인데

기존에 깔려있는 mysql이 3306포트를 써서 mariadb량 겹쳐서 위에 에러가 떴거든

그때 mariadb포트를 3307으로 바꿔줌

(mariadb설치시 위 에러해결 이거 참고하슈 : https://codecoco.tistory.com/58?category=524414

 

 

 

db안에 회원가입한거 잘들어왔나 확인

 

응잘들어옴 로그인도 잘됨

 

 

 

mariadb

로그인하기 db생성하기 

 

끝~~

 

 

(아근데 로그인하는 코드자체 제로초보고 다 따라한거라 나중에 해봐야겠다...

혼자 해보려다가 잘안됐음.. 여기서 시간 많이 먹긴함ㅋ)

 

 

728x90
728x90

우분투 설치하고

계정생성 비번만들어

 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh|bash

(안돼서 다시함 둘중에 아무거나 하면 됨

뒤에 넣은 명령어 curl어쩌구는 됐다..)

 

하고 sudo su 슈퍼모드로

 

에서 다시 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh|bash

 

nvm install node

이거 해서 노드깔아줌

 

잉 nvm 찾을 수 없다고 뜨네

 

 

환경설정을 해줘야하는구나

. ~/.nvm/nvm.sh

 

 

nvm install node

이거 해서 노드깔아줌

 

 

버전확인

node -v

npm -v

 

 

----마리아디비깔기---

 

슈퍼유저로 전환되어있니

sudo su

 

 

레퍼지토리에서 업데이트 패키지가 있는지 체크하고, 설치된 패키지를 업데이트 하기

sudo apt update && sudo apt-get -y upgrade

 

 

mariaDB를 설치

sudo apt-get install -y mariadb-server

 

 mariaDB 접속하기

mysql -u root -p

 

 

에러

나는 기존에 mysql깔려있어서 포트번호가 똑같아서 에러남

 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' 

 

 

에러 해결해보기

/etc/mysql/mariadb.conf.d 의  50-server.cnf 파일을 수정한다

 

 

cd /etc/mysql/mariadb.conf.d/

ls -la

vi 50-server.cnf

 

들어가서 

i눌러서 편집모드로 바꾸고

#주석 지우고 포트번호를 3307로 바꿔줌

esc눌러서 편집끝내고 :wq로 저장후 종료를 한다

cat 50-server.cnf로 내용 잘바뀌었나 확인한다

 

 

 

서버구동하기

sudo service mysql restart

 

 

MariaDB 접속하기

mysql -u root -p

 

 

확인하기

show databases;

잘뜸~

 

 

 

 

 

 

https://codecoco.tistory.com/58

 

[리눅스] ubuntu에 MariaDB 설치하기 // ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run

0. SuperUser 로 전환하기 sudo su 1. 레퍼지토리에서 업데이트 패키지가 있는지 체크하고, 설치된 패키지를 업데이트 하기 sudo apt update && sudo apt-get -y upgrade root@DESKTOP-RJ31OF5:/home/ubuntu# sudo..

codecoco.tistory.com

 

728x90

+ Recent posts