MySQL 5.7 Database Administrator: (1Z0-888-JPN ) サンプル問題

 

問題1:

MySQL Serverをインストールしたあと、mysqld --initializeを実行しました。

このコマンドを実行したことにより、何が行われますか。1つ選択してください。

 

1.    MySQLの初期データベースが作成される。

2.    MySQLのログイン・パスが作成される。

3.    MySQLがサービスに登録される。

4.    MySQLのセキュリティ上の改善が行われる。

 

解答: 1

解説

mysqld --initializeによって、データ・ディレクトリが初期化(初期データベースが作成)されます。

mysql_secure_installationは、初期のセキュアな構成が可能なセキュリティ・プログラムです。

mysql_secure_installationでセキュリティ・プログラムを起動すると、MySQLのセキュリティ上の改善を行うことができます。

 

 

 

問題2:

mysql_config_editorについて、正しい記述はどれですか。2つ選択してください。

 

1.    MySQLの初期データベースが作成される。

2.    MySQLサーバーに接続する方法を簡素化する。

3.    1つのログイン・パスを保存できる。

4.    ユーザー、パスワード、ホストオプションは、.mylogin.cnfに保存される。

 

 

解答:  2, 4

解説

mysql_config_editorユーティリティを使用すると、 .mylogin.cnfという暗号化されたログイン・ファイルに認証資格情報を保存できます。つまり、mysql_config_editorは、MySQLサーバーに接続する方法を簡素化します。
ユーザー、パスワードおよびホスト・オプションをセットにした、ログイン・パスを、専用オプション・ファイルである、.mylogin.cnfに保存します。なお、ログイン・パスは複数保存することが可能です。

 

 

 

問題3:

UNDOログについて、正しい記述はどれですか。2つ選択してください。

 

1.    デフォルトでは、UNDOログはシステム・テーブルスペースに格納される。

2.  UNDOテーブルスペース・ファイルが格納されるファイル・システムのパスは変更できない。

3. UNDOテーブルスペース・ファイルが格納されるファイル・システムのパスは、
innodb_undo_directory
オプションで変更できる。

4. デフォルトでは、UNDOログはどこにも格納されない。

 

 

解答: 1,3

 

解説

デフォルトでは、UNDOログはシステム・テーブルスペースに格納されます。

格納場所を変更したい場合は、innodb_undo_directoryオプションで変更することができます。

 

 

 

問題4:

sort_buffer_sizeについて、正しい記述はどれですか。2つ選択してください。

 

1.  グローバルのみで変更可能。

2.  完全テーブルスキャンが必要なクエリーで結合する際に必要なバッファ

3.  グローバルとセッションの両方で変更可能。

4.  ORDER BYまたはGROUP BYオプションを使用するクエリーをバッファーリングするために
使用できるメモリーの量。

 

 

解答: 3, 4

 

解説

完全テーブルスキャンが必要なクエリーで結合する際に必要なバッファは、join_buffer_size です。

join_buffer_sizeも、sort_buffer_sizeも、グローバルとセッションの両方で変更可能です。

 

 

 

問題5:

GLOBALまたはSESSIONを指定せずに、次のコマンドを実行しました。

このコマンドは成功しますか。結果とその理由で正しいものを1つ選択してください。

 

SET max_connections=100;

 

 

1.    デフォルトでSESSIONになる。セッション・レベルで成功する。

2.    デフォルトでSESSIONになるが、max_connectionsにはセッション変数が存在しないため、失敗する。

3.    デフォルトでGLOBALになる。グローバル・レベルで成功する。

4.    デフォルトでGLOBALになるが、max_connectionsはローカル・レベルで設定できないため、失敗する。

5.    max_connectionsという変数は存在しないため、失敗する。

 

解答: 2

 

解説

max_connectionsは、許可される最大のクライアントの同時接続数です。この変数はグローバル・レベルでのみ変更が許可されます。

GLOBALまたはSESSIONを指定しない場合は、SESSIONレベルになります。セッション変数が存在しない変数をセッション・レベルで変更しようとすると、エラーとなります。

 

 

 

問題6:

次の/etc/my.cnfの内容を確認してください。

[mysqld]

binlog-format = ROW

