SEワンタンの独学備忘録

独学した内容や資格試験に対する取り組みの備忘録

【MySQL】CentOS7@VirtualboxにMySQL5.7をインストールする

Virtualbox上のCentOS7にMySQLをインストールして、ホストマシンのA5SQLから接続できるようにします。

MySQLのインストール

自力だとやはり厳しいのでインストールには以下を参考にさせていただきました。

CentOS 7 に MySQL 5.7 を yum インストールして初期設定までやってみた - enomotodev’s blog

MariaDBの削除

CentOS7にはデータベースサーバの MySQL が MariaDB に置き換えられたようです。
ライブラリを削除しておきます。

sudo yum remove mariadb-libs
MySQLのダウンロード

yumリポジトリにMySQLを追加する。

sudo rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-27.noarch.rpm
MySQLのインストール

yumリポジトリからインストール。

sudo yum install -y mysql-community-server


バージョン確認コマンド。

mysqld --version

以下の表示が確認できOK

mysqld  Ver 5.7.27 for Linux on x86_64 (MySQL Community Server (GPL))
MySQLの起動

MySQLサービスの起動

sudo systemctl start mysqld.service

自動起動の設定

sudo systemctl enable mysqld.service

MySQLの初期設定

初期パスワードの確認
sudo cat /var/log/mysqld.log | grep password

表示される[パスワード]の部分を記録しておく。

2019-09-08T13:55:22.025032Z 1 [Note] A temporary password is generated for root@localhost: [パスワード]
セキュリティの設定
mysql_secure_installation

初期パスワードを入力し、新規パスワードを入力。
他の項目はとりあえずyesで解答しました。

MySQLへのログイン確認
mysql -u root -p


無事にログインできたらデータベースが表示できることを確認。

show databases;
設定変更

設定ファイルの変更を行います。

vim /etc/my.cnf

以下の行を追加した。

#文字コードの設定
character-set-server = utf8
#有効期限の設定
default_password_lifetime = 0


MySQLの再起動

sudo systemctl restart mysqld.service

MySQL用ユーザの作成

ユーザ作成

MySQLにrootでログインし、以下を実行します。
なお、入力部分はシングルクォーテーション(’)で囲わないとエラーになるようです。

CREATE USER [ユーザ名]@[ホスト名] IDENTIFIED BY [パスワード];
権限の設定

全てのデータベースが利用できるように設定。

GRANT ALL ON *.* TO  [ユーザ名]@[ホスト名]';
FLUSH PRIVILEGES;


ユーザの確認

SELECT user,host,plugin FROM mysql.user;

ホストマシンからVirtualbox上のMySQLに接続する

下準備

接続確認がやりやすいように新たにデータベースを作成しておきます。

データベースの作成。

CREATE DATABASE [データベース名];

テーブルの作成(SQLはどこかの使いまわしですね。)

CREATE TABLE APP_DB.m_user
(
	-- ユーザID
	user_id varchar(10) NOT NULL UNIQUE COMMENT 'ユーザID',
	-- ユーザ名
	user_name varchar(30) NOT NULL COMMENT 'ユーザ名',
	-- 削除フラグ
	delete_flg boolean NOT NULL DEFAULT false COMMENT '削除フラグ',
	PRIMARY KEY (user_id)
)DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

サンプルデータの挿入。

-- インサート文
INSERT INTO APP_DB.m_user (user_id, user_name, delete_flg) VALUES ('u0001', 'wantan', false);
INSERT INTO APP_DB.m_user (user_id, user_name, delete_flg) VALUES ('u0002', 'testuser', false);
INSERT INTO APP_DB.m_user (user_id, user_name, delete_flg) VALUES ('u0003', 'ワンタン', false);
INSERT INTO APP_DB.m_user (user_id, user_name) VALUES ('u0004', 'あいちゃん');
接続用ユーザの作成

ホストマシンから接続するためにホスト用ユーザを作成しないとダメなようです。
ユーザの作成の作成方法自体は上記のものと同様です。
バーチャルボックスにホストから接続した場合ホスト側のアドレスは「10.0.2.2」と認識されるようです。
ユーザ名は適宜修正してください。

ユーザ作成

CREATE USER 'wantanhost'@'10.0.2.2' IDENTIFIED BY [パスワード];

権限の設定

GRANT ALL ON *.* TO 'wantanhost'@'10.0.2.2';
FLUSH PRIVILEGES;
Virtualboxのポートフォワード設定

そのまま接続しようとしても多分接続できないはずなのでポートフォワードの設定を行います。

名前 プロトコル ホストポート ゲストポート
mysql TCP 53306 3306
接続確認(失敗)

この時点で、ホストマシンの「A5sql」から接続確認を行いました。
接続時の設定は以下のような感じ。

ポートフォワードを利用するのでlocalhostがホスト名になり、ポート番号は53306。
ユーザは外部(ホストマシン)接続用ユーザ。
データベースは何でもいいのかもしれませんが、新規に作成した「APP_DB」を指定しました。

f:id:wantanBlog:20190909123051p:plain


そしてこの時点では接続できませんでした。

f:id:wantanBlog:20190909124707p:plain

接続に失敗しました。

Lost connection to MySQL server during query

Error on data reading from the connection:

接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。.

Socket Error Code: 10060($274C)

メッセージを見ただけで原因が分かるようなメッセージになっていません。
以前の私ならここで検索マシンになるところでしたが今はなんとなくあたりがつきます。

ファイアウォールの設定

ここは普通にLinuxコマンドです。

接続許可サービスの確認
ここでmysqlが表示されていないことを確認します。

firewall-cmd --list-services --zone=public --permanent


MySQLのポート開放

firewall-cmd --add-service=mysql --zone=public --permanent


ファイアウォール設定の再読み込み

firewall-cmd --reload

再確認
今後はmysqlが表示されていることを確認します。

firewall-cmd --list-services --zone=public --permanent
接続確認

再度ホストマシンのA5SQLから上記と同じ設定で接続確認を行います。

テスト接続を押下すると

f:id:wantanBlog:20190909125423p:plain


今度は成功しました!


一応A5SQLからSQLを実行してみます。

ただのselect文です。

select *
from m_user;

f:id:wantanBlog:20190909125849p:plain



問題ないようです。開発環境が整ってきた感がありますね。