MySQL 또는 MariaDB 데이터베이스 준비

MySQL 또는 MariaDB 데이터베이스 준비

MySQL 또는 MariaDB 데이터베이스 준비

IoT 웹 서버HTTP POST IoT 웹 서버MySQL 데이터베이스. IoT 웹 서버PHP 언어 IoT 웹 서버

데이터베이스 서버 구성

서비스 세트가 설치되면 LAMP, WAMP, MAMP o XAMPP 시리즈의 첫 번째 기사에서 설명한 것처럼 또는 해당 서비스를 구현하는 애플리케이션의 총합을 서버 역할을 할 시스템에 설치한 후에는 데이터베이스 서버 구성의 일부 측면을 조정해야 합니다. MySQL의 사물 인터넷 장치의 데이터를 저장하기 위해 웹 서버에서 사용할 데이터베이스와 테이블을 생성합니다.

공용 서버를 사용하는 경우 공급자는 작업 보안을 강화하기 위해 사용자와 데이터베이스의 "실제" 구성 사이를 중재하는 일종의 패널을 제공했을 것입니다. 그렇다면 이 공급자가 제공하는 지침을 참조해야 합니다. 제3자의 시설에서 호스팅되는 실제 또는 가상 서버의 경우, 공급자가 이를 관리할 때 비슷한 상황이 발생할 수 있습니다. 관리되지 않는 서버를 계약(제공자, 사용자가 관리)한 경우에는 다음 사항이 적용됩니다.

중요한 것은 데이터베이스 관리자에게 주어야 할 지시사항을 아는 것이고, 이는 프로젝트의 대상이 될 사물인터넷을 위한 장치를 지원하기 위한 수단으로 사용되고 있는 것으로 이해되므로, 데이터베이스 서버 자체의 작업이 가끔씩 발생하므로 콘솔을 사용하는 것으로 충분합니다. 관리부하가 늘어나기 시작하면 대중적으로 사용되는 서버 자체에 관리자를 두는 것이 더 편리하기 때문에 그만한 가치가 있을 수 있습니다. phpMyAdmin을 (웹 브라우저에서) 또는 로컬로(물론 다음과 같은 관리자와 함께 데이터베이스 서버에 액세스) MySQL 워크 벤치 고급 단계에서 수행할 수 있는 것 GUI 설명할 작업과 이 기사 외부에 있는 다른 많은 작업과 전체 시리즈를 다룰 가치가 있는 작업에 대해 설명합니다.

MySQL 워크벤치 관리 패널

다음과 같이 수행할 수 있는 어느 정도 자동 작업 외에도 MySQL 워크 벤치 서버, 데이터베이스 또는 테이블에서는 전체 스크립트 또는 독립적인 명령을 작성하고 실행하여 "수동으로" 작업을 수행할 수도 있습니다. SQL. 도구와 동일 MySQL 워크 벤치, SQL 별도의 장이 필요하며 수행되는 IoT 웹 작업의 일부가 IoT에 더 심각한 관심을 포함하는 경우 심층적으로 알아야 합니다. 백엔드 여기에 설명된 것보다.

MySQL Workbench SQL 쿼리 편집기

어떤 경우든 처리 중인 IoT 데이터베이스의 필수 구성을 해결하기 위해 콘솔을 사용할 수 있습니다.

기본 MySQL 관리자인 루트 구성

데이터베이스 서버가 자체 머신에 있는 경우 가장 먼저 해야 할 일은 해당 권한을 사용하여 다른 사용자(이러한 권한을 가질 수 있음) 및 해당하는 경우 데이터베이스와 테이블을 생성할 수 있도록 서비스 관리자 권한을 구성하는 것입니다. 사물 인터넷 시스템에 필요한 정보를 저장하는 곳입니다.

서비스 세트 또는 서버의 설치 ​​프로세스에 주의를 기울이는 것이 중요합니다. MySQL의, 따라오는 프로세스에 따라 대부분의 경우 설치 프로그램 자체가 이 단계 및 기타 단계를 수행할 책임이 있으며 구성을 수정하려는 경우를 제외하고는 이 단계를 반복할 필요가 없기 때문입니다.

이러한 작업을 수행하려면 일반적으로 콘솔을 사용하여 작업합니다. MySQL의 관리자로서. 이 모드에 액세스하려면 다음 명령을 사용하십시오. mysql -u root -p o sudo mysql -u root 처음 사용하고 설치 중에 사용자가 구성되지 않은 경우 root

콘솔에서 MySQL 루트 사용자 구성

