MySQL または MariaDB データベースを準備する

MySQL または MariaDB データベースを準備する

MySQL または MariaDB データベースを準備する

IoTウェブサーバーHTTP POST IoT Web サーバーMySQL データベース。 IoTウェブサーバーPHP言語 IoT Webサーバー

データベースサーバーを構成する

サービスセットがインストールされたら LAMP, WAMP, MAMP o XAMPP シリーズの最初の記事で説明したように、または対応するサービスを実装するアプリケーションの合計をサーバーとして機能するマシンにインストールした後、データベース サーバー構成のいくつかの側面を調整する必要があります。 MySQL また、モノのインターネット デバイスからのデータを保存するために Web サーバーで使用されるデータベースとテーブルを作成します。

パブリックサーバーが使用されている場合、プロバイダーは操作のセキュリティを強化するために、ユーザーとデータベースの「実際の」構成の間を仲介する何らかのパネルを確実に提供しているはずです。 その場合は、このプロバイダーが提供する手順を参照する必要があります。 サードパーティの施設でホストされている実サーバーまたは仮想サーバーの場合、プロバイダーが管理する場合に同様の状況が発生する可能性があります。 非管理対象サーバー(プロバイダー、ユーザー管理)を契約している場合は、以下の情報が適用されます。

重要なのはデータベース管理者に与えなければならない指示を知ることであり、プロジェクトの対象となるモノのインターネットのデバイスをサポートする手段として使用されていることが理解されているため、おそらくそうかもしれません。データベース サーバー自体での作業は時々行われるため、コンソールを使用するだけで十分です。 管理作業負荷が増加し始めた場合は、サーバー自体でマネージャーを使用する方が便利であるため、価値があるかもしれません。 phpMyAdminの (Web ブラウザから)またはローカルで、もちろんデータベース サーバーにアクセスしますが、次のような管理者が必要です。 MySQLワークベンチ 高度なパフォーマンスを行うには GUI これから説明する操作や、この記事では取り上げない他の多くの操作については、シリーズ全体で説明する価値があります。

MySQL Workbench 管理パネル

で実行できる多かれ少なかれ自動操作に加えて、 MySQLワークベンチ サーバー、データベース、またはテーブル上で完全なスクリプトまたは独立したコマンドを作成して実行することにより、タスクを「手動」で実行することも可能です。 SQL。 ツールと同じ MySQLワークベンチ, SQL には別の章が必要であり、実行される IoT Web 作業の一部で、 バックエンド ここで説明されている以上です。

MySQL ワークベンチ SQL クエリ エディター

いずれの場合でも、もちろん、処理中の IoT データベースの必要な構成を解決するために、コンソールを使用できます。

メインの MySQL 管理者である root を構成する

データベース サーバーが独自のマシン上にある場合、最初に行うことは、これらの権限を使用して他のユーザー (その権限を持つユーザー)、および該当する場合はデータベースとテーブルを作成できるようにサービス管理者権限を構成することです。モノのインターネット システムが必要とする情報を保存する場所。

一連のサービスまたはサーバーのインストール プロセスに注意を払うことが重要です MySQL多くの場合、インストーラ自身がこの手順やその他の手順の実行を担当し、構成を変更する場合を除いてこれらの手順を繰り返す必要はありません。

これらのタスクを実行するには、通常、コンソールを使用して作業します。 MySQL 管理者として。 このモードにアクセスするには、次のコマンドを使用します mysql -u root -p o sudo mysql -u root 初めて使用する場合、インストール中にユーザーが設定されていない場合 root

コンソールから MySQL root ユーザーを構成する

注文に応じて 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 ファイル (etc 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; これにより、データベース「temperature_database」が現在存在しない場合にのみ作成されます。

テーブルを作成する

異なるデータベースには同じ名前のテーブルが存在する可能性があるため、次のようにその名前の前にデータベースの名前を付け、両方をピリオドで区切ることで、そのうちの XNUMX つを参照できます。 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 ノードによって取得された情報を保存する準備がすべて整います。 この一連の記事の焦点はメンテナンスではありませんが、対処することが重要な管理上の重要な問題が XNUMX つあります。それはバックアップです。 ほとんどのマネージャーからは、 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 「polaridad.es」はデータベースサーバーの名前です。
--port 3306 「3306」はサーバーがリッスンするポート番号です (デフォルトでは 3306)
--user pelaez 「pelaez」はデータベースにアクセスするユーザーの名前です。
--password 1234 「1234」はデータベースにアクセスするユーザーのパスワードです。
--database temperaturas 「tempers」はバックアップされるデータベースの名前です。
--no-locks コピー中にデータベースをロックしないでください (デフォルトではロックされます)。
--build-empty-files 空のテーブルもコピーします
--compress-input 入力を圧縮する
--compress 出力 (結果として得られるバックアップ) を圧縮します。

で取得したバックアップを復元するには mydumper 使用されています myloader これは主に次のオプションと一緒に使用され、スペースで区切って同じ順序で含める必要があります。

--host polaridad.es 「polaridad.es」はデータベースサーバーの名前です。
--port 3306 「3306」はサーバーがリッスンするポート番号です (デフォルトでは 3306)
--user pelaez 「pelaez」はデータベースにアクセスするユーザーの名前です。
--password 1234 「1234」はデータベースにアクセスするユーザーのパスワードです。
--directory=copia_iot «iot_copy» は、 で生成されたコピーが置かれているフォルダーです mydumper
--overwrite-tables テーブルがすでに存在する場合でも上書きします
--verbose 3 「3」はプロセスの情報の度合い(高いほどメッセージが多くなります)
-C データストリームで圧縮を使用する

このシリーズの次 (そして最後の) 記事で説明します。 PHP プログラミング言語を使用して、モノのインターネットに接続されたデバイスによって取得された情報をデータベースに保存する方法 このテキストで話されているもの。

コメントを投稿

見逃したかもしれません