본문 바로가기
DataBase

DataBase + WEB 서버 구성 (MySQL, PHP, WordPress)

by Nirah 2022. 12. 7.

목록

 

WordPress 5.9.2

MySQL 5.7

PHP 7.3 

 

 

많은 실습 책에서 WEB와 DB를 한 곳에 구성하는데, 실제로는 따로 떨어뜨려서 구성한다.

실제로는 아래와 같이 3티어 구조로 구성한다.

 

 

<< WEB 3Tier 구조>>

 

       LoadBalancer            <----- Bastion <------ (외부 사용자가 베스쳔에 접속해서 WEB를 제어한다)

WEB                  WEB

       LoadBalancer   

WAS                  WAS

DB                     DB(R)

 

 

 

그러나 실습할 때 3Tier 구조로 구성하면 어렵기 때문에 일단 2Tier 구조를 구성해보도록 한다.

 

 

<< WEB 2Tier 구조>>

 

          LoadBalancer            <----- Bastion <------ (외부 사용자가 베스쳔에 접속해서 WEB를 제어한다)

WEB+WAS      WEB+WAS

          LoadBalancer   

  DB                        DB(R)

 

 

 

 

 

 

 

설치

 

 

선행 환경

 

IP 설정

반드시 SElinux Disabled

 

 

 

php 설치

 

# yum install epel-release yum-utils

 

php를 그냥 설치하면 호환성 없는 5.4 버전이 설치돼서 이렇게 별도 리포지토리를 받아 설치해야한다.

아래 리포지토리가 다운로드가 안된다면 1.https  2.wget  3.reboot  세 방법 중에 하나는 될 것이다.
# yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm

 

php 활성화 (yum-conifg-manager 로 php 버전 지정 )

# yum-config-manager --enable remi-php74

 

# yum install php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysqlnd

 

 

 

 

MySQL 설치

 

이것은 centOS7-2 머신만

# yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

 

 

 

mysql-community 설치

 

mysql 커뮤니티를 설치하려고 하면GPG-KEY 오류가 뜬다.

아래와 같은 선행 설정을 먼저 해야한다.y

5.7버전만 gpgkey를 0으로 설정해 사용 안해도 되지만 잘 모르겠으면 모든 gpgkey 항목을 0으로 해본다.

 

# vi /etc/yum.repos.d/mysql-community.repo

위처럼 직접 vi 편집기로 들어가서 수정해줘도 되지만!

sed -i '35s/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/mysql-community.repo

이런 명령어 한 줄이면 사실 자동으로 vi 편집기 내의 항목을 수정해줄 수 있다.

나중에 스크립트를 만들 때 vi편집기를 쓰지 못하므로 이러한 명령어는 기억해두었다가 쓰자.

 

CentOS7-1

WEB 서버니까 client만 설치

# yum install -y mysql-community-client

 

CentOS7-2

Server 버전만 설치해도 Client는 자동으로 설치된다.

# yum install -y mysql-community-server

 

 

 

 

 

방화벽

 

# firewall-cmd --permanent --add-port=3306/tcp
# firewall-cmd --reload

# systemctl start mysqld

 

# systemctl restart mysqld

 

 

 

 

 

 

비밀번호 설정

 

초기 비밀번호 확인

# cat /var/log/mysqld.log | grep password

 

초기 보안 설정

# mysql_secure_installation

 

기본적으로 다 y을 선택했으나, 루트 계정을 쓸 것이므로 그 항목만 n을 선택했다.

  1. 현재 Password 입력
  2. 바꿀 Password 입력 
  3. Change the password for root? y # root의 비밀번호를 바꿀지 선택
  4. 바꿀 Password 입력
  5. Do you wish to continue with the password provided? y #비밀번호를 변경할건지 선택
  6. Remove anonymous users? y # anon users를 지울건지 선택
  7. Disallow root login remotely? n # root 원격 접속을 차단할건지 선택
  8. Remove test database and access to it? y # test db를 지울건지 선택
  9. Reload privilege tables now? y # 지금까지 설정한 권한 정보를 적용할건지 선택

 

 

 

===========================================================================

 

MySQL 기본 명령어

 

Database 목록 보기
> show databases;


Database 생성하기
> create database [DB 이름];

 

Database 삭제하기
> drop database [DB이름];

 

사용할 Database 선택
> use [DB이름];

 

사용자 계정 조회
> select user, host from mysql.user;

 

사용자 계정 생성

userid와 password는 원하는 값으로 설정.
host는 접속 클라이언트의 주소.('%'를 지정하면 anywhere)
> create user 'userid'@'host' identified by 'password';

 

사용자 계정 권한 부여

