QNAP Container Station MySQL Server 構築
「TS-h1283XU-RP」上のコンテナ(Container Station)で MySQL Server を構築します。
基本のセットアップ方法については、「QNAP QuTS hero 5 セットアップ」をご覧ください。
ページ内目次
MySQL Server って何?
各種Webアプリ等ではデータベースサーバーを良く使用します。
QNAPのApp CenterにもMariaDBが用意されていますが、メンテされていないためかバージョンが古いです。
そのためDocker経由でデータベースサーバーを用意することにします。
よく使われる有名どころのデータベースサーバーでは、以下のようなソフトウェアが見つかります。
MySQLが一番有名かと思われます。
MariaDBはMySQLの買収によって非公開となる懸念からフォークされたプロジェクトです。
MySQLがベースとなっているため、またMySQLの買収後も公開が続いていることから、私は本家MySQLを使うのが良いと思っています。
気になる方はMariaDB等を使用してもいいかもしれません。
機能性ではPostgreSQLに軍配が上がると思われますが、メジャーアップデートの際にpg_upgradeツールを使用してアップデートの必要があります。
なお、MySQLは8.0.16以降でmysql_upgradeが自動化されたため、アップデートの際のコマンド手動実行の必要はありません。
しかしながら、どちらにしてもアップデートの際は問題発生に備えて、データベースの内容をダンプしてバックアップを取ることが重要となります。
MySQL Server を Container Station に設定
詳細はこちらにある通りで、このDockerイメージを動かす場合には、いくつか環境変数の設定が必要になります。
latest タグや lts タグがありますが、メジャーアップデート(Ver8系から9系等)が発生する可能性があるため、推奨はされないと思われます。
長期サポートのLTSバージョンは、2025年12月現在は8.4になっていて、次のLTSバージョンが9.7と予定されています。
そのため、パッチバージョンは自由に当たるように、現在は「8.4」のタグを使用するのが良いのではないかと思います。
「8.4.7」のタグもありますが、次のパッチバージョン「8.4.8」が公開されたときにイメージのプルで新しいバージョンを当てたいので。
(次のLTSバージョン9.7が公開されたら、バックアップの上、メジャーアップデートとして移行計画を整えるような形)
事前準備
データベースの保存先としてディレクトリを作成します。
以下のディレクトリを準備しておきます。
- /share/Container/mysql/db/
コマンド例:
mkdir -p /share/Container/mysql/db/
また反映させたい設定があるので、以下の内容の設定ファイルを作成しておきます。
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
[client]
default-character-set = utf8mb4
以下に保存しておきます。
/share/Container/mysql/my.cnf
適当なエディタ等でファイルを作成してください。
コマンド例:
vi /share/Container/mysql/my.cnf
なお、文字コードはutf8mb4一択ですが、collationについては要件に応じて検討してください。
Dockerコンテナの設定
「Container Station」を開き、「コンテナ」タブから「探索」ボタンを押してDockerHubからmysqlを探します。
「コンテナまたはアプリケーションの作成」という画面が表示されるので、検索欄に「mysql」などと入力して「mysql」を探します。
「mysql」の右に表示される「デプロイ」ボタンを押します。
確認画面が表示されますが、公式イメージなので大丈夫でしょう。
イメージバージョンの選択画面になるので、先程の話の通り 8.4 に変更をします。
コンテナ作成の画面になるので、以下のように設定していきます。
- 名前:任意(わかりやすいもの)
- 設定・再起動ポリシー:「停止時以外」
- ネットワーク設定・露出ポート:3306/tcp, 33060/tcp
- ネットワーク設定・デフォルトの Web URL ポート:無効
「詳細設定」をクリックして、詳細設定に進む。
「コマンド」ページ
先程用意したmy.cnfを反映させないのであれば、何もいじらなくて良いのです。
日本語環境下であれば設定したほうが良い内容なので、my.cnfをコンテナ内に反映させたいです。
本来であれば、ストレージ設定から、my.cnfをリードオンリーで読ませれば良いだけですが、この環境下ではリードオンリーでもパーミッションが777となる関係で、設定読み込みが弾かれてしまいます。
そのため設定を読み込ませるにはコマンドでコンテナ起動時にファイル操作をする必要があります。
- コマンド:Override「-c "cp /tmp/my.cnf /etc/mysql/conf.d/my.cnf && chmod 644 /etc/mysql/conf.d/my.cnf && exec docker-entrypoint.sh mysqld"」
- エントリポイント:Override「bash」
このように変更します。コマンドは長いですが1行で入れます。
デフォルト設定ではdocker-entrypoint.sh実行後にmysqldが上がってくるような内容ですが、その前に設定ファイルコピーとパーミッション設定をしています。
「環境」ページ
「新しい変数の追加」ボタンで以下の内容を増やす。
- 変数「TZ」値「Asia/Tokyo」
- 変数「MYSQL_ROOT_PASSWORD」値「(ルートパスワードを設定)」
画像ではパスワードは簡単な例ですが、データベースの全てを握るルートパスワードとなるので、強固なパスワードを設定してください。
同時にユーザーを作成したりデータベースを作成したり出来ますが、あとからいくらでも出来るので、ルートパスワードだけを設定します。
「ストレージ」ページ
ボリューム「/var/lib/mysql」設定があるため、それを一旦削除。
「ボリュームの追加」ボタン横の矢印から「マウントされたホストのパスをバインド」を選択して追加。
- ホスト「/Container/mysql/db」に対してコンテナ「/var/lib/mysql」RWのままで
(なお、ボリュームの設定のままでも、ボリュームに /share/Container/mysql/db のパスで設定を入れると勝手にマウントになります)
この設定でコンテナ内のディレクトリをファイルシステムにマッピングさせます。
設定ファイルも以下のようにマウントします。
- ホスト「/Container/mysql/my.cnf」に対してコンテナ「/tmp/my.cnf」ROで
以上で最低限起動する設定になっています。
「完了」でコンテナを作成しましょう。
コマンドラインでのデータベース操作確認
QNAPにSSH接続して、以下のコマンドから起動中のmysqlコンテナにrootユーザーで入れます。
docker exec -it [コンテナ名 or コンテナID] mysql -u root -p
Enter password: と表示されるので、mysqlのrootユーザーで設定したパスワードを入力するとコンソールに入れます。
設定が反映されているか以下のようにSQL文を入力して確認してみましょう。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.4.7 MySQL Community Server - GPL
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | JST |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)
mysql> show variables like 'character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.4/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)
mysql> show variables like 'collation%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_0900_ai_ci |
| collation_database | utf8mb4_bin |
| collation_server | utf8mb4_bin |
+----------------------+--------------------+
3 rows in set (0.00 sec)
mysql> exit
Bye反映されてそうですね。
データベースの確認と作成
まずはSQL文のクエリーを投げてデータベース一覧を確認してみます。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql>CREATE DATABASE文にて新たに「test」という名のデータベースを作成しました。
その後のSHOW DATABASES文にてデータベース一覧を確認してみると、「test」という名のデータベースが増えていることがわかります。
データベースに触れたことが無い方は、「test」という名のExcelファイルを新規に作ったイメージとすると理解しやすいと思います。
データベースの削除
なお、以下の方法でデータベースの削除が行えます。
※確認されませんので以下のクエリーは慎重に。
mysql> drop database test;
Query OK, 0 rows affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>DROP DATABASE文にてデータベースの削除が行えます。
使用するデータベースの選択
必須ではありませんが、使用するデータベースを選択しておくと、毎度指定する必要がなくなります。
mysql> select database();
+------------+
| database() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
mysql> use test;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
mysql>USE文にて使用するデータベースを選択します。
database関数は現在選択されているデータベースを返します。
(最初の時点では何もデータベースを選択していないので何も無いことを表す「NULL」が返ってきています)
テーブルの確認と作成
データベース内には複数のテーブルが作成できます。
Excelに複数のシートがあるようなイメージです。
テーブル一覧を確認してみます。
mysql> show tables;
Empty set (0.00 sec)
mysql> create table tbl_test(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(100), price INT);
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tbl_test |
+----------------+
1 row in set (0.00 sec)
mysql> desc tbl_test;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
| price | int | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> show full columns from tbl_test;
+-------+--------------+-------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------+--------------+-------------+------+-----+---------+----------------+---------------------------------+---------+
| id | int | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
| name | varchar(100) | utf8mb4_bin | YES | | NULL | | select,insert,update,references | |
| price | int | NULL | YES | | NULL | | select,insert,update,references | |
+-------+--------------+-------------+------+-----+---------+----------------+---------------------------------+---------+
3 rows in set (0.01 sec)
mysql>(USE文にて使用するデータベースを指定していない場合は、test.tbl_testのようにテーブル名の前にデータベース名を指定する必要があります)
データベースでは重複した内容でも個別に扱えるように、ユニークなIDをプライマリーキーとしてつけるのが基本になります。
今回は、「id」という名で数値が入れられる整数型(INT)を指定しています。
末尾についているAUTO_INCREMENTでユニークな数値となるように自動でインクリメントする設定。
NOT NULLはNULL(未入力)を許容せず、ユニーク性の担保と検索の高速化でPRIMARY KEYでプライマリーキー(主キー)設定にしています。
「name」はVARCHAR(100)で100文字入力可能な文字列、「price」は数値を入れられる整数型です。
テーブルの削除
なお、以下の方法でテーブルの削除が行えます。
※確認されませんので以下のクエリーは慎重に。
mysql> drop table tbl_test;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
Empty set (0.00 sec)
mysql>DROP TABLE文にてテーブルの削除が行えます。
データの挿入と確認
先程作成したテーブルにデータを挿入してみます。
mysql> select * from tbl_test;
Empty set (0.00 sec)
mysql> insert into tbl_test (name, price) values ("IGBT", 1000), ("MOSFET", 500);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from tbl_test;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 1 | IGBT | 1000 |
| 2 | MOSFET | 500 |
+----+--------+-------+
2 rows in set (0.00 sec)
mysql> insert into tbl_test (name, price) values ("MOSFET", 600), ("SCR", 2000);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from tbl_test;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 1 | IGBT | 1000 |
| 2 | MOSFET | 500 |
| 3 | MOSFET | 600 |
| 4 | SCR | 2000 |
+----+--------+-------+
4 rows in set (0.00 sec)
mysql>idにはAUTO_INCREMENTが指定されているため値を指定しなくても自動的に数値をインクリメントして入れてもらえます。
そのため、nameとpriceだけ指定してデータを入れることができました。
mysql> select * from tbl_test order by price asc;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 2 | MOSFET | 500 |
| 3 | MOSFET | 600 |
| 1 | IGBT | 1000 |
| 4 | SCR | 2000 |
+----+--------+-------+
4 rows in set (0.00 sec)
mysql> select * from tbl_test order by price desc;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 4 | SCR | 2000 |
| 1 | IGBT | 1000 |
| 3 | MOSFET | 600 |
| 2 | MOSFET | 500 |
+----+--------+-------+
4 rows in set (0.00 sec)
mysql> select * from tbl_test order by price asc limit 2;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 2 | MOSFET | 500 |
| 3 | MOSFET | 600 |
+----+--------+-------+
2 rows in set (0.00 sec)
mysql>ORDER文、WHERE文、LIMIT文を組み合わせて任意のデータを取り出すことが出来ます。
ユーザーの確認
ユーザーを確認してみます。
mysql> select user(), current_user();
+----------------+----------------+
| user() | current_user() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)
mysql> show grants for root@localhost;
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`localhost` WITH GRANT OPTION |
| GRANT ALLOW_NONEXISTENT_DEFINER,APPLICATION_PASSWORD_ADMIN,AUDIT_ABORT_EXEMPT,AUDIT_ADMIN,AUTHENTICATION_POLICY_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FIREWALL_EXEMPT,FLUSH_OPTIMIZER_COSTS,FLUSH_PRIVILEGES,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,GROUP_REPLICATION_STREAM,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,OPTIMIZE_LOCAL_TABLE,PASSWORDLESS_USER_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SENSITIVE_VARIABLES_OBSERVER,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_ANY_DEFINER,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,TELEMETRY_LOG_ADMIN,TRANSACTION_GTID_TAG,XA_RECOVER_ADMIN ON *.* TO `root`@`localhost` WITH GRANT OPTION |
| GRANT PROXY ON ``@`` TO `root`@`localhost` WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
mysql> select user, host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
mysql>user関数、current_user関数では接続に使用するユーザー情報や、現在のセッションのユーザー情報の確認ができます。
SHOW GRANTS文では権限の確認。
SELECT文を使用して、ユーザー情報が入っているmysql.userよりuserとhostを抜き出しています。
ユーザーの追加と権限
rootユーザーで日常的に操作すると誤操作等があったときに危険です。
そのため、基本的には用途ごとにデータベースとユーザーを作成するのが基本になります。
新たにユーザーを作成し、テスト用のデータベース「test」を操作することだけ可能な権限を与えます。
なお、こちらも強固なパスワードを設定することを忘れずに。
mysql> create user 'test_user'@'localhost' identified by 'Passw0rd12345';
Query OK, 0 rows affected (0.03 sec)
mysql> select user, host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| test_user | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
mysql> show grants for test_user@localhost;
+-----------------------------------------------+
| Grants for test_user@localhost |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO `test_user`@`localhost` |
+-----------------------------------------------+
1 row in set (0.00 sec)
mysql> grant all privileges on test.* to test_user@localhost;
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> show grants for test_user@localhost;
+-------------------------------------------------------------+
| Grants for test_user@localhost |
+-------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test_user`@`localhost` |
| GRANT ALL PRIVILEGES ON `test`.* TO `test_user`@`localhost` |
+-------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql>以上で、データベース「test」の操作が可能なユーザー「test_user」が作成できました。
mysql> select user(), current_user();
+---------------------+---------------------+
| user() | current_user() |
+---------------------+---------------------+
| test_user@localhost | test_user@localhost |
+---------------------+---------------------+
1 row in set (0.00 sec)
mysql> create database test2;
ERROR 1044 (42000): Access denied for user 'test_user'@'localhost' to database 'test2'
mysql> use test;
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
mysql> create table tbl_test2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(100), price INT);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into tbl_test (name, price) values ("test", 100), ("test", 200);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into tbl_test2 (name, price) values ("test", 100), ("test", 200);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>test_userにて接続してみると、データベース「test」は自由に操作できますが、他のデータベースの作成等は不可能なことがわかります。
ユーザーの削除
ユーザーの削除は、DROP USER文にて行います。
mysql> drop user 'test_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql>こちらも事前に確認はされないので、注意して実行してください。
DBeaverを使ったデータベース操作確認
- DBeaver Community をインストール済みとします
DBeaverを起動して、上部メニュー「データベース」から「新しい接続」を選択します。
MySQLを選択して、接続先情報を入力します。
最低限接続先となる「Server Host」「ユーザー名」「パスワード」を入力すれば良いです。
ドライバファイルのダウンロードが必要な場合は、ダウンロードウィンドウが出ます。
「テスト接続」ボタンをクリックし接続テストを行って、正常に接続できるか確認しましょう。
「Public Key Retrieval is not allowed」というエラーが出る場合には、ドライバのプロパティタブにて以下の変更をします。
- 「allowPublicKeyRetrieval」を「true」に変更
これはMySQL 8.0以降にて認証方法が変わったためです。
なお、DBeaverは冬の間、メイン画面中に雪が降るエフェクトが表示されます。
無効にしたい場合は、上部メニューの「ウィンドウ」→「設定」を開き、設定画面内の「ユーザーインターフェース」→「Miscellaneous」内で「Show holiday decoration」のチェックを外します。
接続を行うと、左ペインに表示されている「データベースナビゲータ」にサーバーが表示されるようになります。
対象を右クリックすると編集他、様々な操作が可能です。
上部メニュー「データベース」→「接続する」をクリックするか、「データベースナビゲータ」中のツリーを開くとデータベースとの接続が切断されていても、接続状態になります。
データベースの確認と作成
最初にデータベースを確認してみます。
データベースナビゲータ中で対象のデータベースサーバーを開き、「データベース」のセクションを確認します。
切断状態であるとツリーを開いた時点で接続が行われます。
DBeaverの場合、「sys」データベースだけデータベースセクションで見える状態になるようです。
その他、デフォルトで存在している「information_schema」「mysql」「performance_schema」はデータベースセクション内には非表示のようです。
先程と同様に「test」データベースを作成してみます。
「データベース」のセクションを右クリックして「新しく作る データベース」をクリックします。
「Create database」画面が表示されるので、「Database name」にデータベース名を入力して「OK」をクリックします。
データベースが作成されました。
データベースの削除
データベースの削除の方法です。
データベースナビゲータ中で対象のデータベースを選択します。
右クリックして、「削除」メニューをクリックすると削除が行えます。
確認画面で「スクリプトの表示」をクリックすると実際に実行されるSQL文が表示されます。
DROP SCHEMA文でデータベースを削除するようです。
使用するデータベースの選択
対象のデータベースを右クリックし、「デフォルトとして設定」をクリックするとデータベースが太字となりデフォルトに設定されます。
テーブルの確認と作成
対象データベース(今回は「test」)を開き、「テーブル」セクションを確認します。
テーブルは存在しないので現状ではツリーは展開できません。ダブルクリックで詳細を表示しても「No items」となります。
「テーブル」セクションを右クリックして「新しく作る テーブル」をクリックするとテーブル作成画面となります。
テーブル名はデフォルトで「NewTable」となっているので任意に変更します。(今回は「tbl_test」)
カラムを作成するには、画面下部のアイコン「新しく作る カラム」からか、画面を右クリックして「新しく作る カラム」をクリックすることで作成できます。
カラムの編集画面が表示されるため、例として、以下の内容で作ってみましょう。
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(100), price INT
以下のようにカラム数分繰り返します。
カラム「id」、オートインクリメントとNOT NULLを指定。なおかつプライマリーキーとしても設定するため「Unique」にチェック。
カラム「name」と「price」はそれぞれ「VARCHAR(100)」と「INT」にして設定。
内容を確認して良ければ、データベースサーバーに反映させるために保存(クエリーの実行)をします。
画面下部のアイコン「Save ...」または、「ファイル」→「保存」をクリックします。
SQL文をプレビュー可能な画面が表示され、「実行」をクリックすることでクエリーが実行され、実際にテーブル・カラムが作成されます。
テーブルの作成が完了しました。
テーブルの削除
なお、テーブルを削除するには、対象のテーブルを右クリックして「削除」から削除が出来ます。
確認画面が表示されます。
「スクリプトの表示」をクリックすると実際のSQL文が確認できます。
データの挿入と確認
対象のテーブルをダブルクリックで開いた状態で、「データ」タブを選択していると、データの操作が可能になります。
画面下部のアイコン「行を追加する」またはメニュー「編集」→「行を追加する」で値が入力可能になります。
値を入力していきます。
idには「AUTO_INCREMENT」が設定されているため、自動的に数値が入ります。よってNULLのままにしておきます。
画面下部のアイコン「Save」またはメニュー「ファイル」→「保存」でクエリーが実行されデータが挿入されます。
「AUTO_INCREMENT」の通り、idカラムには自動で数値が連番で入りました。
データの並び替え表示も可能で、並び替えたいカラムで詳細メニューが表示出来ますので、詳細な並び替えやフィルター操作が可能です。
ユーザーの確認
ユーザーの一覧を確認してみます。
データベースナビゲータよりユーザーを表示すると一覧表示になります。
ユーザーの追加と権限
ユーザーの追加を行います。
「ユーザー」セクションを右クリックし、「新しく作る ユーザー」からユーザー情報のタブを表示します。
プロパティタブ内の「Login」について入力を行います。
画面下部の「Save」またはファイルメニューから「Save」で反映させましょう。
SQL文のプレビューが表示されるので「実行」をクリックしてクエリーを実行します。
次に権限設定をしましょう。
ユーザー情報内の「スキーマ特権」タブを開きます。
ここが権限設定の画面になっています。
今回は「test」データベースに対して全て許可したいです。
- Catalogs欄で「test」データベースを選択
- Tables欄で「% (All)」を選択・全てのテーブルを対象に
- Table Privileges欄で「Check All」を選択・全て許可
- Other Privileges欄で「Check All」を選択・全て許可
先程と同様に「Save」を行います。
SQL文のプレビューが表示されるので「実行」をクリックしてクエリーを実行します。
GUIからはGRANT ALL PRIVILEGES ONは指定できないようです?
ユーザーの削除
ユーザーの削除方法です。
ユーザーセクションより対象のユーザーを右クリックして「削除」をクリックします。
確認画面が表示され、ユーザーの削除ができます。
データベースのバックアップ・復元
こちらで紹介されている通り、Dockerコマンド経由で行う方法です。
以下のコマンドはNAS上でしか動きません。別マシンから行う場合はmysqldumpで接続先をQNAPにして行えば良いと思います。
docker exec mysql-server sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /share/Container/mysql/all-databases.sql
上記コマンドでバックアップが取れます。
コマンドラインでパスワードを使用することの警告が表示されますが、バックアップは取れます。
Dockerの変数から渡されるので、$MYSQL_ROOT_PASSWORDのまま書き換えなくて大丈夫です。
docker exec -i mysql-server sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /share/Container/mysql/all-databases.sql
復旧はこのように書き込みます。
実際の使用例