주문에 들어감 mysql -u root -p 옵션으로 표시 -u 사용자 이름(root) 그리고 옵션으로 -p (비밀번호) 콘솔에 접근할 때 키를 요청해야 한다는 것 MySQL의. 시스템 콘솔로 돌아가려면 다음 명령을 사용할 수 있습니다. quit 외출하다

위 스크린샷에서 볼 수 있듯이 콘솔을 떠나기 전에 MySQL의, 사용자의 권한을 설정하려면 root 다음 명령이 사용되었습니다.
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '1234' WITH GRANT OPTION;
그 중:

  • 모든 특권이 부여됩니다 GRANT ALL PRIVILEGES
  • 모든 데이터베이스의 모든 테이블에서 ON *.*
  • 사용자에게 root 서버를 실행하는 머신에서 액세스 MySQL의 TO 'root'@'localhost'
  • 1234를 비밀번호로 사용 IDENTIFIED BY '1234'
  • 다른 사용자에게 권한을 부여할 권한이 있는 경우 WITH GRANT OPTION

데이터베이스를 원격으로 관리하려면 다른 위치에서 해당 사용자에게 권한을 부여해야 합니다. 이전 예에서는 허용되었습니다. root 데이터베이스 서버가 실행 중인 머신에서 액세스됩니다(localhost)와 'root'@'localhost', 사용되는 경우 'root'@'%' 모든 컴퓨터에서 액세스가 허용됩니다.

시스템에 대한 관리자 권한이 있는 경우 사용자 비밀번호를 다시 설정할 수 있습니다. root de MySQL의. 그러기 위해서는 서비스를 중지해야 합니다(mysql o mysqld, 배포판에 따라 다름) 키 없이 부팅하고 새 키를 설정합니다. root 다시 시작하세요. 비밀번호 없이 접근함으로써 위에서 설명한 권한을 부여하는 것도 가능합니다.

  • 서비스를 중지하다 sudo /etc/init.d/mysql stop
  • 던지다 MySQL의 키 없이 콘솔 잠금 해제 sudo mysqld_safe --skip-grant-tables &
  • «로 액세스root» mysql -u root
  • 비밀번호를 변경하세요:
    • 데이터베이스에 액세스하기 «mysql»: USE mysql;
    • «에 할당root» 키 «1234»: UPDATE user SET authentication_string=PASSWORD("1234") WHERE user="root";
    • 새로운 권한을 적용하십시오: FLUSH PRIVILEGES;
    • 콘솔 종료 mysql 시스템으로 돌아갑니다. quit
  • 서비스 다시 시작 sudo /etc/init.d/mysql restart

원격 데이터베이스 액세스 구성

보안상의 이유로 데이터베이스 관리자의 초기 구성은 MySQL의 원격 액세스를 허용하지 않습니다. 이를 변경하려면 일반적으로 구성 문서를 편집해야 합니다. my.cnf, 일반적으로 경로에서 발견됩니다. /etc/mysql.

사용하는 경우 MariaDB, 이제 "더 자유로운" 버전입니다. MySQL의, 물론 my.cnf 에 대한 링크가 될 것입니다 /etc/alternatives/my.cnf 그러면 다음을 사용하여 구성이 로드됩니다. !includedir, 경로 문서에서 /etc/mysql/mariadb.conf.d, 아마도 문서에서 50-server.cnf

데이터베이스 서버가 원격 요청을 처리하지 않기 위해 사용하는 리소스는 특정 위치에서 발생하는 요청만 "수신"하는 것으로 구성됩니다. IP 주소 이는 매개변수의 값으로 표현됩니다. bind-address (클래식을 대체합니다. skip-networking) 주소가 다음과 같은 경우 127.0.0.1 (localhost) 로컬 시스템의 요청만 처리됩니다. 으로 댓글을 달면 # 또는 값이 0.0.0.0, 우리는 모든 주소에 서비스를 제공합니다. 외부 접근을 허용하려면 가장 안전한 방법은 IP 주소 (공개 또는 비공개일 수 있음) 액세스되는 컴퓨터의 일반적으로 다음과 같습니다. bind-address = 192.168.1.74. 귀하의 경우 이 장비는 다음과 같은 역할을 할 수 있습니다. 터널 (다음으로 리디렉션 SSH) 또는 산책로로( 코어 IP 테이블) 네트워크의 통제된 영역 외부에 서버가 노출되는 것을 방지합니다.

my.cnf 파일(mysql 등)을 편집하여 MySQL 데이터베이스 구성

위의 스크린샷을 보면 편집된 것을 볼 수 있습니다. my.cnf 구성으로 MySQL의 주문을 사용하여 sudo nano /etc/mysql/my.cnf. 함께 일하는 경우 MariaDB 일반적인 구성을 사용하면 순서는 다음과 같습니다. sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf. 위에서 언급한 것처럼 관리자 권한으로 액세스하면 GUI 으로 MySQL 워크 벤치 정기적인 데이터베이스 관리를 위해.

