sql >> データベース >  >> RDS >> Mysql

Ubuntu20.04へのMySQLのインストールと構成

    Ubuntuユーザーは、2つの信頼できるリレーショナルデータベース管理システムから選択できます。 (RDBMS)、 MySQL およびMariaDB 。 MySQLは長年にわたって人気がありますが、パフォーマンス上の利点と追加機能により、MariaDBへの関心が高まっています。このガイドでは、2つのデータベースシステムを比較し、Ubuntu20.04にMySQLをインストールして使用する方法について説明します。

    MySQLとは何ですか?

    MySQL RDBMSは、最も人気のあるオープンソースアプリケーションの1つです。 LAMPスタックの一部です 、これは多くのUbuntuシステムの基礎です。このスタックは、Linux、Apache Webサーバー、MySQL RDBMS、およびPHPプログラミング言語で構成されています。これらのアプリケーションは連携して、Webアプリケーション、ソフトウェア開発、およびデータサイエンスなどの特殊なアクティビティをサポートします。 MySQLの主な用途は、中小規模の単一サーバー構成です。

    MySQLクエリは構造化クエリ言語で記述されています (SQL)。リレーショナルデータベースとして、データをテーブルに格納および整理します。テーブルは、テーブル内の実際のデータを一連の行として構成し、各行は1つ以上の列で構成されます。各行はテーブル内の異なるエントリを表し、各列にはエントリ内に1つのデータフィールドが含まれます。これらのテーブルのデータフィールドは相互に関連付けることができ、これらの関係はデータベースの構造化と編成に役立ちます。特殊なSQLステートメントにより、クライアントはデータを追加、削除、変更、および取得できます。

    MySQLはその安定性と信頼性で知られており、シンプルで使いやすいと考えられています。これは、GNU GeneralPublicLicenseの下で無料のオープンソースソフトウェアとして利用できます。 MySQLは、すべてのLinuxディストリビューションおよびその他のオペレーティングシステムですぐに利用できます。現在、OracleCorporationが所有しています。オラクルは、商用MySQLEnterpriseEditionもハイエンド製品として提供しています。

    MySQLとMariaDB

    2つの主要なオープンソースデータベースの選択肢であるMySQLとMariaDBは、非常によく似ています。どちらもRDBMS製品であり、どちらもSQLを使用しています。どちらのデータベースシステムにも無料バージョンがあり、外観と動作はほとんど同じです。 MariaDBは元々MySQLから分岐していたため、これは驚くべきことではありません。その後、MariaDBはさらに開発され、セキュリティとパフォーマンスに多くの新しい改善が加えられています。ただし、MySQLでは、多くの高度な機能がEnterpriseEditionにのみ存在します。 2つの製品の類似点と相違点の概要は次のとおりです。

    • MariaDBはMySQLよりも多くの接続をサポートしています。
    • MariaDBにはさらに多くのオプションがありますが、どちらのデータベースも複数のストレージシステムで動作できます。
    • MariaDBは、MySQLよりも高速にデータを複製でき、全体的なパフォーマンスが向上します。 MySQLは大規模なトランザクションをより効果的に処理しますが、MariaDBは拡張された状況でより優れたパフォーマンスを発揮します。
    • MySQLは、動的列など、MariaDBにはないいくつかの機能をサポートしています。各データベースには、他のデータベースにはないいくつかの高度な機能と改善点があります。
    • MySQLは古く、確立されており、人気があり、コミュニティのサポートも充実しています。 MySQLは、より包括的な有料サポートプランを提供します。
    • MariaDBとMySQLは完全に互換性があります。
    • どちらの製品もオープンソースですが、MySQLライセンスモデルはより制限されています。

    要約すると、どちらのシステムもほとんどのユーザーにとって十分すぎるほどです。 MariaDBのパフォーマンスは向上していますが、MySQLの確立とサポートは向上しています。

    始める前に

    1. まだ行っていない場合は、Linodeアカウントとコンピュートインスタンスを作成します。 Linode入門とコンピューティングインスタンスの作成ガイドをご覧ください。

    2. コンピューティングインスタンスのセットアップと保護ガイドに従って、システムを更新してください。また、タイムゾーンを設定し、ホスト名を構成し、制限付きユーザーアカウントを作成し、SSHアクセスを強化することもできます。

    注 このガイドの手順は、root以外のユーザーを対象としています。昇格された特権を必要とするコマンドには、接頭辞としてsudoが付けられます 。 sudoに慣れていない場合 コマンドについては、Linuxユーザーおよびグループガイドを参照してください。

    MySQLサーバーのインストール方法

    MySQLはデフォルトのUbuntuパッケージの一部として利用できるため、ソースリストを編集する必要はありません。 aptを使用して簡単にインストールできます 、ただし、アプリケーションを保護し、後でファイアウォールを編集することが重要です。これらの手順はUbuntuユーザーを対象としていますが、通常、MySQLを別のLinuxディストリビューションにインストールしたいユーザーに適用できます。

    MySQLをダウンロード

    MySQLサーバーをUbuntuにインストールするには、以下の手順に従います。

    1. MySQLサーバーアプリケーションをインストールします。

      sudo apt install mysql-server
      
    2. systemctlを使用してMySQLサーバーが実行されていることを確認します 指図。 activeのステータスが表示されます 。

      sudo systemctl status mysql
      
      mysql.service - MySQL Community Server
          Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:>
          Active: active (running) since Thu 2021-09-09 12:24:29 UTC; 1h 44min ago

    LinuxでMySQLサーバーを構成する

    mysql_secure_installation ユーティリティは、アプリケーションを構成する最も簡単な方法です。セットアップスクリプトを使用するには、次の手順に従います。

    1. mysql_secure_installationを起動します ルートパスワードを設定し、他のデフォルトオプションを設定するユーティリティ。

      sudo mysql_secure_installation
      
    2. アプリケーションは、VALIDATE PASSWORD COMPONENTをオンにするかどうかを尋ねます 成分。 yと答えた場合 、次に、パスワード強度をLOWに設定するかどうかを尋ねられます 、MEDIUM 、またはHIGH

      VALIDATE PASSWORD COMPONENT can be used to test passwords
      and improve security. It checks the strength of password
      and allows the users to set only those passwords which are
      secure enough. Would you like to setup VALIDATE PASSWORD component?
    3. 次のプロンプトで、ユーティリティはrootアカウントのパスワードを要求します。パスワードを設定してから再入力してください。

      Please set the password for root here.
      
      New password:
      
      Re-enter new password:
    4. 次の質問は、rootを許可するために、匿名ユーザーを削除するかどうかを尋ねます リモートで接続し、testを削除するためのアカウント データベース。 yと入力します またはn 好みに応じて各プロンプトで。 test データベースは初期検証時に役立ちますが、セキュリティ上の理由から、rootを禁止することをお勧めします アカウントはリモートでログインできません。

      By default, a MySQL installation has an anonymous user,
      allowing anyone to log into MySQL without having to have
      a user account created for them. This is intended only for
      testing, and to make the installation go a bit smoother.
      You should remove them before moving into a production
      environment.
      
      Remove anonymous users? (Press y|Y for Yes, any other key for No) :
      
      Normally, root should only be allowed to connect from
      'localhost'. This ensures that someone cannot guess at
      the root password from the network.
      
      Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
      
      By default, MySQL comes with a database named 'test' that
      anyone can access. This is also intended only for testing,
      and should be removed before moving into a production
      environment.
      
      Remove test database and access to it? (Press y|Y for Yes, any other key for No
    5. プロンプトが表示されたら、privilegeをリロードします データベースを更新するためのテーブル。

      Reloading the privilege tables will ensure that all changes
      made so far will take effect immediately.
      
      Reload privilege tables now? (Press y|Y for Yes, any other key for No)
      y
      
      Success.
      
      All done!
    6. オプション )MySQLにリモートでアクセスするには、MySQLトラフィックがufwを介して許可されていることを確認してください ファイアウォール。次のルールを追加して、ポート3306を開きます ファイアウォール上。リモートアクセスが必要ない場合は、このルールを追加しないでください。

      ufw allow mysql
      
      Status: active
      
      To                         Action      From
      --                         ------      ----
      Apache Full                ALLOW       Anywhere
      OpenSSH                    ALLOW       Anywhere
      3306/tcp                   ALLOW       Anywhere
      Apache Full (v6)           ALLOW       Anywhere (v6)
      OpenSSH (v6)               ALLOW       Anywhere (v6)
      3306/tcp (v6)              ALLOW       Anywhere (v6)

    ルートユーザーとしてMySQLにログインします

    root ユーザーはMySQLデータベースへのフルアクセス権を持っているため、その使用は管理目的で予約する必要があります。これにより、データベースのクリティカルセクションが誤って上書きされる可能性が低くなります。シングルユーザー設定でも、ほとんどのMySQLアクティビティ用に個別のユーザーアカウントを作成する必要があります。

    rootとしてMySQLサーバーにアクセスするには ユーザーを作成し、新しいユーザーアカウントを作成するには、次の手順に従います。

    1. sudo mysqlを使用します データベースにアクセスするコマンド。 MySQLは、ローカルでログインするときにroot資格情報に基づいてrootユーザーを認証するため、パスワードは必要ありません。または、sudo mysql -u root -pを使用してrootアカウントにアクセスします 、rootと一緒に パスワード。

      sudo mysql
      
    2. MySQLは、リリース番号とインストールに関するいくつかの情報を表示してから、MySQLプロンプトを表示します。

      Welcome to the MySQL monitor.  Commands end with ; or \g.
      Your MySQL connection id is 15
      Server version: 8.0.26-0ubuntu0.20.04.2 (Ubuntu)
      ...
      mysql>
    3. MySQLが正しく動作していることを確認するには、SHOW DATABASESを使用します すべてのデータベースを表示するコマンド。

      SHOW DATABASES;
      
      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | mysql              |
      | performance_schema |
      | sys                |
      +--------------------+
      4 rows in set (0.01 sec)
    4. CREATE USERを使用して新しいユーザーを作成します 指図。 'username'@'IP_Address'の形式でユーザー名を入力します 、ここでIP_Address ユーザーのIPアドレスです。ユーザーがローカルLinodeからMySQLにアクセスしている場合は、localhostに置き換えてください IPアドレスの代わりに。以下のコマンドで、mysqluserを置き換えます およびpassword 実際のユーザー名とパスワードを使用します。

      注 MySQLはいくつかの異なる認証メカニズムを提供します。 caching_sha2_password この方法は、パスワードを使用してログインするユーザーに推奨され、ここで使用されます。ただし、特定の古いアプリケーションは、この方法で適切に認証できない場合があります。その場合、mysql_native_password 代わりに使用する必要があります。 MySQLソース-レプリカレプリケーションには、sha256_passwordが必要な場合があります メソッド。
      CREATE USER 'mysqluser'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
      
    5. GRANT PRIVILEGEを使用して新しいユーザーにアクセスを許可する コマンド、フォーマットGRANT list of privileges ON table TO 'username'@'IP_Address'; 。より一般的な特権には、CREATEが含まれます。 、ALTERDROPINSERTUPDATEDELETE 、およびSELECT 。これらの特権をすべてのデータベースに適用するには、ワイルドカード変数*.*を使用します 。次のコマンドは、すべてのデータベースに対する共通の非管理者権限をmysqluserに付与します。 。

      GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD ON *.* TO 'mysqluser'@'localhost' WITH GRANT OPTION;
      
    6. MySQLプロンプトを終了するには、exitと入力します 。

      exit
      

    MySQLの使用方法

    MySQLは、すべてのコマンドに標準のSQL構文を使用します。このセクションの手順は、データベース、テーブルの作成、データの追加など、MySQLで基本的なタスクを実行する方法を示しています。 MySQLの使用方法の詳細については、MySQLリファレンスマニュアルを参照してください。簡潔で徹底的な紹介については、MySQLチュートリアルをお試しください。

    データベースの作成

    1. データベースを作成するには、CREATEを保持しているアカウントを使用してMySQLにログインします 特権。 mysqlusernameを置き換えます 作成したユーザー名で。

      mysql -u mysqlusername -p
      
    2. CREATE DATABASEを使用して新しいデータベースを作成します 指図。 newdatabasenameを置き換えます データベースに必要な名前を付けます。

      CREATE DATABASE newdatabasename;
      
      Query OK, 1 row affected (0.00 sec)
    3. 新しいデータベースが正しく作成されたことを確認するには、SHOW DATABASESを使用します 。

      SHOW DATABASES;
      
      +--------------------+
      | Database           |
      +--------------------+
      ...
      | newdatabasename   |
      ...
      +--------------------+
      5 rows in set (0.00 sec)
    4. USEを使用して、操作するデータベースを指定します 指図。 newdatabasenameを置き換えます 作成したデータベースの名前を使用します。

      USE newdatabasename;
      
      Database changed
      USEを使用することもできます 複数のデータベースがあり、それらを切り替えたい場合のコマンド。
    5. 現在のデータベースの名前を確認するには、SELECT DATABASEを使用します 指図。出力にはデータベース名が表示されます。

      SELECT DATABASE();
      
      +------------------+
      | DATABASE()       |
      +------------------+
      | newdatabasename |
      +------------------+

    テーブルを作成する

    この時点で、データベースnewdatabasename にはテーブルがないため、まだデータを保存することはできません。テーブルを定義するには、CREATE TABLEを使用します 指図。このコマンドには、テーブルの名前に加えて、各フィールドの名前とデータ型が必要です。データ型は、フィールドに格納されているデータを特徴づけます。たとえば、データ型は、VARCHARと呼ばれる可変長の文字列にすることができます。 。データ型の完全なリストについては、MySQLのドキュメントを参照してください。より一般的なデータ型のいくつかは次のとおりです。

    • INT: これには、-2147483648の間の値を含めることができます および2147483647UNSIGNEDとして指定されている場合 、0の間の値を格納できます および4294967295
    • SMALLINT: -32768の間にさらに小さい整数値を保持します および32767
    • フロート: このタイプは浮動小数点数を格納できます。
    • 日付: 日付をYYYY-MM-DDに保存します フォーマット。
    • 日時: 日付と時刻の組み合わせをYYYY-MM-DD HH:MM:SSに格納します フォーマット。 TIMESTAMPには、ダッシュとコロンを付けずに同時に保存できます。 フォーマット。
    • VARCHAR(N): これは、1の間の可変長の文字列です。 およびN 長さは文字で、最大長は255です。 文字。
    • テキスト: このデータ型は最大65535を保持します 文字。テキスト、画像、またはバイナリデータを保持できます。
    • CHAR(N): このタイプは、長さがNの固定長のテキストフィールドを表します 。たとえば、2文字の状態コードを保持するには、CHAR(2)のデータ型を使用します 。

    テーブルを作成する前に、スキーマを決定することが重要です。 データベース用。スキーマは、各テーブルが表すもの、各テーブルに格納されるデータ、およびテーブルの関係を記述します。テーブルを作成するには、次の手順に従います。

    1. MySQLにログインしている間に、テーブルを追加するデータベースに切り替えます。

      use newdatabasename;
      
    2. CREATE TABLEを使用します 新しいテーブルを生成するコマンド。 CREATE TABLE table_name (field_1 datatype, field_n datatype);の形式を使用します 。

      CREATE TABLE newtablename (column1 VARCHAR(20), column2 CHAR(1), column3 DATE, column4 SMALLINT UNSIGNED);
      
      Query OK, 0 rows affected (0.02 sec)
    3. テーブルが存在することを確認するには、SHOW TABLESを使用します コマンド。

      SHOW TABLES;
      
      +----------------------------+
      | Tables_in_newdatabasename |
      +----------------------------+
      | newtablename              |
      +----------------------------+
      1 row in set (0.00 sec)
    4. テーブル構造を確認し、フィールドのリストを確認するには、DESCRIBEを使用します コマンド。

      DESCRIBE newtablename;
      
      +---------+-------------------+------+-----+---------+-------+
      | Field   | Type              | Null | Key | Default | Extra |
      +---------+-------------------+------+-----+---------+-------+
      | column1 | varchar(20)       | YES  |     | NULL    |       |
      | column2 | char(1)           | YES  |     | NULL    |       |
      | column3 | date              | YES  |     | NULL    |       |
      | column4 | smallint unsigned | YES  |     | NULL    |       |
      +---------+-------------------+------+-----+---------+-------+
      4 rows in set (0.00 sec)
    5. テーブルが不要になった場合は、DROP TABLEを使用してテーブルを削除します コマンド。

      注意 テーブルが削除されると、テーブル内のすべてのデータが失われ、復元できなくなります。
      DROP TABLE newtablename;
      

    データの追加と取得

    データの新しい行をテーブルに挿入する主な方法は、INSERTを使用することです。 コマンド。

    1. 行を追加するには、INSERTを使用します 指図。テーブル名、キーワードVALUESを指定します 、およびINSERT INTO tablename VALUES ('value_1', ... 'value_n');の形式の括弧で囲まれたコンマ区切りの値のリスト 。列の値は、文字列と日付の値を引用符で囲んで、テーブル定義と同じシーケンスにする必要があります。たとえば、newtablenameにデータを追加するには 、column1の値を指定します 、column2column3 、およびcolumn4 、この順序で。

      INSERT INTO newtablename VALUES ('value1','a','2021-09-10',123);
      
      Query OK, 1 row affected (0.01 sec)
    2. データを取得するには、SELECTを使用します コマンド、およびMySQLに返す行を指示するいくつかの制約。テーブルの内容全体を返すことも、サブセットのみを返すこともできます。テーブル内のすべての行を選択するには、SELECT *を使用します コマンドですが、修飾子を追加しないでください。

      SELECT * FROM newtablename;
      
      +---------+---------+------------+---------+
      | column1 | column2 | column3    | column4 |
      +---------+---------+------------+---------+
      | value1  | a       | 2021-09-10 |     123 |
      | value2  | b       | 2021-09-08 |     123 |
      +---------+---------+------------+---------+
      2 rows in set (0.00 sec)
    3. たとえば、列が特定の値に設定されている場合など、特定の基準に適合する行のみを選択することもできます。 WHEREを使用する 修飾子としてのキーワードと、それに続く制約としての一致基準。この例では、column2が含まれる行のみ bに設定されています が表示されます。

      SELECT * FROM newtablename WHERE column2 = 'b';
      
      +---------+---------+------------+---------+
      | column1 | column2 | column3    | column4 |
      +---------+---------+------------+---------+
      | value2  | b       | 2021-09-08 |     123 |
      +---------+---------+------------+---------+
      1 row in set (0.00 sec)
    4. 多くの列を持つテーブルの場合、表示される情報を制限する方が簡単なことがよくあります。各行の特定の列のみを選択するには、*の代わりに列名を指定します シンボル。

      SELECT column1, column4 FROM newtablename;
      
      +---------+---------+
      | column1 | column4 |
      +---------+---------+
      | value1  |     123 |
      | value2  |     123 |
      +---------+---------+
      2 rows in set (0.00 sec)
    5. テーブルの行を変更するには、UPDATEを使用します 指図。 SET キーワードは、更新する列と新しい値を示します。必要に応じて、WHERE キーワードは、特定の行にのみ適用されるように操作を制限する方法を提供します。次の例では、column4の値 155にのみ変更されます column2の場合 bと等しい 。

      UPDATE newtablename SET column4 = 155 WHERE column2 = 'b';
      
      Query OK, 1 row affected (0.00 sec)
      Rows matched: 1  Changed: 1  Warnings: 0
    6. SELECT * ステートメントを使用して更新を確認できます。

      SELECT * FROM newtablename;
      
      +---------+---------+------------+---------+
      | column1 | column2 | column3    | column4 |
      +---------+---------+------------+---------+
      | value1  | a       | 2021-09-10 |     123 |
      | value2  | b       | 2021-09-08 |     155 |
      +---------+---------+------------+---------+
      2 rows in set (0.00 sec)

    結論:Ubuntu20.04上のMySQL

    MySQLは、中小規模のWebアプリケーションに適しています。業界標準のSQLプログラミング言語を使用しており、非常に簡単に使用できます。 MySQLは非常に安定していて堅牢であり、優れたサポートとともに十分なリソースがあります。 MySQLの主な代替手段はMariaDBです。パフォーマンスが向上し、新しい機能が追加されていますが、十分に確立されていません。

    aptを使用して、UbuntuにMySQLサーバーを簡単にダウンロードしてインストールできます。 パッケージとmysql_secure_installation 効用。 MySQLを使用しているのがあなただけの場合でも、より制限された権限を持つ新しいMySQLユーザーを作成することをお勧めします。

    MySQLを使用するには、最初にデータベーススキーマを決定し、テーブルの内容を定義します。次に、データベースとデータテーブルを作成します。 INSERTを使用してデータを追加できます コマンド、UPDATEを使用して変更 コマンド、およびSELECTを使用して取得 指図。もちろん、MySQLは非常に複雑な操作でも実行できます。 MySQLチュートリアルを実行して開始し、MySQLのドキュメントを参照して完全な概要を確認してください。

    詳細情報

    このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。

    • MariaDBWebサイト
    • MySQLWebサイト

    1. psqlクエリ結果でテーブルの境界線スタイルを変更する方法

    2. PostgreSQL CREATE TABLE

    3. Windows上のODBCアプリケーションをSugarCRMに接続します

    4. SQLステートメントのフィールドから先行ゼロを削除する