transaction-isolation = REPEATABLE READ

binlog-row-event-max-size = 256

 

MySQLから以下のコマンドを実行しました。

USE employees

UPDATE employees SET first_name = 'MySQL';


全行を誤って更新してしまったことに気づき、バイナリログを確認することにしました。
このコマンドはバイナリログに記録されていますか。1つ選択してください。

 

1.    複数行の更新はbinlog-formatSTATEMENTである時のみ、バイナリログに記録される。したがって、この変更はバイナリログには記録されていない。

2.    binlog-format ROWの場合、複数行の更新はできないためにエラーとなる。
つまり、この文はエラーとなっており、そもそも実行されていない。

3.    SQLの構文に誤りがあるため、この文はエラーとなっており、そもそも実行されていない。

4.    この変更はバイナリログに記録されている。

 

 

 

解答: 4

 

解説

binlog-format=ROWは、行ベースのロギングを行います。行ベースとは、各テーブル行がどのように変更されたかを表すイベントをバイナリログに書き込むモードです。この設定により、複数行の更新がエラーになることはありません。設問のSQLはバイナリログに記録されています。

binlog-format=STATEMENTは、SQLステートメントをバイナリログに書き込みます。ステートメントなので、行ベースよりもバイナリログのサイズが小さくて済むことや、行構造が違っていてもリカバリできるなどのメリットがあります。両者の違いをマニュアルで確認しておきましょう。

https://dev.mysql.com/doc/refman/5.7/en/replication-sbr-rbr.html

問題7:

サーバーに、プレーン・テキストのパスワードを送信してログインを行いたいと考えています。
有効な方法を2つ選んでください。

1.    LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN 環境変数をONに設定する。

2.    LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN 環境変数を 1Y、または y で始まる値に設定する。

3.    mysqlmysqladminなどのMySQLクライアント・アプリケーション実行時に--enable-cleartext-pluginを指定する。

4.    mysqlmysqladminなどのMySQLクライアント・アプリケーション実行時に--cleartext-pluginを指定する。

 

 

 

解答: 2, 3

 

解説

PAM (Pluggable Authentication Modules)認証などの一部の認証方法では、サーバーがパスワードを通常の形式で処理できるように、クライアントはプレーン・テキストのパスワードをサーバーに送信する必要があります。
MySQL
クライアントライブラリには、組込みのクリアテキスト認証プラグイン mysql_clear_passwordが含まれています。通常、パスワードはハッシュ化されますが、サーバーにプレーン・テキストのパスワードを送信されます。有効にするには、
回答のような方法があります。

 

 

 

問題8:

ユーザーを作成しました。
その後、そのユーザーから、「MySQLサーバーにログインできるが、データベースの選択ができない。」という問い合わせがありました。エラーメッセージを送ってもらったところ、このようなエラーが出ていました。

mysql> use employees;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

考えられる原因として正しいものを1つ選択してください。

1.    ユーザー作成のコマンドが失敗していた。つまり、このユーザーは存在しないためにエラーになった。

2.    このユーザーを作成した際、PASSWORD EXPIREを指定した。ユーザーは操作を行う前にパスワードを変更する必要がある。

3.    このユーザーを作成した際、PASSWORD EXPIREを指定した。ユーザーはロックされているため、エラーになった。

4.    use employees; のコマンドに誤りがあるため、エラーになった。

 

 

解答: 2

 

解説

このユーザーは、以下のようなコマンドで作成されたと考えられます。

CREATE USER mori@localhost identified by 'motonari' PASSWORD EXPIRE;

CREATE USER...PASSWORD EXPIREは、パスワード期限切れのユーザーを作成します。

エラーメッセージのとおり、ユーザーはステートメントを実行する前に、自分のパスワードを変更する必要があります。

 

 

 

問題9:

ユーザーを作成しました。
その後、そのユーザーから、「employeesデータベースを選択できない。」という問い合わせがありました。エラーメッセージを送ってもらったところ、このようなエラーが出ていました。

mysql> use employees;

ERROR 1044 (42000): Access denied for user 'mori'@'localhost' to database 'employees'

 

このユーザーがemployeesデータベースの表をすべて検索できるようにするために、データベース管理者はどのコマンドを実行したらよいでしょうか。正しいものを1つ選択してください。

 

