카테고리 없음

ubuntu mysql 설치

사리생성 2025. 9. 7. 18:22

Ubuntu에서 MySQL을 직접 설치하고 사용자를 생성하는 방법을 안내해드리겠습니다.

MySQL 설치

1. 패키지 업데이트 및 MySQL 설치

 
 
bash
# 패키지 목록 업데이트
sudo apt update

# MySQL 서버 설치
sudo apt install mysql-server

# MySQL 보안 설정 실행 (권장)
sudo mysql_secure_installation

2. MySQL 서비스 관리

 
 
bash
# MySQL 서비스 시작
sudo systemctl start mysql

# MySQL 서비스 활성화 (부팅시 자동 시작)
sudo systemctl enable mysql

# MySQL 서비스 상태 확인
sudo systemctl status mysql

# MySQL 서비스 재시작
sudo systemctl restart mysql

MySQL 접속 및 초기 설정

1. Root 사용자로 MySQL 접속

 
 
bash
# Ubuntu의 경우 초기에는 sudo 권한으로 접속
sudo mysql

# 또는 패스워드 설정 후
mysql -u root -p

2. Root 사용자 패스워드 설정

 
 
sql
-- MySQL 8.0의 경우
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';

-- 또는
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password';

-- 권한 새로고침
FLUSH PRIVILEGES;

사용자 생성 및 권한 설정

MySQL 사용자 생성 및 권한 관리 스크립트
코드 
-- 1. 새 사용자 생성
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- 2. 원격 접속을 허용하는 사용자 생성
CREATE USER 'username'@'%' IDENTIFIED BY 'password';

-- 3. 특정 IP에서만 접속 가능한 사용자 생성
CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'password';

-- 4. 데이터베이스 생성
CREATE DATABASE myapp_db;

-- 5. 사용자에게 특정 데이터베이스의 모든 권한 부여
GRANT ALL PRIVILEGES ON myapp_db.* TO 'username'@'localhost';

-- 6. 사용자에게 특정 데이터베이스의 특정 권한만 부여
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'username'@'localhost';

-- 7. 사용자에게 모든 데이터베이스의 모든 권한 부여 (주의!)
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';

-- 8. 권한 새로고침
FLUSH PRIVILEGES;

-- 9. 사용자 목록 확인
SELECT User, Host FROM mysql.user;

-- 10. 특정 사용자의 권한 확인
SHOW GRANTS FOR 'username'@'localhost';

-- 11. 사용자 삭제
DROP USER 'username'@'localhost';

-- 12. 사용자 패스워드 변경
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';

실제 사용 예시

1. 애플리케이션용 사용자 생성

 
 
sql
-- MySQL에 root로 접속 후 실행
CREATE DATABASE webapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'secure_password123';
GRANT ALL PRIVILEGES ON webapp_db.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;

2. 읽기 전용 사용자 생성

 
 
sql
CREATE USER 'readonly'@'localhost' IDENTIFIED BY 'readonly_password';
GRANT SELECT ON webapp_db.* TO 'readonly'@'localhost';
FLUSH PRIVILEGES;

3. 백업용 사용자 생성

 
 
sql
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'backup_password';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;

원격 접속 설정

1. MySQL 설정 파일 수정

 
 
bash
# MySQL 설정 파일 편집
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# bind-address 설정 변경
# bind-address = 127.0.0.1  <- 이 줄을 주석 처리하거나
bind-address = 0.0.0.0     # <- 이렇게 변경

2. 방화벽 설정 (필요한 경우)

 
 
bash
# MySQL 포트(3306) 열기
sudo ufw allow 3306

# 특정 IP에서만 접근 허용
sudo ufw allow from 192.168.1.0/24 to any port 3306

3. MySQL 서비스 재시작

 
 
bash
sudo systemctl restart mysql

유용한 관리 명령어

MySQL 관리 명령어 모음
#!/bin/bash

# MySQL 접속
mysql -u username -p

# 특정 데이터베이스로 직접 접속
mysql -u username -p database_name

# 원격 서버 접속
mysql -h hostname -u username -p

# SQL 파일 실행
mysql -u username -p database_name < script.sql

# 데이터베이스 백업
mysqldump -u username -p database_name > backup.sql

# 모든 데이터베이스 백업
mysqldump -u root -p --all-databases > all_backup.sql

# 특정 테이블만 백업
mysqldump -u username -p database_name table_name > table_backup.sql

# 백업 복원
mysql -u username -p database_name < backup.sql

# MySQL 버전 확인
mysql --version

# MySQL 프로세스 확인
sudo systemctl status mysql

# MySQL 로그 확인
sudo tail -f /var/log/mysql/error.log

# MySQL 설정 파일 위치
# /etc/mysql/mysql.conf.d/mysqld.cnf

보안 권장사항

1. 강력한 패스워드 정책

 
 
sql
-- 패스워드 검증 플러그인 활성화
INSTALL COMPONENT 'file://component_validate_password';

-- 패스워드 정책 확인
SHOW VARIABLES LIKE 'validate_password%';

2. 불필요한 사용자 제거

 
 
sql
-- 익명 사용자 제거
DELETE FROM mysql.user WHERE User='';

