【MySQL】MySQLのインストール

MySQLをインストールする方法について記載します。
無料で使えるDBとしては申し分ありません。PostgreSQLとMySQLで悩みましたが、私が使っているレンタルサーバではMySQLが使えるのでMySQLを使うことにしました。

環境

 OS ubuntu22.04 

インストール方法

ubuntuのコンソールから次のコマンドを入力してMySQLをインストールします。現在一番新しいバージョンが8.0なので、最新版をインストールしました。

$ > sudo atp update
$ > sudo apt install mysql-server-8.0

インストールが終わった後、バージョンを確認するには次のコマンドを入力してください。

$ > –version

私の環境では、次のバージョンが表示されました。

mysql Ver 8.0.34-0ubuntu0.22.04.1 …

インストール後の設定作業

インストール後、初期設定などを行います。
次のコマンドを入力して、Mysqlがインストールされているフォルダに移動し、初期設定コマンドを入力します。

全部英語だったので、つたない翻訳を載せておきます。

$ > cd /etc/mysql
$ > sudo mysql_secure_installation
[sudo] ログインユーザのパスワード: 

Securing the MySQL server deployment.
Connecting to MySQL using a blank password.

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?
(パスワード変更を行いますか?)
Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:
(パスワードの検証ポリシーは三段階あります)
LOW    Length >= 8 
(LOW 8文字以上)
MEDIUM Length >= 8, numeric, mixed case, and special characters
(MEDIUM 8文字以上、数字、大文字小文字混合、特殊記号)
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
(STRONG 8文字以上、数字、大文字小文字混合、特殊記号、辞書ファイル)

(どのポリシーを使用しますか? LOW、MEDIUM,STRONG)
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Skipping password set for root as authentication with auth_socket is used by default.
If you would like to use password authentication instead, this can be done with the "ALTER_USER" command.
See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-user-password-management for more information.

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) : y
Success.
(匿名ユーザがログインできないようにしますか?)

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) : y
Success.
(遠隔からrootユーザがログインできないようにしますか?)

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.
(デフォルトでは誰でもアクセスできる「TEST」というデータベースが記録されています)

(「TEST」データベースを削除しますか?)
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

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! 

私の環境では、localhostしかDBに接続することはない予定ですので、このような設定にしました。
SQLサーバを起動させるために次のコマンドを入力します。

$ > sudo service mysql start

再起動は、sudo service mysql restart
終了は、sudo service mysql stop
です。

パスワードの変更

次のコマンドを入力してmysqlのコンソールを起動させます。

$ sudo mysql -u root

初期状態では、rootユーザにパスワードが設定されていませんので、次のコマンドでパスワードを指定してください。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新しいパスワード';

私はパスワードポリシーを「MEDIUM」にしたので、8文字以上、数字と大文字小文字の英字、特殊記号のそろったパスワードしか許してもらえませんでした。
パスワードを設定したら、次のコマンドでコンソールを終了し、再びログインします。今度はパスワードを要求されるようになっています。

mysql > exit
$ > sudo mysql -u root -p
Enter password:

DBの作成

mysqlのコンソールから次のSQLを実行して、テスト用のDBを作りました。

mysql> create database cr_test_db;
Query OK, 1 row affected (0.00 sec)

mysql> use cr_test_db;
Database changed
mysql> create table name_list( id int(11) auto_increment not null, name varchar(25) not null,age int(3),primary key (id));
Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> desc name_list;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(25) | NO   |     | NULL    |                |
| age   | int         | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

desc name_list;で、テーブル内のカラム属性が表示されるので見やすいです。
descのスペルをdeskにして、動かないと悩んでいたのは秘密です。
データを入れてみるとこんな感じでした。

ysql> insert into name_list (name,age) values ('tarou',29);
Query OK, 1 row affected (0.06 sec)

mysql> insert into name_list (name,age) values ('hanako',30);
Query OK, 1 row affected (0.02 sec)

mysql> insert into name_list (name,age) values ('musasi',49);
Query OK, 1 row affected (0.01 sec)

mysql> select * from name_list;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | tarou  |   29 |
|  2 | hanako |   30 |
|  3 | musasi |   49 |
+----+--------+------+
3 rows in set (0.00 sec)