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について

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

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

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

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

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

乞うご期待!