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の確立とサポートは向上しています。
始める前に
-
まだ行っていない場合は、Linodeアカウントとコンピュートインスタンスを作成します。 Linode入門とコンピューティングインスタンスの作成ガイドをご覧ください。
-
コンピューティングインスタンスのセットアップと保護ガイドに従って、システムを更新してください。また、タイムゾーンを設定し、ホスト名を構成し、制限付きユーザーアカウントを作成し、SSHアクセスを強化することもできます。
注 このガイドの手順は、root以外のユーザーを対象としています。昇格された特権を必要とするコマンドには、接頭辞として sudo
が付けられます 。sudo
に慣れていない場合 コマンドについては、Linuxユーザーおよびグループガイドを参照してください。
MySQLサーバーのインストール方法
MySQLはデフォルトのUbuntuパッケージの一部として利用できるため、ソースリストを編集する必要はありません。 apt
を使用して簡単にインストールできます 、ただし、アプリケーションを保護し、後でファイアウォールを編集することが重要です。これらの手順はUbuntuユーザーを対象としていますが、通常、MySQLを別のLinuxディストリビューションにインストールしたいユーザーに適用できます。
MySQLをダウンロード
MySQLサーバーをUbuntuにインストールするには、以下の手順に従います。
-
MySQLサーバーアプリケーションをインストールします。
sudo apt install mysql-server
-
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
ユーティリティは、アプリケーションを構成する最も簡単な方法です。セットアップスクリプトを使用するには、次の手順に従います。
-
mysql_secure_installation
を起動します ルートパスワードを設定し、他のデフォルトオプションを設定するユーティリティ。sudo mysql_secure_installation
-
アプリケーションは、
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?
-
次のプロンプトで、ユーティリティはrootアカウントのパスワードを要求します。パスワードを設定してから再入力してください。
Please set the password for root here. New password: Re-enter new password:
-
次の質問は、
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
-
プロンプトが表示されたら、
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!
-
(オプション )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サーバーにアクセスするには ユーザーを作成し、新しいユーザーアカウントを作成するには、次の手順に従います。
-
sudo mysql
を使用します データベースにアクセスするコマンド。 MySQLは、ローカルでログインするときにroot資格情報に基づいてrootユーザーを認証するため、パスワードは必要ありません。または、sudo mysql -u root -p
を使用してrootアカウントにアクセスします 、root
と一緒に パスワード。sudo mysql
-
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>
-
MySQLが正しく動作していることを確認するには、
SHOW DATABASES
を使用します すべてのデータベースを表示するコマンド。SHOW DATABASES;
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.01 sec)
-
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';
-
GRANT PRIVILEGE
を使用して新しいユーザーにアクセスを許可する コマンド、フォーマットGRANT list of privileges ON table TO 'username'@'IP_Address';
。より一般的な特権には、CREATE
が含まれます。 、ALTER
、DROP
、INSERT
、UPDATE
、DELETE
、およびSELECT
。これらの特権をすべてのデータベースに適用するには、ワイルドカード変数*.*
を使用します 。次のコマンドは、すべてのデータベースに対する共通の非管理者権限をmysqluser
に付与します。 。GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD ON *.* TO 'mysqluser'@'localhost' WITH GRANT OPTION;
-
MySQLプロンプトを終了するには、
exit
と入力します 。exit
MySQLの使用方法
MySQLは、すべてのコマンドに標準のSQL構文を使用します。このセクションの手順は、データベース、テーブルの作成、データの追加など、MySQLで基本的なタスクを実行する方法を示しています。 MySQLの使用方法の詳細については、MySQLリファレンスマニュアルを参照してください。簡潔で徹底的な紹介については、MySQLチュートリアルをお試しください。
データベースの作成
-
データベースを作成するには、
CREATE
を保持しているアカウントを使用してMySQLにログインします 特権。mysqlusername
を置き換えます 作成したユーザー名で。mysql -u mysqlusername -p
-
CREATE DATABASE
を使用して新しいデータベースを作成します 指図。newdatabasename
を置き換えます データベースに必要な名前を付けます。CREATE DATABASE newdatabasename;
Query OK, 1 row affected (0.00 sec)
-
新しいデータベースが正しく作成されたことを確認するには、
SHOW DATABASES
を使用します 。SHOW DATABASES;
+--------------------+ | Database | +--------------------+ ... | newdatabasename | ... +--------------------+ 5 rows in set (0.00 sec)
-
USE
を使用して、操作するデータベースを指定します 指図。newdatabasename
を置き換えます 作成したデータベースの名前を使用します。USE newdatabasename;
Database changed
注 USE
を使用することもできます 複数のデータベースがあり、それらを切り替えたい場合のコマンド。 -
現在のデータベースの名前を確認するには、
SELECT DATABASE
を使用します 指図。出力にはデータベース名が表示されます。SELECT DATABASE();
+------------------+ | DATABASE() | +------------------+ | newdatabasename | +------------------+
テーブルを作成する
この時点で、データベースnewdatabasename
にはテーブルがないため、まだデータを保存することはできません。テーブルを定義するには、CREATE TABLE
を使用します 指図。このコマンドには、テーブルの名前に加えて、各フィールドの名前とデータ型が必要です。データ型は、フィールドに格納されているデータを特徴づけます。たとえば、データ型は、VARCHAR
と呼ばれる可変長の文字列にすることができます。 。データ型の完全なリストについては、MySQLのドキュメントを参照してください。より一般的なデータ型のいくつかは次のとおりです。
- INT: これには、
-2147483648
の間の値を含めることができます および2147483647
。UNSIGNED
として指定されている場合 、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)
のデータ型を使用します 。
テーブルを作成する前に、スキーマを決定することが重要です。 データベース用。スキーマは、各テーブルが表すもの、各テーブルに格納されるデータ、およびテーブルの関係を記述します。テーブルを作成するには、次の手順に従います。
-
MySQLにログインしている間に、テーブルを追加するデータベースに切り替えます。
use newdatabasename;
-
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)
-
テーブルが存在することを確認するには、
SHOW TABLES
を使用します コマンド。SHOW TABLES;
+----------------------------+ | Tables_in_newdatabasename | +----------------------------+ | newtablename | +----------------------------+ 1 row in set (0.00 sec)
-
テーブル構造を確認し、フィールドのリストを確認するには、
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)
-
テーブルが不要になった場合は、
DROP TABLE
を使用してテーブルを削除します コマンド。注意 テーブルが削除されると、テーブル内のすべてのデータが失われ、復元できなくなります。 DROP TABLE newtablename;
データの追加と取得
データの新しい行をテーブルに挿入する主な方法は、INSERT
を使用することです。 コマンド。
-
行を追加するには、
INSERT
を使用します 指図。テーブル名、キーワードVALUES
を指定します 、およびINSERT INTO tablename VALUES ('value_1', ... 'value_n');
の形式の括弧で囲まれたコンマ区切りの値のリスト 。列の値は、文字列と日付の値を引用符で囲んで、テーブル定義と同じシーケンスにする必要があります。たとえば、newtablename
にデータを追加するには 、column1
の値を指定します 、column2
、column3
、およびcolumn4
、この順序で。INSERT INTO newtablename VALUES ('value1','a','2021-09-10',123);
Query OK, 1 row affected (0.01 sec)
-
データを取得するには、
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)
-
たとえば、列が特定の値に設定されている場合など、特定の基準に適合する行のみを選択することもできます。
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)
-
多くの列を持つテーブルの場合、表示される情報を制限する方が簡単なことがよくあります。各行の特定の列のみを選択するには、
*
の代わりに列名を指定します シンボル。SELECT column1, column4 FROM newtablename;
+---------+---------+ | column1 | column4 | +---------+---------+ | value1 | 123 | | value2 | 123 | +---------+---------+ 2 rows in set (0.00 sec)
-
テーブルの行を変更するには、
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
-
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サイト