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」を指定しました。
そしてこの時点では接続できませんでした。
接続に失敗しました。
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から上記と同じ設定で接続確認を行います。
テスト接続を押下すると
今度は成功しました!
一応A5SQLからSQLを実行してみます。
ただのselect文です。
select * from m_user;
問題ないようです。開発環境が整ってきた感がありますね。