データベースとは、大量のデータをコンピューターで扱いやすい形に整理したものです。インターネット検索、チケット予約、ブログ、オンラインショッピングなど、Webサイトのコンテンツ管理にはデータベースとの連携が必要となることが多々あります。
データを格納する構造・アルゴリズムの違いによって、リレーショナルデータベース、カード型データベース、階層型データベースなどがありますが、現在はの主流はリレーショナル型データベースです。
データベースを管理するソフトウェアのことを一般にデータベース管理システム(DBMS:DataBase Mnanagement System)と呼びますが、その代表はオープンソースのMySQL(派生版:MariaDB) です。
MySQLは、オープンソースのリレーショナル型データベース管理システム (RDBMS) の一つで、世界でもっとも普及しているものです。また、MariaDBは、MySQLをフォークして立ち上げられたプロジェクトが開発する派生版です。いずれもオープンソースとして開発されています。
付記:MariaDB について
MySQLはOracle社によって開発やソースコード管理が行われているのに対し、MariaDBは、純粋なオープンソースプロジェクトです。MariaDBのシェアは、MySQLには及びませんが、多くのLinuxディストリビューションが MySQL に代わって MariaDB を採用している点、また一般ユーザーが使いやすいという点で、MariaDB は世界中で急速にシェアを拡大しています。基本的なコマンド・操作方法は同じなので、学習目的で個人で実装する場合は、MariaDBの方がいいかもしれません。
個人のPCにインストールする場合、XAMPP パッケージの導入が最も簡単です(同梱されています)。 XAMPPについては、LocalServer のページにも記載しています。DBサーバーの起動は、インストール後に、Manager ツールから MySQL の起動を選択するだけです。
レンタルサーバーでは、DBサービスそのものはほぼインストール済みです。管理画面のメニューにそってサービスを起動することになりますが、管理画面の仕様はサービスによって異なるので、データベースのセットアップに関する基本的な用語を理解していることが前提となります。
遠隔のLinuxマシン(CentOS)に Database をインストールするには、手元のPCの Terminal からSSH接続して、すべての操作をCUI(コマンド入力)で行う必要があります。
以下、MariaDBの場合と、MySQL8の2つの導入手順のメモを紹介します。
あくまでもメモです。この作業は、OS、そのバージョン、導入するDBの種類・バージョンによってそれぞれ異なります。インストール後の設定ファイル(my.cnf)の扱いや、認証方法の変更など、仕様の変更もあるので、同じ手順でうまくとは限りません
付記
説明の行頭に # があるのは rootでログインしていることを意味します。
# コマンドライン
一般ユーザでログインした場合は、コマンドの前に sudo が必要になります。
$ sudo コマンドライン
フラットな状態で提供された Linux(CentOS7)環境に、ターミナルからSSH接続でMariaDBをインストールする方法を紹介します。SSH接続って何? という方はこちら
インストールの前に、サーバーの環境を確認します。
# yum list installed | grep mysql
# yum remove mysql-libs
# yum list installed | grep mariadb
# yum remove mariadb*
# rm -rf /var/lib/mysql/
MariaDBの10系をインストールするためにはMariaDB専用レポジトリの追加が必要になります。
# yum list maria*
あればそのままインストール可能ですが、なければ以下で追加
# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
# yum list maria* 読み込んだプラグイン:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: ftp.tsukuba.wide.ad.jp : 利用可能なパッケージ MariaDB-backup.x86_64 10.3.15-1.el7.centos mariadb-main MariaDB-backup-debuginfo.x86_64 10.3.15-1.el7.centos mariadb-main MariaDB-cassandra-engine.x86_64 10.3.15-1.el7.centos mariadb-main MariaDB-cassandra-engine-debuginfo.x86_64 10.3.15-1.el7.centos mariadb-main MariaDB-client.x86_64 10.3.15-1.el7.centos mariadb-main :
# yum install MariaDB-server MariaDB-client
# yum list installed | grep MariaDB MariaDB-client.x86_64 10.3.15-1.el7.centos @mariadb MariaDB-common.x86_64 10.3.15-1.el7.centos @mariadb MariaDB-compat.x86_64 10.3.15-1.el7.centos @mariadb MariaDB-server.x86_64 10.3.15-1.el7.centos @mariadb
# which mysqld /usr/sbin/mysqld
# systemctl start mariadb参考:一般的なコマンド形式は以下
systemctl [Unitコマンド] [Unit名]
# ps -aux | grep mysqld
# systemctl enable mariadb
# mysql ← これで起動 MariaDB [(none)] > となる一旦 quit
MariaDB [(none)] > quit Bye
# mysql_secure_installation : Enter current password for root (enter for none):ここでは Enter のみ
OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n]ここで Y
New password: 新しいパスワードを入力 Re-enter new password: もういちど入力 Password updated successfully!以下、いろいろ尋ねられるが、基本すべて Y で完了
# mysql -u root -p参考:データベース一覧表示
MariaDB[(none)]>show databases;
# systemctl stop mariadb
# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
# systemctl start mariadb
# systemctl stop mariadb
# systemctl unset-environment MYSQLD_OPTS
# systemctl start mariadb
# mysql -u root -p
# mysql -u root -p以下のように表示されれば接続OKです。
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 8 ・・途中略・・ MariaDB [(none)]>
MariaDB [(none)]> SELECT Host,User,Password FROM mysql.user;
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> show databases;
MariaDB [(none)] > quit Bye
SSH接続で遠隔のCentOSに MySQL 8 をインストール
インストールの前に、サーバーの環境を確認します。
# yum list installed | grep MariaDB
# yum remove mariadb-libs
# rm -rf /var/lib/mysql/
単にインストールコマンドを打っただけでは、欲しいバージョンのものが入らない場合があります。バージョンによってリポジトリ情報の追加が必要です。
# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# yum repolist all | grep mysqlリスト中で「有効」のものが採用される前提
mysql80-community/x86_64 MySQL 8.0 Community Server 有効: 113
# yum install mysql-community-server
# systemctl start mysqld.service
# systemctl enable mysqld.service
# mysql ← これでは起動できません。初期パスワードを変更して設定する作業が必要になります。
# cat /var/log/mysqld.log | grep 'password is generated'> 最後の部分に初期パスワードが表示される
# mysql_secure_installation
# mysql -u root -p [Enter password: パスワードを入力
mysql> SELECT Host,User,Password FROM mysql.user;
mysql> create database wordpress;
mysql> show databases;
mysql> quit Bye
日本語文字化け回避のため、DBが使用する文字コードは正しく設定されていることが必要です。以下、文字コードを確認・変更する方法です。
mysql> show variables like "chara%";
+--------------------------+--------------------------------+ | 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 | utf8 | | character_sets_dir | /usr/share/mysql-8.0/charsets/ | +--------------------------+--------------------------------+ 8 rows in set (0.10 sec)
文字コードの変更を行うには、設定ファイルに指定を加える必要があります。
Linuxの場合 /etc/my.cnf が設定ファイルです。vi が使えない場合は、FTP でDLして、手元で編集して戻す・・という作業になります。
my.cnf をエディタで開いて、[mysqld] [client] [mysql]それぞれ「default-character-set」の文字コードを変更、あるいは追記を行います。
[mysqld] : default-character-set=文字コード
[client] : default-character-set=文字コード
[mysql] : default-character-set=文字コード
mysql> RESTART (MySQL8からこれができるようになりました)
mysql> show variables like "chara%";
phpMyAdmin は MySQL サーバーをブラウザから管理するためのDB接続クライアントツールで、PHPで書かれています。SQL の文法を知らなくてもデータベースに対する様々な操作が可能です(もちろん SQL を記述して実行することもできます)。
<?php /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * phpMyAdmin sample configuration, you can use it as base for * manual configuration. For easier setup you can use scripts/setup.php * * All directives are explained in Documentation.html and on phpMyAdmin * wiki <http://wiki.phpmyadmin.net>. * * @version $Id$ */ /* * This is needed for cookie based authentication to encrypt password in * cookie */ $cfg['blowfish_secret'] = 'ここには適当な文字列を入れる'; /* YOU MUST FILL IN THIS FOR COOKIE UTH! */ /* * Servers configuration */ $i = 0; /* * First server */ $i++; /* Authentication type */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* Server parameters */ $cfg['Servers'][$i]['host'] = 'localhost または サーバーアドレス'; ←これ $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; /* Select mysqli if your server has it */ $cfg['Servers'][$i]['extension'] = 'mysql'; /* User for advanced features */ $cfg['Servers'][$i]['controluser'] = '********'; ←これ $cfg['Servers'][$i]['controlpass'] = '********'; ←これ /* Advanced phpMyAdmin features */ 以下コメントアウト /* * End of servers configuration */ /* * Directories for saving/loading files from server */ $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; ?>
以下、上記と同様です。
MySQLiとは MySQL improved extension の略で、PHPからMySQL/MariaDBを操作するインターフェースを提供するPHPの拡張機能です。システムにこれが無い場合は、追加でインストールする必要があります。
# yum -y install php-mysql
失敗するときは、以下のように正しいリポジトリを見に行くように指示。
# yum install --enablerepo=remi,remi-php73 php-mysql
有効化のため再起動が必要です。
# systemctl restart httpd.service
参考:リポジトリ選択の重要性
リポジトリを指定せずにインストールしようとすると、デフォルトで有効化されていないリポジトリからのインストールは行われません。リポジトリ情報は /etc/yum.repos.d にあって、それぞれ有効/無効が記載されています。有効化したリポジトリの xxxx.repo ファイルを編集し、enabled=1 にして実行することで、それができるようになります。
default_authentication_plugin=mysql_native_password
mysql> SELECT user, host, plugin FROM mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | caching_sha2_password | +------------------+-----------+-----------------------+
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '(ここにパスワード)';
mysql> SELECT user, host, plugin FROM mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | mysql_native_password | +------------------+-----------+-----------------------+
ローカルマシンの場合も、リモートにSSH接続した場合も同様の操作です。
$ mysqlパスワードが設定されている場合は、以下のように入力し、その後、パスワードを入力することで接続が完了します。
$ mysql -u root -p
MariaDB [(none)] >
MariaDB [(none)] >create database [DB名];
MariaDB [(none)] >show databases;
MariaDB [(none)] > create user [ユーザー名] identified by [パスワード]; MariaDB [(none)] > grant all on [DB名].* to [ユーザー名];
MariaDB [(none)] > drop database [DB名];
MariaDB [(none)] > quit Bye
$ mysqldump -u [ユーザ名] -p [DB名] > [バックアップ名(拡張子 .sql)]
$ mysql -u [ユーザ名] -p [DB名] < [バックアップ名(拡張子 .sql)]注)上記、いずれも要求されるパスワードは DB利用者のパスワードです。
/var/lib/mysql
/Application/XAMPP/xamppfiles/var/mysql/