이 블로그는 Web 환경을 이용한 원격 제어 기술에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Raspberry Pi와 Raspberry Pi Pico, ATmega128 보드, Arduino Mega 보드(ATmega2560), WiFi 모듈을 사용 합니다.

raspberry-mysql-php

Raspberry - MySQL
MySQL(MariaDB) - phpMyAdmin 설치하기


  • MariaDB 설치하기
    • MySQL과 MariaDB
      • Maria DB(Database)란?
        • Maria DB는 오픈소스(무료) RDBMS(Relational Database Management System:관계형 데이터베이스)이다.

      • MySQL과의 관계
        • 1995년 Michael Widenius는 오픈 소스 소프트웨어 회사 인 MySQL AB를 설립했으며 곧 데이터베이스 업계의 주요 업체가 되었다. 2008년에 MySQL은 Sun Microsystems에 10억 달러에 인수되고, 2009년에 Oracle은 Sun Microsystems과 MySQL을 인수하였다. MySQL을 인수한 Oracle은 대기업을 위한 유료 데이터베이스인 Oracle Database를 제공하는 업체로 이제까지 MySQL의 중요 정책인 오픈 방식으로 MySQL을 유지하고 발전시키려는 의지에 대한 우려가 있었기 때문에 MySQL의 중요 정책(소스 및 무료)을 계승하기 위하여 Michael Widenius와 일부 개발자가 Oracle를 떠나 MariaDB를 개발하게되었다.

          Miria DB는 MySQL을 개발했던 핵심 개발자들이 MySQL의 소스코드를 그대로 가져와 개발한 것이 이기 때문에 거의 모든 기능이 동일하다.

      • Maria DB와 MySQL의 호환성
        • MariaDB는 핵심 바이너리 구조와 사용하는 프로토콜이 MySQL과 같은 구조이기 때문에 거의 100% 호환성을 가지고 있다.

          클라이언트 API와 통신 프로토콜, 경로, 실행 명령어가 동일하고, 여러 언어에서 연결할때 사용하는 Connector API(JDBC 등..)을 서로 교환해서 사용할수도 있다.

        위 설명과 같이 Maria DB와 MySQL은 거의 100% 호환성 갖고 명령어도 동일하기 때문에 이 페이지에서 명령어 설명시 MySQL 이란 용어를 자주 사용하게 됨을 이해 바랍니다.

    • Raspberry Pi에 MariaDB 설치하기
      • 먼저 시스템 업데이트를 실행한다.
      • sudo apt update

        sudo apt upgrade

      • 아래 명령으로 MariaDB과 php-mysql 모듈을 설치한다.
      • sudo apt install mariadb-server php-mysql -y

      • Apache Web server를 사용 중인 경우 아래 명령으로 Apache2를 다시 시작 한다.
      • sudo service apache2 restart


  • Database와 이용자 생성
    • root로 접속하기
      • root 액세스 권한을 만들기
        • 이제 MariaDB가 설치되어 mysql 명령으로 연결할 수 있다. 그러나 아직 연결 할 수 있는 계정이 없는 상태이기 때문에 먼저 root 액세스 권한을 만들어야 한다.

      • root 사용자의 비밀번호를 정의하고 MariaDB 사용을 시작하기
        • 아래 명령을 실행하여 root 사용자의 비밀번호와 보안 설정을 한다.
        • sudo mysql_secure_installation

          • 아래와 같이 "Enter current password for root (enter for none): " 메세지가 출력되면 Enter Key를 누른다.
          • "Set root password? [Y/n] " 메세지가 출력되면 "Y"를 입력하고 Password를 2번 입력하여 Password를 설정한다.
          • "Remove anonymous users? [Y/n]" 메세지가 출력되면 "Y"를 입력하여 anonymous 이용자를 제거한다.
          • "Disallow root login remotely? [Y/n]" 메세지가 출력되면 "Y" 또는 "n"를 입력하여 원격지에서 root의 로그인 허용 여부룰 설정한다.
          • "Remove test database and access to it? [Y/n]" 메세지가 출력되면 "Y" 또는 "n"를 입력하여 Test database 삭제 여부룰 결정한다.
          • "Reload privilege tables now? [Y/n]" 메세지가 출력되면 "Y"를 입력하여 DB의 사용 권한을 다시 로드 한다. DB의 사용 권한이 다시 로드 되면 root 사용자가 로그인 할 수 있는 상태가 된다.
        • root로 접속하기
          • 아래 명령으로 MySQL server를 실행한다.
          • sudo mysql 또는

            sudo mysql -u root -p

            기본적으로 root 사용자는 socket을 통하여 연결하기 때문에 Password 없이 연결 할 수 있다.

          • 필요한 경우 앞에서 설정한 Password를 입력하면 MySQL server가 실행되고 아래 예와 같은 MySQL queries를 사용 할 수 있다.
            • SHOW DATABASES;
            • USE <database>:;
            • SHOW TABLES;
            • SELECT * FROM <table>;
            • UPDATE, INSERT, DELETE, …
            • quit 명령으로 Mysql Query를 중단한다.
            • 주의: MySQL queries의 끝에 ";" 문자를 사용하여야 queries 가 실행됨.

    • Mariadb의 재 설치
      • Mariadb의 설치 시 잘못 등 이유로 Mariadb를 재설치 또는 설정을 삭제(Clear) 하여야 한는 경우가 발생한다.

      • 다음 명령으로 재 설치 할 수 있다. Database는 미리 Backup 하여야 한다.
      • sudo apt install --reinstall mariadb-server

      • Database 가 빈 상태인 경우, 설정을 완전히 삭제하고 다시 설치하고자 하는 경우 아래와 같이 실행한다.
      • sudo apt purge mariadb-server

        sudo apt purge mariadb-common

        sudo rm -rf /var/log/mysql

        sudo rm -rf /var/log/mysql.*

        sudo rm -rf /var/lib/mysql/

        sudo rm -rf /var/etc/mysql/

        sudo apt install mariadb-server

    • 새 사용자 생성하기
      • 아래 명령을 사용하여 root 권한으로 MySQL server를 실행한다.
      • sudo mysql -u root -p

      • 아래 명령으로 새 Database를 생성한다.
      • CREATE DATABASE <dbname>;

      • 아래 명령으로 새 사용자를 생성한다.
      • CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';

      • 아래 명령으로 새 사용자가 Database를 사용 할 수 있는 모든 권한을 부여한다.
      • GRANT ALL PRIVILEGES ON <dbname>.* TO '<username>'@'localhost';

      • 아래 명령으로 Database 사용 권한(permissions)을 다시 로드(Load) 하고,
      • FLUSH PRIVILEGES;

      • 아래 명령으로 새 사용자가 DB에 정상으로 접속 할 수 있는지 확인한다.
      • sudo mysql -u <username> -p

  • Database 관리와 설정에 phpMyAdmin 사용하기
    • mysql 명령으로 Database 관리와 설정을 수행 할 수 있지만 MySQL 언어를 모른다면 쉬운 일이 아니다. 무료로 사용 할 수 있는 phpMyAdmin은 MySQL console 명령을 사용하지 않고 GUI 환경에서 아래에서 Database 관리와 설정을 수행 할 수 있다.

    • phpMyAdmin 설치하기
      • 아래 명령을 사용하여 root 권한으로 phpMyAdmin를 설치한다.
      • sudo apt install phpmyadmin

      • phpMyAdmin을 설치 도중에 아래와 같이 Web server 를 선택하라는 메세지가 출력되면 Apache2를 선택하고 Enter Key를 입력한다.
      • Web server 를 선택하는 메세지 창

      • 계속하여 아래와 같이 phpMyAdmin의 Database를 dbconfig-common으로 설정 여부를 선택하는 메세지가 출력되면 "예"를 선택하고 Enter Key를 입력한다.
      • phpMyAdmin의 Database를 dbconfig-common으로 설정 여부를 선택하는 메세지 창

      • 계속하여 아래와 같이 phpMyAdmin에서 사용할 MySQL 응용 프로그램의 암호를 입력는 메세지가 출력되면 암호를 입력한다.
      • MySQL 응용 프로그램의 암호를 입력하는 메세지 창


    • PHPMyAdmin 사용자를 위한 새로운 DB 사용자 계정을 생성하고 phpMyAdmin에 연결(로그인)하기
      • PHPMyAdmin 사용자를 위한 새 DB 사용자 생성하기
      • PHPMyAdmin는 기본적(Default)으로 "root" user로 Logging 하는 것을 금지하기 때문에 PHPMyAdmin 사용자를 위한 새 사용자를 아래와 같이 생성하여야 한다.

        아래 명령을 사용하여 MySQL를 실행한다.

        sudo mysql -u root -p

        아래와 같은 MySQL 명령을 사용하여 새 사용자를 생성하고 권한을 부여한다.

        create user 'phpmyadmin'@'localhost' identified by 'your_password';

        grant all privileges on *.* to 'phpmyadmin'@'localhost';

        FLUSH PRIVILEGES;

        exit;

        주: 윗 예는 새 사용자 이름을 "phpmyadmin"으로 생성한 경우의 예이다.

        주: 윗 예는 보안을 위하여 localhost Host에서만 접속할 수 있도록 하는 예이다. 만약 외부의 임의의 Host에서 연결 가능하게 하기 위하여는 아래와 같이 설정하여야 한다.

        create user 'phpmyadmin'@'%' identified by 'your_password';

        grant all privileges on *.* to 'phpmyadmin'@'%';

        FLUSH PRIVILEGES;

        exit;

      • PHPMyAdmin 사용가능 하도록 Apache의 Configuration(apache2.conf) 변경하기
      • 아래 명령으로 nano 편집기를 실행하고 /etc/apache2/apache2.conf 파일을 Open 한다.

        sudo nano /etc/apache2/apache2.conf

        nano 편집기로 apache2.conf 파일의 맨 아래줄에 아래와 같은 Include 문을 삽입한다.

        Include /etc/phpmyadmin/apache.conf

        Exit 명령(CTRL + X)을 실행하고, 파일을 저장하도록 "Y" Key를 누른 다음 저장하는 파일 이름이 출력된 상태에서 "Enter" Key를 입력한다.

      • 아래 명령을 사용하여 PHP MySQLi extension을 Enable 하고 Apache2를 다시 시작한다.
      • sudo phpenmod mysqli

        sudo service apache2 restart

      • 아래 명령을 사용하여 phpMyAdmin의 Hard link을 /var/www/html/에 만든다.
      • sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

        • Link를 해제(제거)하는 명령 예는 아래와 같다.
        • sudo unlink phpmyadmin

      • 아래 명령을 사용하여 phpMyAdmin가 정상으로 Link 되었는지 확인한다.
      • /var/www/html $ ls

      • 아래 명령을 사용하여 Raspberry Pi’s IP Address를 확인한다.
      • hostname –I

      • Web 브라우저를 이용하여(예: 192.168.0.15/phpmyadmin/) phpMyAdmin에 연결 한다. 정상으로 연결되면 브라우저에 아래와 같은 페이지가 출력된다.
      • phpMyAdmin 페이지 예

      • "사용자명"과 "암호"를 입력하고 phpMyAdmin에 정상적으로 로그인되면 아래 그림과 같은 페이지가 출력된다.
      • phpMyAdmin 페이지 예

        이제 LAMP(Linux, Apache, MySQL, PHP)와 phpMyAdmin 설치가 완료되었기 때문에 인터넷 연결을 통하여 Wev server와 Database를 관리하고 이용 할 수 있다.


    • 외부에서 인터넷으로 phpMyAdmin에 접속 하기
      • 인터넷 공유기 관리 도구를 이용하여 포트포워드 설정을 한다. 인터넷 공유기 포트포워드 설정은 아래 자료를 참고하기 바람.
      • 참고자료: Web server에 외부에서 인터넷으로 접속 하기

      • 외부(원격지)에서 Raspberry Pi Web page의 phpMyAdmin에 접속하기
        • 포트포워드 설정에서 외부 포트 번호: 3680, 내부 포트 번호: 80로 설정 한 경우 웹 브라우저에서 접속하기 위한 웹 주소(URL)는 "Host IP address:3680"이 된다. 내부 포트 번호를 80으로 설정한 경우에는 내부 포트 번호를 생략할 수 있다.
        • 위에서 phpMyAdmin의 Hard link을 Website root directory(/var/www/html/)에 phpmyadmin로 설정하였기 때문에 phpMyAdmin에 접속하기 위한 웹 주소(URL)는 "Host IP address:3680/phpmyadmin"이 된다.
        • 만약 Host IP address가 "myweb.iptime.org" 인 경우 웹 브라우저에서 접속하기 위한 웹 주소(URL)는 아래 예와 같다.
        • myweb.iptime.org:3680/phpmyadmin


  • phpMyAdmin을 이용하여 Database 만들기
    • Database 만들기
      • phpMyAdmin을 연결한다.
      • 아래 예와 같이 "데이터베이스"를 선택하고, "새 데이터베이스" 창에 데이터베이스 이름(phpAdminTestDb)을 입력하고 정렬 방식을 선택(보통 utf8_general_ci를 선택) 하고 "만들기"를 클릭한다.
      • 새 데이터베이스 만들기 창 예

        새 데이터베이스가 만들어진 다음에는 아직 테이블이 하나도 없기 때문에 아래와 같이 새 테이블 만들기 창이 열린다.

    • 새 Table 만들기
      • "새 테이블 만들기" 창에서 테이블 이름(nameTable)과 컬럼(Column: 4) 수를 입력하고 "실행"을 클릭한다.
      • "새 테이블 만들기" 창 예

      • 컬럼(Column) 이름과 속정 정의하기
        • 새 테이블이 만들어 지면 계속하여 테이블의 컬럼 이름과 속성을 설정하는 아래와 같은 창이 열린다. 이 창에서 아래 와 같이 컬럼 이름(id, name, TelNo, address)과 속성을 설정한다.
        • 테이블의 컬럼 이름과 속성을 설정하는 창 예

          윗 예에서 "id"는 각 레코드(Record)를 구분하는 고유한 정수(Primary key)로 새로운 레코드가 입력되면 자동으로 1씩 증가(Auto increment)하는 속성을 갖도록 설정하였다.

      • 테이블에 새 데이터 입력 하기: 아래와 같이 "삽입"을 선택하여 삽입 창을 열고 각 칼럼에 필요한 테이터를 입력하고 "실행"을 클릭한다.
      • 새 데이터 입력 창 예

      • "보기"을 선택하여 테이블 보기 창을 열면 테이블에 입력된 테이터를 확인 할 수 있다. 아래 예에는 3개의 레코드(3명의 이름과 전화번호, 주소)가 입력된 경우이다.
      • 테이블 보기 예

      이 페이지에서는 phpMyAdmin을 이용하여 새로운 데이터베이스와 테이블을 만드는 기본적인 예를 설명하였다. 그러나 실제 데이터베이스를 만들고 이용하기 위하여는 데이터베이스 설계와 SQL에 대한 이해를 필요로 한다.

      참고자료: MySQL Tutorial