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
보안 참고사항
⚠️ 주의: 이 설정은 테스트 목적입니다. 프로덕션 환경에서는 다음을 권장합니다:
- 강력한 패스워드 사용
- 특정 IP나 네트워크만 접근 허용
- 최소 권한 원칙 적용
- 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;