1.    grant select on employees.* to mori@localhost;

2.    grant select on employees to mori@localhost;

3.    grant read on employees.* to mori@localhost

4.    grant create routine on employees.* to mori@localhost;

 

 

解答: 1

 

解説

特定のデータベースに対する検索権限を付与するには、以下のコマンドを使用します。

GRANT SELECT ON db_name.* TO username@hostname;;

3のような、read onというキーワードはありません。また、データベース名だけを指定している2もエラーになります。
4
はエラーになりませんが、ストアド・ルーチンの作成に関する権限であるため、employeesデータベースの選択ができるようにはなりません。権限の付与の仕方や種類については確認しておきましょう。
参考: https://dev.mysql.com/doc/refman/5.7/en/grant.html

 

 

 

問題10:

rootのパスワードを失念してしまいました。必須手順について正しく並んでいるものを1つ選択してください。

 

a.    --skip-grant-usersオプションを有効化

b.    --skip-grant-tablesオプションを有効化

c.    --skip-networkingオプションを有効化

d.    パスワードを変更

e.    rootユーザーを削除し、新たに作成する

f.     MySQLサーバを再起動

 

 

1.    f  -  a  -  e

2.    f  -  a  -  d

3.    f  -  b  -  d

4.    b  -  d  -  f

5.    b  -  c  -  d  -  f

 

解答: 4

 

解説

rootパスワードのリセット方法を確認しておきましょう。--skip-networkingオプションは必須の手順ではなく、推奨手順で、安全に変更するには指定いただいたほうが望ましいです。しかし、設問では必須の手順が問われているため、解答は3になります。
参考:https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

 

 

 

問題11:

以下のコマンドでユーザーを作成しました。



GRANT ALL PRIVILEGES ON employees.* TO mori@localhost

IDENTIFIED BY 'goodsecret' REQUIRE X509;

 

クライアントから、X509を使用して安全に接続できるようにするためには、ほかに何が必要でしょうか。
1
つ選択してください。

1.    これ以上の対応は不要。

2.    クライアントに、有効なデジタル証明書がダウンロードされていること。

3.    クライアントに、特定のCAから発行された有効なデジタル証明書がダウンロードされていること。

4.    X509プラグインがクライアントにインストールされていること。

 

 

 

解答: 2

 

解説

REQUIRE X509 は、クライアントに有効な証明書が存在する必要があります。ただし、正確な証明書、発行者、およびサブジェクトは問題になりません。唯一の要件は、いずれかの CA 証明書でその署名を検証できるべきであるということです。

REQUIRE ISSUER 'issuer' は、接続試行に対して、クライアントが CA 'issuer' によって発行された有効な X509 証明書を提供する必要があるという制限を設定します。設問3REQUIRE ISSUER 'issuer'の要件です。

参考:https://dev.mysql.com/doc/refman/8.0/en/alter-user.html

 

 

 

問題12:

顧客向けアプリケーションにおいて、SQLインジェクションによるデータ損失が起きないように対策を取りたいと思います。効果的なものはどれでしょうか。2つ選択してください。

 

1.    パラメータ化されたプリペアド・ステートメントや、ストアド・プロシージャを使用する

2.    匿名アカウントを削除する。

3.    root@hostnameのパスワードを定期的に変更する。

4.    クライアントからの接続はSSL/TSLを使用して、ユーザー・セッションを暗号化する。

5.    ユーザー・パスワードをハッシュ化し、保護する。

 

 

 

解答: 1, 2

 

解説

不要な匿名アカウントは削除し、セキュリティ・リスクに備えましょう。ユーザ・セッションの暗号化や、パスワードのハッシュ化はセキュリティを考えると実施することが望ましいですが、SQLインジェクションへの対策ではありません。

 

 

 

問題13:

ディザスタリカバリに備えるための方法として効果的なものはどれですか。
2
つ選択してください。

 

1.    バックアップを定期的に取得する。

2.    root@hostnameのパスワードを定期的に変更する。

3.    クライアントからの接続はSSL/TSLを使用して、ユーザー・セッションを暗号化する。

4.    RAID10のストレージを使用する。