데이터베이스 만들기

데이터베이스 서버가 구성되면 IoT 데이터를 저장할 데이터베이스와 테이블을 생성할 수 있습니다. 이렇게 하려면 명령을 사용할 수 있습니다. SQL 콘솔이나 GUI 관리자의.

순서 CREATE DATABASE temperaturas; "온도" 데이터베이스를 생성합니다. 오류를 방지하기 위해 양식을 사용할 수 있습니다. CREATE DATABASE IF NOT EXISTS base_datos_temperaturas; 현재 존재하지 않는 경우에만 "온도_데이터베이스" 데이터베이스를 생성합니다.

테이블 만들기

서로 다른 데이터베이스에 동일한 이름을 가진 테이블이 있을 수 있으므로 해당 이름 앞에 데이터베이스 이름을 붙이고 둘을 마침표로 구분하여 그 중 하나를 참조할 수 있습니다. base_datos.tabla 이 표기법은 필드 이름으로 확장될 수도 있습니다. base.tabla.campo

테이블 작업 시(이 경우 테이블 생성 시) 데이터베이스 이름을 생략하면 마지막으로 선택한 테이블을 참조하는 것으로 간주됩니다. 특정 항목을 명시적으로 선택하려면 다음 명령을 사용할 수 있습니다. USE 그리고 이름을 표시하세요 USE base_datos_temperaturas;

데이터베이스에서 테이블을 생성할 때 동일한 작업으로 테이블을 구성하는 필드의 정보가 일반적으로 추가됩니다(나중에 변경할 수도 있음). 조항을 추가하는 존재하지 않습니다 IF NOT EXISTS 또는 반대로 테이블이 존재하는 경우에만 테이블을 생성하기 전에 삭제하십시오. DROP TABLE IF EXISTS valor_temperaturas;

명령이나 프로시저와 충돌할 수 있는 테이블이나 데이터베이스의 이름을 허용하려면 역쉼표라고도 하는 억음 악센트 표시를 사용하여 이름을 둘러싸 명령에서 충돌이나 오류를 방지할 수 있습니다. SQL.

필드 정의

테이블을 생성할 때 추가되는 필드는 괄호로 묶어서 저장하는 데이터 유형을 나타냅니다. 사물 인터넷에 연결된 장치의 정보를 저장하기 위해 데이터베이스에서 일반적으로 사용되는 데이터 유형은 정수(INT o BIGINT) 소수점 (DECIMAL, DOUBLE o FLOAT)의 시간(DATE, TIME, DATETIME o TIMESTAMP) 및 텍스트(주로 VARCHAR 같은 다른 사람들이 있지만 TEXT 단, IoT에는 사용되지 않음) 데이터 유형 뒤, 괄호 안에 데이터 길이 및 해당하는 경우 형식이나 정밀도가 추가됩니다.

추가하여 AUTO_INCREMENT 필드의 정의는 다른 것이 지정되지 않은 경우 새 레코드를 생성할 때 마지막 값에 해당 증분을 더한 값이 자동으로 저장되어야 함을 데이터베이스 관리자에게 나타냅니다(일반적으로 1). 이는 일반적으로 기록의 숫자 색인으로 사용되는 필드입니다.

코드 NOT NULL 레코드의 필드는 비워둘 수 없으며 일부 값을 저장해야 함을 나타냅니다.

사용시 DEFAULT 테이블의 필드를 생성할 때 표시됩니다. MySQL의 새 레코드를 추가하거나 수정할 때 다른 값이 명시적으로 표시되지 않는 경우 필드의 기본값입니다. 이 경우 IoT 값을 모니터링하기 위해 자주 사용되는 기본값은 다음과 같습니다. CURRENT_TIMESTAMP 새 레코드를 생성할 때 필드에 현재 시간을 자동으로 기록할 수 있으므로 데이터가 자동으로 시간에 따라 식별됩니다.

데이터베이스의 성능을 최적화하려면 테이블 필드 정의 끝에 절과 함께 인덱스로 사용되는 필드를 포함하는 것이 편리합니다. PRIMARY KEY (ID) ID는 인덱스로 선택된 필드입니다.

테이블 정의 마지막에는 해당 테이블을 관리하는 데이터베이스 엔진을 매개변수 값으로 표시할 수 있습니다. ENGINE 형식으로 ENGINE=InnoDB;InnoDB 이번에 선택한 엔진.

SQL 세션에서 데이터베이스, 테이블 생성 및 필드 구성