all은 insert, select, delete, update 등으로 바꿀 수 있다. 
여러 개 지정시 콤마로 분리하여 한꺼번에 지정하면된다.
[DB이름].[Table이름]은 wildcard(*)를 사용할 수 있다. (*, *.*, db_name.*, ... )
보안상의 이유로 일반 사용자 계정은 [DB이름].* 이상의 권한을 주지 않도록 한다.
> grant all privileges on [DB이름].[Table이름] to 'userid'@'host';

사용자 권한 확인
>  show grants for 'userid'@'host';


사용자 권한 삭제
> revoke all on [DB이름].[Table이름] from 'userid'@'host';

 

사용자 계정 삭제
> drop user 'userid'@'host';

 

권한 변경사항 적용
> flush privileges;

 

 

 


MySQL 자주 사용하는 명령어

 

root 권한으로 mysql 콘솔 실행
# mysql -u사용자 -p패스워드

 

database 조회
mysql> show databases;

 

database 선택
mysql> use database;

 

현재 등록된 사용자 조회
mysql> use mysql;
mysql> select user, host from user;

 

사용자 추가
mysql> create user userid@localhost identified by 'password';
mysql> create user 'userid'@'%' identified by 'password'; 
%는 wildcard의 의미로서 any host로부터의 접속을 허용.

 

사용자 삭제
mysql> drop user 'userid';
DB에 대한 사용자 권한 부여

 

모든 권한 부여
mysql> grant all privileges on dbname.table to userid@host identified by 'password';

GRANT ALL ON *.* TO 'was'@'localhost' IDENTIFIED BY 'Was12345!' WITH GRANT OPTION;

mysql> flush privileges;  

 

특정 권한 부여
mysql> grant select, insert, update on dbname.table to userid@host identified by 'password';
mysql> flush privileges; dbname.table 대신에 
dbname.*을 지정하면 db의 모든 테이블에 대한 권한 설정.

 

권한 삭제
mysql> revoke all on dbname.table from userid@host;
mysql> flush privileges; 

 

권한 조회
mysql> show grants for userid@host;

 

DB에 insert into 문을 사용하여 데이터 추가

(예를 들어 3zoDB DB에 use로 들어가서 member테이블을 만들고 그 안에 데이터를 입력하려면)

insert into member values('1','shr','sonharin','01092835244','seoul');

 

테이블 내 데이터 확인

(member 테이블의 경우 예시)

select * from member;

 

===========================================================================

 

 

MySQL 접속

 

mysql 을 root 권한으로 접속

# mysql -uroot -pIt12345!

 

 

현재 존재하는 db 조회

> show databases;

 

db 생성

> create database testdb;

> create database member;

db 삭제

> drop database testdb;

 

 

권한 부여

 

testdb 이름의 db에 모든 권한을 부여 : root 사용자면 누구든지(%) 설정한 비번으로 접근 가능

> grant all privileges on testdb.* to 'root'@'%' identified by 'It12345!';

 

testdb 이름의 db에 모든 권한을 부여 : localhost 라는 사용자가 root 로그인하여 설정한 비번으로 접근 가능

> grant all privileges on data.* to 'root'@'localhost' identified by 'It12345!';

 

모든 db에 누구나 모두 접근 가능하게 설정

> grant all privileges on *.* to 'root'@'%' identified by 'It12345!';

위의 세가지 예시를 보고 적절한 것을 수정해서 쓰면 된다.

접근 권한 적용

> flush privileges;

 

# systemctl restart mysqld

 

 

접속 테스트

여기 까지만 설정 하면  CentOS7-1(10.0.0.1) 에서 db(10.0.0.2) 원격 접속이 가능해 진다.

mysql -uroot -pIt12345! -h 10.0.0.2

 

 

db 접속

table을 db안에 만들어 주기 전에 먼저 해당db에 접속해야 한다.

>use member;

 

Table 생성

 

괄호 안의 숫자는 해당 항목에 할당할 용량(바이트)를 제한하는 것이다.

 

create table member(
no int not null,
id varchar(20) not null,
name varchar(20) not null,
phone varchar(15) not null,
address varchar(100) not null);

 

Table 조회

show tables;

테이블 칼럼(속성) 조회

테이블이 잘 만들어 졌는지 세부 사항을 확인하기 위한 과정.

desc member;

 

DB에 insert into 문을 사용하여 데이터 추가

(예를 들어 3zoDB DB에 use로 들어가서 member테이블을 만들고 그 안에 데이터를 입력하려면)

insert into member values('1','shr','sonharin','01092835244','seoul');

 

 

 

테이블 내 데이터 확인

(member 테이블의 경우 예시)