5.    ソフトウェアを最新化する。

6.    地理的に離れた場所にフェールオーバーできるようにしておく。

 

 

 

解答: 1, 6

 

解説

自然災害に備えることは重要です。バックアップを定期的に取得しておけば、万一の障害でも安心です。地理的に離れた場所ですぐに運用を再開できるようにしておくことも効果的です。

 

 

 

問題14:

表の構造にエラーがないか確認したいと思います。
どのコマンドが役立ちますか。1つ選択してください。

 

1.    ANALYZE TABLE

2.    VALIDATE TABLE

3.    DROP TABLE

4.    CHECK TABLE

5.    REPAIRTABLE

 

 

 

解答: 4

 

解説
CHECK TABLE1 つまたは複数のテーブルをエラーがないかどうかチェックするコマンドです。ビューをチェックして、そのビュー定義で参照されているテーブルが存在しなくなっているなどの問題がないかどうかを調べることもできます。ANALYZE TABLEは、キーの分布を分析して格納するコマンドです。
REPAIR TABLE は、破損している可能性のあるテーブルを修復します。VALIDATE TABLEというコマンドはありません。

 

 

 

問題15:

実行時間が15時秒以上経過しているクエリーを確認するために、スロー・クエリー・ログを出力しようと考えています。必要な設定はどれですか。2つ選択してください。

 

1.    デフォルトでスロー・クエリー・ログは出力されているため、出力設定は不要。

2.    slow_query_logサーバー・オプションで有効化する。

3.    general_logサーバー・オプションで有効化する。

4.    long_query_timeで実行時間のしきい値を設定できる。

5.    実行時間のしきい値は変更できない。

 

 

解答: 2 , 4

 

解説

スロー・クエリー・ログは、slow_query_logサーバー・オプションで有効化します。デフォルトでは有効化されていません。実行時間のしきい値はデフォルト10秒ですが、long_query_timeで変更することが可能です。

 

 

 

問題16:

スロー・クエリー・ログを確認したところ、条件の日付が異なるだけのクエリーが多数確認されました。

# Time: 2018-12-21T07:22:18.229004Z

# User@Host: root[root] @ localhost [::1]  Id:     5

# Query_time: 0.965710  Lock_time: 0.005081 Rows_sent: 354  Rows_examined: 2844401

use employees;

SET timestamp=1545376938;

SELECT emp_no, salary FROM salaries

WHERE from_date BETWEEN '1986-01-01' AND '1986-01-07'

ORDER BY from_date, salary;

 

似たようなクエリーを要約して確認したい場合、どのツールが利用できますか。

1つ選択して下さい。

 

1.    Mysqlslow

2.    mysqldumpslow

3.    mysqldumpshow

4.    mysqlldumpsum

5.    mysqldumpsummary

 

 

解答: 2

 

解説

スロー・クエリー・ログの内容を要約できるツールは、mysqldumpslowです。文字列パラメーターは’S’に、数値パラメーターはNにして、同様のクエリーをグループ化します。多くの似たようなクエリーが出力されたときに便利です。

 

 

問題17:

以下の結果を確認してください。

mysql> explain

    -> SELECT emp_no, salary FROM salaries

    -> WHERE from_date BETWEEN '1986-01-01' AND '1986-01-07'

    -> ORDER BY from_date, salary\G

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: salaries

   partitions: NULL

         type: ALL

possible_keys: NULL

          key: NULL

      key_len: NULL

          ref: NULL

         rows: 2838426

     filtered: 11.11

        Extra: Using where; Using filesort

1 row in set, 1 warning (0.00 sec)

 

keyは何を表していますか。1つ選択してください。

1.    使用可能なインデックス。結果はNULLであることから、使用可能なインデックスはない。

2.    オプティマイザによって使用されたインデックス。結果はNULLであることから、インデックスは使用されていない。

3.    表に作成されているインデックス。結果はNULLであることから、この表にはインデックスが作成されていない。

4.    表に作成されているインデックスの有無。結果はNULLであることから、使用可能なインデックスはない。

 

 

解答: 2

 

解説