다음 예제의 코드는 최소 테이블이 있는 데이터베이스를 생성하기 위해 수행해야 하는 단계와 주문을 함께 제공합니다.

데이터베이스의 백업 복사본 만들기

서버가 구성되고 데이터베이스와 해당 테이블이 생성되면 IoT 노드에서 얻은 정보를 저장할 모든 준비가 완료됩니다. 이 기사 시리즈의 초점은 유지 관리를 포함하지 않지만 해결해야 하는 중요한 관리 문제 중 하나가 바로 백업입니다. 다음을 포함한 대부분의 관리자로부터 phpMyAdmin을 y MySQL 워크 벤치, 백업 복사본을 만들고 복원할 수 있지만 이를 자동화하는 스크립트에 포함하는 것이 일반적이므로(구성 및 기타 여러 문서와 함께) 도구를 사용하는 것이 더 편리합니다. MySQL 덤프, 일반적으로 기존 설치의 일부인 클라이언트 MySQL의또는 다음과 같은 대안이 있습니다. MySQL 데이터 덤퍼 주문에는 무엇이 포함되나요? mydumper 복사를 하고 myloader 그것을 복원하기 위해

MySQL 덤프

주문 형식 mysqldump 매우 간단합니다. 사용자 이름만 표시하면 됩니다. user, 비밀번호 password 복사하려는 데이터베이스 또는 --all-databases 다음 예와 같이 모든 데이터베이스를 백업합니다.

mysqldump --opt --user=pelaez --password=1234 --all-databases > copia.sql

이전 예에서는 문서를 생성합니다. copia.sql 주문이 포함된 SQL (예: 텍스트)는 모든 데이터베이스를 재구축하는 데 필요합니다. 텍스트 형식으로 저장하면 복사본이 필요한 것보다 훨씬 더 많은 공간을 차지하므로 일반적으로 복사본이 저장된 장치의 공간을 절약하기 위해 압축됩니다.

예제 명령으로 생성된 백업은 작업을 실행하는 아래 명령의 오류로 인해 정보가 손실된 경우 복원될 수 있습니다. SQL 문서의 copia.sql

mysql --user=pelaez --password=1234 < copia.sql

MySQL 데이터 덤퍼

이전 작업으로 충분하지만 다음을 사용하는 것이 매우 일반적입니다. MySQL 데이터 덤퍼, 에 포함된 기본 도구의 일부는 아니지만 이미 성능에 대한 거의 표준입니다. MySQL의

다음은 옵션입니다. mydumper 가장 많이 사용되는 것은 논리적으로 동일한 명령의 일부로 공백으로 구분하여 작성해야 하지만 이 텍스트에서는 읽기 쉽도록 줄로 구분했습니다.

--host polaridad.es "폴라리다드.es"는 데이터베이스 서버의 이름입니다.
--port 3306 "3306"은 서버가 수신하는 포트 번호입니다(기본적으로 3306임).
--user pelaez "pelaez"는 데이터베이스에 액세스하는 사용자의 이름입니다.
--password 1234 "1234"는 데이터베이스에 액세스하는 사용자의 비밀번호입니다.
--database temperaturas "온도"는 백업되는 데이터베이스의 이름입니다.
--no-locks 복사하는 동안 데이터베이스를 잠그지 마십시오(기본적으로 잠김).
--build-empty-files 빈 테이블도 복사
--compress-input 압축 입력
--compress 출력 압축(결과 백업)

얻은 백업을 복원하려면 mydumper 그것은 사용되었습니다 myloader 이는 주로 다음 옵션과 함께 사용되며 공백으로 구분된 동일한 순서로 포함되어야 합니다.

--host polaridad.es "폴라리다드.es"는 데이터베이스 서버의 이름입니다.
--port 3306 "3306"은 서버가 수신하는 포트 번호입니다(기본적으로 3306임).
--user pelaez "pelaez"는 데이터베이스에 액세스하는 사용자의 이름입니다.
--password 1234 "1234"는 데이터베이스에 액세스하는 사용자의 비밀번호입니다.
--directory=copia_iot «iot_copy»는 생성된 복사본이 있는 폴더입니다. mydumper
--overwrite-tables 테이블이 이미 존재하더라도 덮어쓰기
--verbose 3 "3"은 프로세스의 정보 정도입니다(높을수록 더 많은 메시지).
-C 데이터 스트림에 압축 사용

이 시리즈의 다음(그리고 마지막) 기사에서는 다음을 설명합니다. PHP 프로그래밍 언어를 사용하여 사물 인터넷에 연결된 장치에서 얻은 정보를 데이터베이스에 저장하는 방법 이 텍스트에서 이야기된 내용입니다.

코멘트 남기기

당신은 놓쳤을 수도 있습니다