select * from member;

 

 

 

유저 인증 정보 조회

 

유저의 인증 정보는 mysql db에 접근해서 봐야한다.

use mysql;

show tables;

아래 명령어를 사용하여 원하는 유저 정보만 불러올 수 있다.

select host,user,authentication_string from user;

사실 mysql db에 접근 안해도 아래 명령어로 한 번에 조회 가능하다.

select host,user,authentication_string from mysql.user;

 

 

 

 

 

PHP 파일 준비

 

Host (실제) PC에서 설정

아래와 같이 html로 DB와 WEB을 어떻게 이어줄 지 설정한 파일을 구비한다.

해당 파일을 직접 수정하거나 작성할 때 주의할 점은

메모장이나 워드패드로 저장할 때 ANSI 파일 형식은 리눅스에서 인식 불가 하기 때문에

(메모장 기준 왼쪽 아래) 파일 형식을 확인해보고, UTF-8 형식으로 저장해야 한다.

 

주소를 알맞게 수정해준다.

 

index.html
0.00MB
person1.php
0.00MB
table1.php
0.00MB
insert1.php
0.00MB

 

 

리눅스의 원하는 위치로 복사시킨다.

scp Desktop\index.html root@10.0.0.1:/var/www/html/index.php

scp Desktop\insert1.php root@10.0.0.1:/var/www/html/

scp Desktop\person1.php root@10.0.0.1:/var/www/html/

scp Desktop\table1.php root@10.0.0.1:/var/www/html/

(사실 이거 한번만 쳐도 된다: scp .\*.php root@10.0.0.1:/var/www/html/)

그냥 리눅스에 파일 가져온 후 리눅스 안에서 아래 명령어를 이용하여 일괄적으로 ip 값을 수정해 줄 수도 있다.

html 디렉터리 안의 모든 php 파일 내부에 1.0.0 값을 10.0.0 으로 변경

# sed -i 's/1.0.0/10.0.0/' /var/www/html/*.php

 

 

 

 

 

Httpd 설정

 

WEB 서버인 CentOS1 (10.0.0.1) 에서 설정한다.

사실 위에서 올린 index.html 파일은 원래 확장자가 php인데 이름만 바꾼 것이다.

원래 확장자인 php를 WEB 서버가 읽도록 164줄을 다음과 같이 설정하자.

 

# vi /etc/httpd/conf/httpd.conf

 

httpd 시스템 시작 및 방화벽 오픈

# systemctl restart httpd

# firewall-cmd --add-port=80/tcp

 

 

아래와 같이 연결이 성공하였다!

 

 

 

10.0.0.1/person1.php 로 접속하면 회원가입 페이지가 뜬다. 가입을 해보자.

그 다음 아래와 같이 테이블 조회 클릭하면 회원 가입을 진행하여 저장된 데이터가 출력된다.

 

 

 

 

WordPress

 

Wordpress로도 웹 페이지를 구성할 수 있다.

 

다운로드 및 설정

# yum install -y httpd
# yum install -y wget

 

아래 링크가 작동하지 않는 경우 직접 공식 사이트로 들어가 링크주소를 따 오자.

https://ko.wordpress.org/download/
wget https://ko.wordpress.org/wordpress-5.8.6-ko_KR.tar.gz

tar -zxvf wordpress-5.8.6-ko_KR.tar.gz

 

wordpress 디렉터리를 html 하위 디렉터리로 복사

# cp -r wordpress/ /var/www/html/

 

wordpress 설정파일 복사하여 수정

# cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
# vi /var/www/html/wordpress/wp-config.php 

 

 

DB_name : wordpress

DB_user : root

DB_password : It12345!

DB_host : 10.0.0.2

 

systemctl restart httpd

 

 

 

 

Host PC 에서

10.0.0.1/wordpress

데이터 베이스 연결을 구축하는 중 이라고 오류가 뜬다 (php는 정상 동작하는 것)

 

centos7-1 에서

mysql -uroot -pIt12345! -h 10.0.0.2

> create database wordpress

 

 

Host PC에서

10.0.0.1/wordpress

이제 사이트 구축 화면이 출력 된다.

필수 정보 입력 후 워드프레스 설치 -> 로그인 

 

이렇게 하면 가입한 유저의 정보가 10.0.0.2/wordpress db에 저장된다.

 

 

'DataBase' 카테고리의 다른 글

Access denied for user @localhost 트러블슈팅 MariaDB  (0) 2023.03.16
mysql, mariadb bind-address 위치  (0) 2023.03.15
MariaDB 10.11 설치  (0) 2023.03.14
mysql 현재시간표시  (0) 2023.03.12