はじめに
例えば CentOS8 で「yum install mysql」を実行すると MySQL ではなく MariaDB がインストールされるので、以下のリファレンスマニュアルに従って MySQL をインストールします。
MySQL Yum リポジトリを使用して MySQL を Linux にインストールする
※「yum install mysql-community-server」が失敗する場合は「dnf -y module disable mysql」を事前に実行してください。
パスワードの変更
MySQL はインストール時に仮のrootパスワードが設定されています。まずはパスワードを確認するところから始めなくてはいけません。
初期パスワードは「/var/log/mysqld.log」のログ中に記載されています。
[root@DV-SV ~]# /var/log/mysqld.log
2020-12-13T08:38:47.689312Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Jo,)Y109!LOe
仮パスワードで MySQL にログインすることができます。
[root@DV-SV ~]# mysql -p
ただし、仮パスワードでは SHOW コマンドが実行できません。
mysql> SHOW DATABASES;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
試していませんが、SHOW が出来ないならほとんどの操作が出来ないと思います。
パスワードを変更する必要があります。以下のコマンドを実行してください。
色々聞かれますが、パスワードの入力以外は基本的にエンターを押し続けても問題ありません。
[root@DV-SV ~]# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) :
... skipping.
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) :
... skipping.
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) :
... skipping.
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) :
... skipping.
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) :
... skipping.
All done!
データベースの作成
パスワードが変更出来たら、データベースを作成します。
mysql> CREATE DATABASE yamazon;
Query OK, 1 row affected (0.01 sec)
作成したデータベースが存在することを確認します。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| yamazon |
+--------------------+
5 rows in set (0.00 sec)
データベースが確認出来たらUSEでデータベースに移動します。
mysql> USE yamazon
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
エラーっぽいメッセージが出ますが、読んでみると分かるようにエラーではないので気にしないで下さい。
テーブルの作成
次にテーブルを作成します。テーブルを作成するには最低でも1列必要です。データ型の指定も必須です。
mysql> CREATE TABLE users (id INT);
Query OK, 0 rows affected (0.03 sec)
テーブルが作成されていることを確認します。
mysql> SHOW TABLES;
+-------------------+
| Tables_in_yamazon |
+-------------------+
| users |
+-------------------+
1 row in set (0.00 sec)
テーブルの詳細を確認します。
mysql> DESCRIBE users;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id | int | YES | | NULL | |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)
上記から分かるように、主キーは必須ではありません。
カラムの修正
ID を自動的に連番で割り当てるように変更したいと思います。
mysql> ALTER TABLE users MODIFY id INT AUTO_INCREMENT;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
上記エラーのように、AUTO_INCREMENT 属性としたい場合、列は主キーもしくは一意キーである必要があります。
なので、まずは先に列を主キーにします。
mysql> ALTER TABLE users ADD PRIMARY KEY (id);
主キーを設定した時点でそのカラムは NOT NULL になります。
mysql> DESCRIBE users;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)
これで AUTO_INCREMENT が設定できますが、ついでに id 列は 0 でパディングするように設定します。
mysql> ALTER TABLE users MODIFY id INT ZEROFILL AUTO_INCREMENT;
Query OK, 0 rows affected, 1 warning (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 1
MODIFY は設定の追加ではなく変更であることに注意してください。明示的に宣言していないものは現在設定されていても上書き(削除)されます。
mysql> DESCRIBE users;
+----------+---------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------------+------+-----+---------+----------------+
| id | int(10) unsigned zerofill | NO | PRI | NULL | auto_increment |
+----------+---------------------------+------+-----+---------+----------------+
1 rows in set (0.00 sec)
ZEROFILL を設定すると int の桁数が自動で 10 になります。桁数を指定しないと何桁 0 でパディングするか分からないからですね。
「UNSIGNED」は「負数が扱えなくなり、その分正数の範囲が広がる」という属性です。ZEROFILL にすると自動的についてきます。
カラムの追加
カラムを追加します。
mysql> ALTER TABLE users
-> ADD username VARCHAR(10) NOT NULL,
-> ADD password VARCHAR(32) NOT NULL;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
varchar(10)なら10文字以内はOK、10文字より大きければNGです。これはアルファベットでも漢字でも同じです。
mysql> DESCRIBE users;
+----------+---------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------------+------+-----+---------+----------------+
| id | int(10) unsigned zerofill | NO | PRI | NULL | auto_increment |
| username | varchar(10) | NO | | NULL | |
| password | varchar(32) | NO | | NULL | |
+----------+---------------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
ユーザの作成
ユーザを作成します。
mysql> INSERT INTO users (username,password) VALUES ('yamada','P@ssw0rd');
シングルクオーテーションもしくはダブルクオーテーションで囲わないとsyntaxエラーになるので注意してください!
最後にテーブルにユーザが追加されていることを確認します。
mysql> SELECT * FROM users;
+------------+----------+----------+
| id | username | password |
+------------+----------+----------+
| 0000000001 | yamada | P@ssw0rd |
+------------+----------+----------+
1 row in set (0.00 sec)
使用コマンド
mysql_secure_installation
mysql -p
USE データベース名
SHOW DATABASES;
SHOW TABLES;
DESCRIBE テーブル名;
CREATE DATABASE データベース名;
CREATE TABLE テーブル名 (列名① データ型);
ALTER TABLE テーブル名 ADD PRIMARY KEY (列名);
ALTER TABLE テーブル名 MODIFY 列名 データ型 ZEROFILL AUTO_INCREMENT;
ALTER TABLE テーブル名 ADD 列名 データ型(桁数) NOT NULL, ADD 列名 データ型(桁数) NOT NULL;
INSERT INTO テーブル名 (列名,列名) VALUES ('値','値');
使用していないが役に立つ削除コマンド
DROP TABLE テーブル名;
DELETE FROM テーブル名 WHERE 列名=値;
DELETE FROM テーブル名; //すべての行を削除