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 삭제 : https://filime.tistory.com/21
- mysql설치시 소켓에러(1,2 둘다 해봤을 때 둘다 성공적으로 실행이 되었음. 일단은 1번 링크에 있는 해결책을 최종적으로 사용하고 있음)
- mysql의 root계정이 로그인 안됨
- root패스워드의 타입이 auth_socket일 때 : https://bscnote.tistory.com/77
- name_mysql is not defined 에러
'mysql' 카테고리의 다른 글
INDEX, TRANSACTION, 권한부여 // MYSQL(2-2) (0) | 2022.02.11 |
---|---|
기본키&고유키&외래키, 뷰 // MYSQL(2-1) (0) | 2022.02.11 |
DATABASE // MYSQL(1) (0) | 2022.02.11 |