Keyはオプティマイザによって使用されたインデックスを示します。結果はNULLであることから、このSQLはインデックスを使用せずに検索が行われることがわかります。
possible_keys
は使用可能なインデックスを示します。結果はNULLであることから、使用可能なインデックスもないことがわかります。
なお、typeはアクセス方法を示しますが、ALLなので、テーブルスキャン(全行スキャン)が行われます。インデックスを作成することで、range(指定したインデックス(key)がサポートする範囲の行を照合する)に変わり、パフォーマンスが向上する可能性があります。

 

 

問題18:

夜間メンテナンスで、大量のレコードを更新しました。
実行したほうが良いコマンドは次のどれでしょうか。1つ選択してください。

1.     VALIDATE TABLE

2.     CHECK TABLE

3.     ANALYZE TABLE

4.     REPAIR TABLE

 

解答: 3

 

解説
ANALYZE TABLEは、キーの分布を分析して格納するコマンドです。テーブルまたはインデックス内の推定の行数を生成します。大量更新を行ったときや、キー分布が変わった時などに、インデックス統計を更新することができます。
CHECK TABLE
1 つまたは複数のテーブルをエラーがないかどうかチェックするコマンドです。ビューをチェックして、そのビュー定義で参照されているテーブルが存在しなくなっているなどの問題がないかどうかを調べることもできます。
REPAIR TABLE は、破損している可能性のあるテーブルを修復します。VALIDATE TABLEコマンドは存在しません。

 

 

問題19:

次のコマンドを確認してください。

 

mysqldump -uroot -p employees dept_emp > dept_emp.txt

 

出力されたファイルには、どのコマンドが含まれていますか。
正しい選択肢を1つ選んでください。

a.  DROP TABLE

b.    CREATE TABLE

c.    LOCK TABLES

d.    INSERT INTO

 

 

1.    c、d

2.    b, c, d

3.    a, b

4.    a, b, c, d

 

 

解答: 4

 

解説

オプションが指定されていないため、CREATE TABLEを含めたすべてのコマンドが出力されます。

 

問題20

次のコマンドを確認してください。

 

mysqldump -uroot -p --no-create-info employees dept_emp > dept_emp.txt

 

出力されたファイルには、どのコマンドが含まれていますか。
正しい選択肢を1つ選んでください。

a.  DROP TABLE

b.    CREATE TABLE

c.    LOCK TABLES

d.    INSERT INTO

 

 

1.    c、d

2.    b, c, d

3.    a, b

4.    a, b, c, d

 

 

解答: 1

 

解説

--no-create-info によって、CREATE TABLEステートメント、DROP TABLEステートメントが抑制されます。データだけを出力したいときに便利です。

 

 

問題21:

以下のコマンドで、employeesデータベースのバックアップを取得しました。
# mysqldump -uroot -p --tab=/backups employees

バックアップ時、employeesデータベースには、empテーブルがありました。
しかし、バックアップ後に誤って消してしまいました。
このバックアップからempテーブルを復元するには、どうしたらよいですか。

正しい手順を1つ選択してください。

a.    emp.sqlを実行する。

b.    LOAD DATA INFILE/LOAD DATA LOCAL INFILEステートメントを使用して、
emp.txt
ファイルをロードする。

c.    mysqlimportを使用して.demo.txtファイルをロードする。

d.    mysqldumpを使用して、demo.dmpをロードする。

 

 

1.                a

2.                a > b

3.                a > b または、a > c

4.                a > c

5.                d

6.                a > d

7.                a > b または、a > d

 

 

解答: 3

 

解説

このコマンドには、--tabオプションがあります。--tabオプションは、タブ区切りデータ・ファイルを生成するオプションで、テーブルごとに *.sql SQLファイル)、*.txt :テーブル・データ)が出力されます。

まず、SQLファイルで構造を復元してから、LOAD DATA INFILE/LOAD DATA LOCAL INFILEステートメントを使用してデータを復元するか、mysqlimportを使用してデータを復元します。したがって解答は、2つの方法を示している3が正解です。

 

問題22:

MySQLレプリケーションを導入する理由として考えられる選択肢を2つ選択してください。

 

1.    レポーティング用として読み取り専用のスレーブを用意し、マスターの負荷を下げる。

