[Linux] 쉘 설정·스크립트 & MariaDB(설치·원격접속·복제)

배창민·2025년 9월 1일
post-thumbnail

리눅스 쉘 설정·스크립트 & MariaDB(설치·원격접속·복제)


1) 쉘 설정 & 환경 변수

기본 설정 파일

  • ~/.bashrc : 인터랙티브 셸(일반 터미널) 설정
  • ~/.bash_profile : 로그인 셸 설정

alias

# 전체 보기
alias

# 임시 등록
alias ll='ls -al'
unalias ll

# 영구 등록
echo "alias ll='ls -al'" >> ~/.bashrc && source ~/.bashrc

type — 명령어 출처 확인

type ls
type -a cd echo exit

set — 셸 옵션

set                 # 현재 셸 변수 모두 보기
set -o noclobber    # 기존 파일 덮어쓰기 방지
set +o noclobber

shopt — bash 전용 옵션

shopt               # 옵션 목록
shopt -s globstar   # ** 패턴 재귀 활성화
shopt -u globstar

환경 변수 (printenv / export)

printenv            # 전체
printenv PATH       # 특정 키

export MY_VAR="Hello"
unset MY_VAR

# 영구 등록
echo "export MY_VAR='Hello World'" >> ~/.bashrc && source ~/.bashrc

2) 쉘 스크립트 빠르게 시작하기

셔뱅(shebang) & 실행

vim test.sh
#!/bin/bash
echo 'ohgiraffers directory'
cd /home/ohgiraffers
ls -l
chmod +x test.sh
./test.sh          # 현재 디렉토리에서 실행
source ./test.sh   # 현재 쉘에서 실행(셔뱅 무시)

PATH에 등록(어디서나 실행)

# 시스템 공용
sudo mv test.sh /usr/local/bin/ && chmod +x /usr/local/bin/test.sh
test.sh

# 사용자 폴더 사용
mkdir -p ~/scripts && mv test.sh ~/scripts/
echo 'export PATH=$HOME/scripts:$PATH' >> ~/.bashrc && source ~/.bashrc

필수 문법 스냅샷

# 한 줄 여러 명령
echo "Hello"; echo "World"

# 줄바꿈
echo "긴 명령어입니다. \
줄바꿈으로 가독성 ↑"

# 주석
# 이 줄은 실행되지 않습니다.

# 변수
name="Ohgiraffers"
echo "Hello, $name"    # 큰따옴표: 변수 확장 O
echo 'Hello, $name'    # 작은따옴표: 변수 확장 X

# 명령 치환
today=$(date)

# 스크립트 인자
# $1, $2 ... / 개수: $# / 전체: $@, $*

조건/반복/함수 미니 예제

# if
read -p "숫자: " n
if [ "$n" -gt 10 ]; then echo "10 초과"; else echo "10 이하"; fi

# 숫자: -eq -ne -gt -lt -ge -le
# 문자열: =  !=  -z  -n
# 파일: -e -d -f -r -w -x

# for
for x in A B C; do echo $x; done

# case
read -p "색상: " c
case $c in red) echo R ;; blue) echo B ;; *) echo ? ;; esac

# while
i=1; while [ $i -le 3 ]; do echo $i; i=$((i+1)); done

# 함수
hello(){ echo "안녕하세요, $1님!"; }
hello "Ohgiraffers"

3) MariaDB 설치·보안·계정·원격접속

설치

sudo apt update && sudo apt upgrade
sudo apt install mariadb-server mariadb-client

보안 설정

sudo mysql_secure_installation
# root 비번 설정, 익명 삭제, root 원격 금지, test DB 삭제, 적용

접속 & 계정/DB/권한

sudo mariadb -u root -p

-- 계정/DB/권한
CREATE USER 'master'@'%' IDENTIFIED BY 'master';
CREATE DATABASE menudb;
GRANT ALL PRIVILEGES ON *.* TO 'master'@'%';
FLUSH PRIVILEGES;

-- 확인
SHOW DATABASES;
USE mysql; SELECT Host,User FROM user;
SHOW GRANTS FOR 'master'@'%';

root 원격 허용(필요 시)

SELECT Host,User FROM mysql.user;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mariadb';
FLUSH PRIVILEGES;

외부 접속(가상머신)

  1. VirtualBox 네트워크: NAT → 브리지
  2. IP 확인 & 방화벽
sudo apt-get install -y net-tools
ifconfig                     # inet 주소 확인
sudo ufw allow 3306/tcp      # MariaDB 포트 오픈
  1. MariaDB 바인딩 수정
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
# bind-address = 0.0.0.0   로 설정

# 재시작 (환경에 따라 명령 다를 수 있음)
sudo service mysqld restart    # 또는
# sudo service mariadb restart / sudo systemctl restart mariadb

4) MariaDB Replication(마스터-슬레이브)

개념 & 장점

  • Master ↔ Slave(여러 대 가능), 비동기 복제
  • 장점: 부하 분산, 실시간 백업

Master 설정

  1. 서버 설정 파일 수정(예: server-id, log_bin 등) → 재시작
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
sudo service mysqld restart
  1. 복제 계정 권한
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';
FLUSH PRIVILEGES;
  1. binlog 위치 확인(메모!)
SHOW MASTER STATUS;
-- File(예: mysql-bin.000009), Position(예: 2060)

Slave 설정

  1. 서버 설정 파일 수정(고유 server-id) → 재시작
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
sudo service mysqld restart
  1. Master 연결
STOP SLAVE;

CHANGE MASTER TO
  MASTER_HOST='마스터_IP',
  MASTER_PORT=3306,
  MASTER_USER='master',
  MASTER_PASSWORD='master',
  MASTER_LOG_FILE='mysql-bin.000009',
  MASTER_LOG_POS=2060;

START SLAVE;

SHOW SLAVE STATUS\G      -- 터미널
-- HeidSQL 등 GUI에선: SHOW SLAVE STATUS;
  1. (선택) Slave read-only 강화
UPDATE mysql.user SET super_priv='N' WHERE user <> 'root';
FLUSH PRIVILEGES;
-- 클라이언트 재접속 권장

주의

  • MASTER_LOG_FILE/POS는 Master의 실제 값으로 설정
  • 서버마다 server-id고유해야 함
  • 방화벽/네트워크/계정 권한 점검 필수
profile
개발자 희망자

0개의 댓글