-- 테스트 데이터베이스 제거
DROP DATABASE IF EXISTS test;
FLUSH PRIVILEGES;

3. Root 사용자 원격 접속 비활성화

 
 
sql
-- Root 사용자의 원격 접속 제거
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
FLUSH PRIVILEGES;

MySQL 제거 (필요한 경우)

 
 
bash
# MySQL 완전 제거
sudo apt remove --purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt autoremove
sudo apt autoclean

이제 MySQL이 설치되고 사용자가 생성되었습니다. 생성한 사용자로 접속해서 데이터베이스를 사용할 수 있습니다. 추가 질문이 있으시면 언제든 물어보세요!

 
 
 
 
재시도
 

Claude는 아직 생성한 코드를 실행할 수 없습니다.

K

test 란 db 생성 유저 test 생성 및 어디서든 접속유저 패스워드 test

편집

MySQL에서 test 데이터베이스를 생성하고, 어디서든 접속 가능한 test 사용자를 만드는 방법을 안내해드리겠습니다.

MySQL 접속 및 설정

1. MySQL에 root로 접속

 
 
bash
sudo mysql
# 또는 패스워드가 설정되어 있다면
mysql -u root -p

2. 데이터베이스 및 사용자 생성

test 데이터베이스 및 사용자 생성 스크립트
-- 1. test 데이터베이스 생성
CREATE DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 2. test 사용자 생성 (어디서든 접속 가능하도록 '%' 사용)
CREATE USER 'test'@'%' IDENTIFIED BY 'test';

-- 3. test 사용자에게 test 데이터베이스의 모든 권한 부여
GRANT ALL PRIVILEGES ON test.* TO 'test'@'%';

-- 4. 권한 새로고침
FLUSH PRIVILEGES;

-- 5. 생성 확인
SHOW DATABASES;
SELECT User, Host FROM mysql.user WHERE User = 'test';
SHOW GRANTS FOR 'test'@'%';

원격 접속을 위한 MySQL 설정

1. MySQL 설정 파일 수정

 
 
bash
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

다음 라인을 찾아서 수정:

 
 
# 기존: bind-address = 127.0.0.1
# 변경: 
bind-address = 0.0.0.0

2. MySQL 서비스 재시작

 
 
bash
sudo systemctl restart mysql

3. 방화벽 설정 (필요한 경우)

 
 
bash
# MySQL 포트 3306 열기
sudo ufw allow 3306

# 또는 특정 네트워크에서만 허용
sudo ufw allow from 192.168.1.0/24 to any port 3306

접속 테스트

1. 로컬에서 접속 테스트

 
 
bash
mysql -u test -p test
# 패스워드: test

2. 원격에서 접속 테스트

 
 
bash
mysql -h [서버IP] -u test -p test
# 패스워드: test

3. 접속 후 확인

 
 
sql
-- 현재 사용자 확인
SELECT USER(), CURRENT_USER();

-- 현재 데이터베이스 확인
SELECT DATABASE();

-- 테스트 테이블 생성
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 테스트 데이터 삽입
INSERT INTO test_table (name) VALUES ('Test Data 1'), ('Test Data 2');

-- 데이터 조회
SELECT * FROM test_table;

설정 확인 명령어

MySQL 설정 확인 명령어
-- MySQL에서 실행할 확인 명령어들

-- 1. 데이터베이스 목록 확인
SHOW DATABASES;

-- 2. 사용자 목록 확인
SELECT User, Host FROM mysql.user;

-- 3. test 사용자 권한 확인
SHOW GRANTS FOR 'test'@'%';

-- 4. 현재 접속 정보 확인
SELECT USER(), CURRENT_USER(), CONNECTION_ID();

-- 5. MySQL 버전 및 설정 확인
SELECT VERSION();
SHOW VARIABLES LIKE 'bind_address';
SHOW VARIABLES LIKE 'port';

-- 6. 현재 접속된 사용자들 확인
SHOW PROCESSLIST;

시스템에서 확인할 명령어

 
 
bash
# MySQL 서비스 상태 확인
sudo systemctl status mysql

# MySQL이 모든 인터페이스에서 수신 대기하는지 확인
sudo netstat -tlnp | grep :3306

# 또는
sudo ss -tlnp | grep :3306

# MySQL 설정 파일 내용 확인
grep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf

# MySQL 로그 확인
sudo tail -f /var/log/mysql/error.log

접속 정보 요약

  • 데이터베이스명: test
  • 사용자명: test
  • 패스워드: test
  • 호스트: % (어디서든 접속 가능)
  • 포트: 3306

보안 참고사항

⚠️ 주의: 이 설정은 테스트 목적입니다. 프로덕션 환경에서는 다음을 권장합니다:

  1. 강력한 패스워드 사용
  2. 특정 IP나 네트워크만 접근 허용
  3. 최소 권한 원칙 적용
  4. SSL 연결 사용

프로덕션용 보안 설정 예시

 
 
sql
-- 더 안전한 사용자 생성 예시
CREATE USER 'test'@'192.168.1.%' IDENTIFIED BY 'StrongPassword123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON test.* TO 'test'@'192.168.1.%';
FLUSH PRIVILEGES;