2.    自然障害に備え、異なる地域にあるサーバーにもレプリケーションしておく。

3.    高可用性。マスターに異常があった場合、スレーブに自動フェールオーバーが行われる。

4.    負荷分散。すべてのスレーブに変更内容が同時に反映されることが保証されている。

 

解答: 1, 2

 

解説

解答のとおりです。簡単な構成設定でレプリケーションを構築することが可能です。
3.
自動フェールオーバーは行われません。4. 負荷分散は可能ですが、サーバーの負荷状況によっては変更内容が必ずしもスレーブへ同時に反映されるとはいえず、保証されていません。

 

問題23:

リレー・スレーブについて正しく述べている選択肢を1つ選んでください。

 

1.    他のサーバーに適用できないトランザクションを記録しておくサーバー

2.    複数のマスターからの変更を調整し、競合解決を担うサーバー

3.    別のスレーブのマスターとして機能するスレーブ・サーバー

4.    循環レプリケーション・トポロジの最初のスレーブ

 

 

 

解答: 3

 

解説

リレー・スレーブとは、別のスレーブに対してレプリケーション・マスターとして動作するレプリケーション・スレーブのことです。マスター・スレーブの負荷を減らすことができます。階層を追加することで伝播の遅延が発生しやすくなるため、階層は浅い方が、深い方に比べてレプリケーション・ラグは少なくなります。

 

 

 

問題24:

次の結果を確認して下さい。

mysql> SHOW SLAVE STATUS\G

***************** 1. row *********************

Slave_IO_State: Queueing master event to the

relay log

...

Master_Log_File: mysql-bin.005

Read_Master_Log_Pos: 79

Relay_Log_File: slave-relay-bin.005

Relay_Log_Pos: 548

Relay_Master_Log_File: mysql-bin.004

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

...

Exec_Master_Log_Pos: 3769

...

Seconds_Behind_Master: 8

 

Read_Master_Log_Pos: 79は、何を示していますか。正しい選択肢を1つ選んでください。

1.     現在のマスターバイナリログファイル内の I/O スレッドが最後に読み取った位置。

2.     現在のリレーログファイル内の SQL スレッドが最後に読み取って実行した位置。

3.     このスレーブがマスターから遅延する必要がある秒数。

4.     このスレーブがどれだけ遅延しているかを示す秒数。

 

 

解答: 1

 

解説

Read_Master_Log_Posは、現在のマスターバイナリログファイル内の I/O スレッドが最後に読み取った位置を示します。Relay_Log_Posは、SQL スレッドが最後に読み取って実行した位置です。この2つに大きな差がある場合には、SQLスレッドの遅延が疑われます。

遅延がある場合、SQL_DELAYを確認します。このスレーブがマスターから遅延する必要がある秒数が示されており、遅延レプリケーションが設定されているかを確認できます。

Seconds_Behind_Masterは、このスレーブがどれだけ遅延しているかを秒数で示します。

 

 

 

問題25:

GTIDを使用したレプリケーションを使用しています。スレーブ上のGTIDaaa-bbb-ccc-ddd:2をスキップするために、以下のコマンドを実行しました。

 

1行目: SET GTID_NEXT='aaa-bbb-ccc-ddd:2';

2行目: BEGIN;

3行目: COMMIT;

4行目: SET GTID_NEXT='AUTOMATIC';

5行目: START SLAVE;


このコマンドでスキップすることはできますか。
入力したすべてのコマンド行を確認した上で、選択肢を1つ選んでください。

 

1.    できない。1行目が、SET GTID_IGNORE='aaa-bbb-ccc-ddd-eee:3';である必要がある。

2.    できない。1行目が、SET GTID_ESCAPE='aaa-bbb-ccc-ddd-eee:3'である必要がある;

3.    スキップできる。

4.    できない。5行目が、RESET SLAVEである必要がある。

 

 

解答: 3

 

解説

解答のとおりです。セッション変数GTID_NEXTに対象のGTIDを格納してから、空のトランザクションを実行します。GTID_NEXTAUTOMATICをセットすると、スレーブのバイナリログには3番目のトランザクションとして空のトランザクションが記述されます。レプリケーションを開始すると,次の4番目のトランザクションをマスターに要求します。