WSL & UBUNTU : MYSQL 설치

2022. 4. 7. 18:20
    • Window WSL > Ubuntu에서 mysql삭제하고 , 미니콘다 가상환경에 mysql설치
    • 발생한 에러ㅠㅠ.... 일단 다 해결하긴 했다
      • Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
      • ERROR 1698 (28000): Access denied for user 'root'@'localhost'
      • name_mysql is not defined 에러
  • 참고)mysql과 django를 연동시켰으면, django에서 db작업을 할때 mysql 서버를 반드시 켜줘야 함
    • 그 와중에 wsl은 systemctl이 적용되지 않기 때문에 강제로 서버를 직접 구동시켜줘야 한다.
#mysql 서버 구동
sudo service mysql start
#mysql 서버 접속
sudo mysql -u root -p

 

 


0. MySQL Linux 삭제

#mysql종료
sudo systemctl stop mysql

#mysql관련 package삭제
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*

#mysql 정보를 담은 파일 삭제
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql

#남은 파일 삭제
sudo apt autoremove
sudo apt autoclean

 

1. Mysql설치

  • mysql서버를 초기화 하는 단계에서 에러가 날 수 있음
    • 에러명 : Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
    • mysql.sock파일이 생성되어 있지 않다는 에러임
    • WSL이 systemctl을 지원하지 않아서 생기는 문제 > 직접 MySql을 구동시키면 된다
    • 근데 직접 구동시킬 경우, 디렉토리가 없다고 에러가 또 뜰 수가 있음.
    • 그러면 직접 디렉토리를 생성시키면 된다
    • 그러고 나서 다시 서버 초기화
#mysql 설치
sudo apt install -y mysql-server

#mysql 서버 초기화
sudo mysql_secure_installation

#에러발생시 서비스 명령어로 직접구동.
sudo service mysql start

#또 에러발생시 직접 디렉토리 생성 후, mysql 시작
sudo mkdir /nonexistent
sudo service mysql start

#mysql 서버 초기화
sudo mysql_secure_installation

 

  • 그러면 이제 설치가 진행되면서 이것저것 물어봄. 걍 잘 선택하면 됨
    • 강한 패스워드를 생성할 수 있는 플러그인을 활성화 할지? 원칙은 yes. 근데 yes하면 가벼운 패스워드를 적용할 수 없어서 일단 no로 함
    • 패스워드 입력 & 재입력
      • 이때 비밀번호를 0000으로 입력하니까 에러가 나는 것 같음
      • 영문조합 & 8자 이상으로 하니까 에러가 안났음 ex)q1w2e3r4t5
    • 익명의 사용자를 제거할지 물음 > yes
    • 최고 관리자 권한으로 외부 로그인을 허용하지 않을지? > no
    • test db 삭제할지 > y
    • previlieges table 로드할지?  > y
    • All done!

 

  • 그 후, mysql 데몬을 재실행
#mysql 데몬을 재실행
sudo /etc/init.d/mysql restart

 

  • 이제 mysql 접속하면 됨. 접속할 때 sudo무조건 쳐줘야 함!!!!! 
    • 이때 비밀번호를 입력하라고 하는데, 제대로 입력해도 에러가 날 수 있다 ㅠㅠ
      • 에러 : ERROR 1698 (28000): Access denied for user 'root'@localhost
      • root계정의 패스워드 타입이 auth_socket으로 설정되어 있기 때문인데, 이 타입을 변경해주고, mysql을 종료한 후(exit;), 다시 정상적으로 접속하면 된다
      • 참고링크 : https://bscnote.tistory.com/77
#mysql 접속
sudo mysql -u root -p
#에러:ERROR 1698 (28000): Access denied for user 'root'@localhost

#강제로 mysql 접속
sudo mysql -u root

#mysql에서 root패스워드 타입 확인
USE mysql;
SELECT User, Host, plugin FROM mysql.user;

#root의 plugin설정을 mysql_native_password로 변경
update user set plugin='mysql_native_password' where user='root';
flush privileges;
select user, host, plugin from user;

 

2. 가상환경 Mysql설치

  • 가상환경에서 db를 설치하기 전에, base(전역)에서 mysql 테이블을 하나 생성해줘야 한다
#mysql 접속
mysql -u root -p

#mysql table 생성
mysql> create database Database이름 character set utf8mb4 collate utf8mb4_general_ci;

 

  • 그리고 나서 가상환경에 접속해서 설치하면 됨
#가상환경접속하고 나서
pip install mysqlclient
  • 에러가 나는 경우가 있는데, 다음을 입력하면 된다.
#그냥 ubuntu에서 에러가 날 때
sudo apt-get install libmysqlclient-dev 
pip install mysqlclient


#WSL에 설치된 ubuntu에서 에러가 날 때
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
pip install mysqlclient

 

 

name_mysql is not defined 에러

  • 하고나서, django project에서 python manage.py runserver 라거나 python manage.py makemigrations 등을 실행하면 'name '_mysql' is not defined' 같은 에러가 발생한다.
  • 가상환경에서 다음을 실행
pip install PyMySQL
  • 그리고 다음을 settgins.py에 추가한다
#settings.py
import pymysql
pymysql.install_as_MySQLdb()

 

 

  • 그다음 서버를 재시작하고 비번을 바꿔주면 됨
#mysql 데몬을 재실행
sudo /etc/init.d/mysql restart

#mysql 서버 초기화
sudo mysql_secure_installation

#sqlclient설치
pip install mysqlclient

#sqllogin
sudo mysql -u root -p

#비밀번호 변경
mysql > use mysql;
mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '사용할 비밀번호 입력';
mysql > FLUSH PRIVILEGES;

 

 

settings.py

  • Mysql을 django와 연동시켜주기 위해 다음과 같이 DataBases를 수정해줘야 한다.
#settings.py
DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DATABASE 명',
        'USER': 'DB접속 계정명',
        'PASSWORD': 'DB접속용 비밀번호',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

 

참고사이트

 

 

 

'mysql' 카테고리의 다른 글

INDEX, TRANSACTION, 권한부여 // MYSQL(2-2)  (0) 2022.02.11
기본키&고유키&외래키, 뷰 // MYSQL(2-1)  (0) 2022.02.11
DATABASE // MYSQL(1)  (0) 2022.02.11

BELATED ARTICLES

more