ubuntu linux에 mysql 8.0을 설치했는데 

기존 개발환경의 java버전이 낮아 mysql-connector library와 호환이 되지 않았다.

그래서 mysql 8.0을 모두 지우고 mysql 5.7로 재설치 하게 되었다.



1. 먼저 기존 mysql과 관련된 설치한  모든 것을 지운다.


1
2
3
4
5
$ sudo apt-get remove --purge mysql*
 
$ sudo apt-get autoremove
 
$ sudo apt-get autoclean
cs





중간중간 Y/n가 뜬다면 Y를 입력하여 모두 remove 시킨다.



2. 설치가능한 mysql 목록을 확인하고 mysql 5.7을 설치하기


1
2
3
$ sudo apt-cache search mysql-server
 
$ sudo apt-get install mysql-server-5.7
cs





설치가 완료되면 로그인을 시도한다.


로그인 시 아래와 같이 에러발생 한다.



1
2
3
4
5
$ mysql -u root -p
 
Enter password:
 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
cs



로그인을 위해 sudo를 이용해 mysql에  로그인한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo mysql -u root 
 
mysql> USE mysql;
 
mysql> SELECT User, Host, plugin FROM mysql.user;
 
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
cs




3. 현재 root 계정의 plugin이 auth_socket이므로 mysql_native_passwordupdate 시켜준다.



1
2
3
4
5
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
cs




다음 root plugin을 확인한다.


1
2
3
4
5
6
7
8
9
10
11
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | mysql_native_password |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
cs


auth_socket에서 mysql_native_password로 바뀐것을 확인했다.




이제 sudo 없이 


1
$ mysql -u root -
cs


로 비밀번호 없이 db에 접속할수 있다.



4. root 비밀번호를 재설정해주자.



1
2
3
4
5
6
7
mysql> USE mysql;
 
mysql> update user set password=password('0000') where user='root';
 
mysql> update user set authentication_string=password('0000') where user='root';
 
mysql> flush privileges;
cs



설정이 끝나면 다시 로그인해본다.

$ mysql -u root -p 

비밀번호 0000을 넣어줘야 db에 접속할수 있다.



5. root 계정을 외부에서 접속가능하게 허용해준다.



1
2
3
4
5
6
7
mysql> grant all privileges on *.* to 'root'@'%' identified by '0000';
 
mysql> flush privileges;
 
mysql> select host, user, authentication_string  from user;
 
mysql> exit
cs




다음 bind-address 주석설정을 해준다.


1
2
3
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
 
$ sudo service mysql restart
cs






6. MySQL tool을 이용해 root로 DB가 접속되는지 확인한다.




잘 접속 되는 것을 확인할 수 있었다.


이후 테이블을 생성하고 유저생성 및 권한을 줘서 root로 접속하지 않고 작업을 진행할 수 있다.



7. 테이블 생성


1
CREATE DATABASE DB명 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
cs



8. 유저 생성 및 권한 주기


1
GRANT ALL PRIVILEGES ON DB명.* to '계정명'@'%' identified by '비밀번호';
cs



9. 비밀번호 변경


1
2
3
4
5
6
7
USE mysql
 
UPDATE user SET authentication_string=password('0000') where user='root';
 
FLUSH PRIVILEGES;
 
exit
cs


+ Recent posts