twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル Linux 管理者向け MariaDB 実践ハウツー

Linux 管理者向け MariaDB 実践ハウツー

原文は、こちらです。

Mariadb logo

データベースを制するものは世界を制すると言われます。別に世界を制することがなくても、データベースに関するコマンドを理解しておくことは、今後の役に立ちます。

テーブルの作成、データの追加のような MariaDB のコマンドを手入力する必要はありません。それらは、データベースのバックエンドで他のプログラムが処理してくれます。以下の章では、もっと現実的なコマンドについて学びます。つまり、ルートのパスワードの復旧、データベースの内容の参照、ヘルプの参照、特定の文字列の検索について勉強します。

 

ルートのパスワードを失くした

MariaDB インストール時に、ルート パスワードを作成することができます。万が一忘れてしまったら、どうすれば良いでしょうか。心配することはありません。Linux のルート アクセス権限を持っていれば、MariaDB にアクセスできるのです。

まず、DB が実行中であれば停止させます。Red Hat Linux、CentOS や Fedora であれば、”systemctl” コマンドを使います。

$ sudo systemctl stop mariadb.service

Debian、Ubuntu と Linux Mint であれば、”service” コマンドを使用します。

$ sudo service mysql stop
 * Stopping MariaDB database server mysqld  

mysqld_safe” コマンドで MariaDB を再起動します。”mysqld_safe” コマンドは MariaDB を安全に起動します。”—skip-grant-tables” オプションは、何らユーザー制限のない状態でサーバーを起動します。つまり、完全にオープンな状態です。

$ sudo mysqld_safe --skip-grant-tables --skip-networking &
[1] 11278
carla@studio:~/Documents/1articles/linuxcom$ 141029 19:37:57 mysqld_safe Logging to 
syslog.
141029 19:37:57 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

—skip-networking” オプションは、ネットワークからのアクセスを禁止します。リモート ロギングをしている時は使わないでください。”mysql” コマンド シェルを使って、ルート パスワードをリセットします。MariaDB にログインします。”mysql” データベースを選び、ルート パスワードをリセットして、直ちに終了します。

$ mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.39-MariaDB-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use mysql;
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
MariaDB [mysql]> update user set password=PASSWORD("new-password") where User='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> exit
Bye

新しいパスワードでログインしてみましょう。

$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.39-MariaDB-0ubuntu0.14.04.1 (Ubuntu)

次のコマンドを使うと、1 行で、MariaDB にログインすることなく、任意のユーザーのパスワードを変更することができます。 

$ mysqladmin -u carla -p 'old-password' password 'new-password'

Debian のバックドア

Debian は、システムで使用する MariaDB のパスワードをテキスト形式で ”/etc/mysql/debian.cnf” に格納しています。

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = LofpsiQCKOcGzoqJ

このユーザーを使ってログインし、ルート パスワードのリセットを含むすべてのことが可能です。このファイルは、ルートのみ読み書きできるようにしておきます。

中を覗く

データベースをいじる時には、適切なシステム ユーザー権限が必要です。ログインしたら、”mysql” データベースを選択し、ユーザーを表示します。

$ mysql -u root -p
password:
MariaDB [(none)]> use mysql;
Database changed
MariaDB [mysql]> SELECT user, host, password FROM user;
+------------------+------------+---------------+
| user             | host       | password      |
+------------------+------------+---------------+
| root             | localhost  | *F6FE8C583C17 |
| root             | 127.0.0.1  | *F6FE8C583C17 |
| root             | ::1        | *F6FE8C583C17 |
| debian-sys-maint | localhost  | *21B2FE94870C |
5 rows in set (0.00 sec)

ルート パスワードを設定していなかったら、そのフィールドは空白です。コンフィギュレーション ファイル内の ”debian-sys-maint” のパスワードと異なり、すべて暗号化されています。ルート ユーザーがたくさんありますね。これは、MariaDB がユーザーの接続元を記録しているため、ローカルのルートが標準で記録されているのです。

次のようにして、データベース全部を見ることができます。

MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| owncloud           |
| redbooks           |
| bluebooks          | 
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

information_schema”、”mysql” と ”performance_schema” は、MariaDB の内部データベースです。これらを消去したり、変更してはなりません。大変なことになります。これらの内容を見ると、テーブル名がわかります。

MariaDB [mysql]> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |

テーブルのすべてのコラム、ユーザーに割り当て可能なすべての変数を含むテーブル構造を見ることができます。

MariaDB [mysql]> describe user;
+------------+------------+------+-----+---------+-------+
| Field      | Type       | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+
| Host       | char(60)   | NO   | PRI |         |       |
| User       | char(16)   | NO   | PRI |         |       |
| Password   | char(41)   | NO   |     |         |       |
| Select_priv| enum       | NO   |     | N       |       |
| Insert_priv| enum       | NO   |     | N       |       |
| Update_priv| enum       | NO   |     | N       |       |

データベースのユーザーをリストするために、どのフィールドを選択すればよいかがわかります。テーブル内のデータを見たい時は、以下の例を見てください。

MariaDB [mysql]> select * from user;

たくさんのフィールドがあるので、このままでは表示しきれません。選択して、特権ユーザーだけを表示しましょう。

MariaDB [mysql]> SELECT user, super_priv FROM user;
+------------------+------------+
| user             | super_priv |
+------------------+------------+
| root             | Y          |
| root             | Y          |
| root             | Y          |
| root             | Y          |
| debian-sys-maint | Y          |
| carla            | Y          |
| layla            | N          |
| toshi            | N          |

ここまでで、テーブルにあるフィールドの確認とフィールド内部の検索について理解できました。

任意テキストの検索

データの検索の方法の 1 つとして、データベースをテキスト ファイルにダンプし、そのテキスト ファイルを検索するということがあります。下記の例は、ダンプしたファイルを改行処理するので、人間が読むことができ、”grep” コマンドも利用できます。

$ mysqldump -u user -p --extended-insert=false --all-databases  > dbdump.txt

特定のデータベースだけをダンプすることもできます。

$ mysqldump -u user -p --extended-insert=false --databases db2 db3 > dbdump.txt

“grep” コマンドを使って、テキスト検索をします。以下の例は ”pinecones” を検索しています。

$ grep -i pinecones  dbdump.txt 
INSERT INTO `forest` VALUES (4,'PINECONE');
INSERT INTO `forest` VALUES (11,'PINECONES');
INSERT INTO `mountain` VALUES (21,'PINECONE');

結果として、検索ワードがどのテーブルにあるかが得られます。ここでは、”forest” と ”mountain” です。すべての検索結果が表示されます。

MariaDB は、ビルトインのヘルプを持っています。

MariaDB [mysql]> help contents
You asked for help about help category: "Contents"
For more information, type 'help ', where  is one of the following
categories:
   Account Management
   Administration
   Compound Statements
   Data Definition
   Data Manipulation

MySQL は、消え去ったわけではありません。しかし、MariaDB は Linux ディストロの中で標準的なデータベースとして急速に伸びつつあります。そして、反 Oracle ファンは、MySQL からの置き換えを行いつつあります。 MariaDB.com には、もっと詳細な情報があります。そして、Moving from MySQL には、置き換えを考えているユーザーのためのヘルプが満載です。

Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2018/10/09 2018年 10月 08日
  2. Today's Linux 2018/10/10 2018年 10月 09日
  3. Today's Linux 2018/10/12 2018年 10月 11日
  4. Today's Linux 2018/10/17 2018年 10月 16日
  5. Today's Linux 2018/10/18 2018年 10月 17日

Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!