- 投稿日:2020-10-20T23:30:00+09:00
MySQLにホームディレクトリ.my.cnfの認証情報でログインに失敗する
はじめに
本番環境を仕様書にして検証環境を構築している最中のこと。
本番環境のシェルスクリプトがmysqlコマンドをユーザID、パスワードを渡さずに実行しています。ユーザID、パスワードは、ホームディレクトリの.my.cnfファイルに定義されていたので、検証環境も同じように定義しました。(本番環境、検証環境でパスワードは異なる)
検証環境でシェルスクリプトを実行すると、MySQLのログインに失敗し実行エラーが発生する。
それが解決できたので、同じ事象が起きた時のために情報をまとめます。環境
- CentOS Linux release 7.8.2003 (Core)
- mysql Ver 8.0.22
ログインできないケース
認証情報の定義
.my.cnf[client] user = root password = Pass1234#ログイン実行結果
console[root@dev01 ~]# mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)原因
もしかして、パスワードの#がコメントの始まりとして無視されているのではないか?
パスワードをダブルクォーテーションで括ってみます。.my.cnf[client] user = root password = "Pass1234#"console[root@dev01 ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 8.0.22 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>今度はログインできました!
最後に
検証環境でシェルスクリプトが正常実行できるようになりました。
設定ファイルの設定値が文字列の場合は、クォーテーションで括ったほうが良いのかな。
- 投稿日:2020-10-20T21:36:07+09:00
yps並走備忘録 Task7 Web-APIとAjax通信を利用したアプリケーションの作成(1ページアプリ)
というわけで2020/10/20日現在数名の方が沼にハマっていると思われるTask 7ですが、足跡を残すことで少しでも助けになればと思い、本記事にやったことなどをまとめていきます。
下準備:MySQLのデータを引っ張ってくる
まずはTask 3 : SQL:テーブル作成(復習)の手順と下記のQiita記事を参考にMySQL公式サイトからサンプルデータを引っ張ってきます。
+-----------------+ | Tables_in_world | +-----------------+ | city | | country | | countrylanguage | +-----------------+アプリ構築&jsライブラリ導入
上記テーブルが作成されたらTask6同様、アプリケーションを構築してDBと連携させましょう。
アプリケーションが構築できたらいよいよ今回の目玉のjsライブラリを下記記事を参考に導入しましょう
本タスクに関してはおススメはCDNを使うか、jsファイルをwget等でDLしてpublicに配置した上で読み込むこと。
(自分はnpm使って読み込んだのですが、この方法だとjsを記述して挙動を変更した際などに反映を確認するのにいちいちLaravel Mixを使わないといけなくなってしまい、結構面倒でした)jsファイルをBlade内のヘッダーで読み込んだら一先ず地球儀を表示してみましょう
<div id="globalArea" style="width:800px;height:420px"></div>全画面にする場合はスタイルの指定を
width:100vw; height:100vh;
にすればおk次に、JavaScript側からこの「divタグ」を取得して3Dの地球を生成します。
こちらもbladeに直書きが一番手っ取り早いconst container = document.getElementById( "globalArea" ); const controller = new GIO.Controller( container ); controller.init();これで一先ず地球儀が表示されるはず。簡単ですね。
レーザービーム発射!
次はこの地球儀にデータを突っ込んでレーザービームを出してあげましょう。
three.jsとgio.jsを読み込んだ次の行で次のスクリプトを読み込んであげます。<script src="https://raw.githack.com/syt123450/giojs/master/assets/data/sampleData.js"></script>そのあとにcontroller.init()関数の前後に下記を記述するだけです。
controller.addData(data);ここまでは比較的簡単ですね。
公式ドキュメントは英語ですがザックリ説明すると輸出国(e)と輸入国(i)の2桁のISO国コードと値(v)をまとめたjsonデータをcontroller.addData()関数で渡してやるとビームが出るそうです。
なので最大問題はどうやってそんな『いい感じのデータ』を探すかなんですが、いい感じのデータを提供してくれるAPIを探すというのがこのタスク最大の沼なので、一先ずそっちは置いておいて、まずはMySQLのデータをAjax通信で取得するのを先にやっちゃうのがおススメです。
Ajax通信によるデータの取得
Ajaxはザックリ言うと『画面変遷を行わずにデータを取得し処理を実行するための技術』です。
これに関しては補足説明が出ていますので、下記の一連のツイートと参考サイトを見ながらやってみましょう。
(なお、本タスクではjQueryを使用してAjax通信を行います)とりあえずオレオレデータを使ってMySQL⇒Laravelのエンドポイント⇒Ajaxで取得までできればタスクの半分はクリアです。
最大の敵はWEB-API!
本タスクで最も大きなハマりポイントはここですね。
- 日本語のドキュメントのあるAPIで世界規模のデータを扱っているものが少ない
- 英語のドキュメントはそもそも難易度がVERY HARD
というところで、非常に難航している方が多そうです。
日本語のドキュメントがあるAPIとしてはypsの委員長ことmiyupakaさんが使っているRESAS-APIやe-statの中から日本対海外の貿易関係のデータを利用するのが比較的難易度が低いかと思います。
いずれにしても今回の課題の最大の難関、WEB-APIに関しては
- APIのドキュメントを読んだ上で
- クエリパラメーターを把握し
- 返ってくるデータ構造を把握し
- 返ってきたデータをいい感じに成形(ごにょごにょ)して
- 最終的にフロントのcontroller.addData()関数にいい感じのjsonに変換して渡す
という一連の操作を行うプログラムを組めるかどうかのテストだという認識です。
具体的にどんな風に進めたのかはまた別記事にまとめたいと思います。
(一先ずここまで…)以上
- 投稿日:2020-10-20T21:36:07+09:00
yps並走備忘録 Task7 Web-APIとAjax通信を利用したアプリケーションの作成(1ページアプリ)①
というわけで2020/10/20日現在数名の方が沼にハマっていると思われるTask 7ですが、足跡を残すことで少しでも助けになればと思い、本記事にやったことなどをまとめていきます。
下準備:MySQLのデータを引っ張ってくる
まずはTask 3 : SQL:テーブル作成(復習)の手順と下記のQiita記事を参考にMySQL公式サイトからサンプルデータを引っ張ってきます。
+-----------------+ | Tables_in_world | +-----------------+ | city | | country | | countrylanguage | +-----------------+アプリ構築&jsライブラリ導入
上記テーブルが作成されたらTask6同様、アプリケーションを構築してDBと連携させましょう。
アプリケーションが構築できたらいよいよ今回の目玉のjsライブラリを下記記事を参考に導入しましょう
本タスクに関してはおススメはCDNを使うか、jsファイルをwget等でDLしてpublicに配置した上で読み込むこと。
(自分はnpm使って読み込んだのですが、この方法だとjsを記述して挙動を変更した際などに反映を確認するのにいちいちLaravel Mixを使わないといけなくなってしまい、結構面倒でした)jsファイルをBlade内のヘッダーで読み込んだら一先ず地球儀を表示してみましょう
<div id="globalArea" style="width:800px;height:420px"></div>全画面にする場合はスタイルの指定を
width:100vw; height:100vh;
にすればおk次に、JavaScript側からこの「divタグ」を取得して3Dの地球を生成します。
こちらもbladeに直書きが一番手っ取り早いconst container = document.getElementById( "globalArea" ); const controller = new GIO.Controller( container ); controller.init();これで一先ず地球儀が表示されるはず。簡単ですね。
レーザービーム発射!
次はこの地球儀にデータを突っ込んでレーザービームを出してあげましょう。
three.jsとgio.jsを読み込んだ次の行で次のスクリプトを読み込んであげます。<script src="https://raw.githack.com/syt123450/giojs/master/assets/data/sampleData.js"></script>そのあとにcontroller.init()関数の前後に下記を記述するだけです。
controller.addData(data);ここまでは比較的簡単ですね。
公式ドキュメントは英語ですがザックリ説明すると輸出国(e)と輸入国(i)の2桁のISO国コードと値(v)をまとめたjsonデータをcontroller.addData()関数で渡してやるとビームが出るそうです。
なので最大問題はどうやってそんな『いい感じのデータ』を探すかなんですが、いい感じのデータを提供してくれるAPIを探すというのがこのタスク最大の沼なので、一先ずそっちは置いておいて、まずはMySQLのデータをAjax通信で取得するのを先にやっちゃうのがおススメです。
Ajax通信によるデータの取得
Ajaxはザックリ言うと『画面変遷を行わずにデータを取得し処理を実行するための技術』です。
これに関しては補足説明が出ていますので、下記の一連のツイートと参考サイトを見ながらやってみましょう。
(なお、本タスクではjQueryを使用してAjax通信を行います)とりあえずオレオレデータを使ってMySQL⇒Laravelのエンドポイント⇒Ajaxで取得までできればタスクの半分はクリアです。
最大の敵はWEB-API!
本タスクで最も大きなハマりポイントはここですね。
- 日本語のドキュメントのあるAPIで世界規模のデータを扱っているものが少ない
- 英語のドキュメントはそもそも難易度がVERY HARD
というところで、非常に難航している方が多そうです。
日本語のドキュメントがあるAPIとしてはypsの委員長ことmiyupakaさんが使っているRESAS-APIやe-statの中から日本対海外の貿易関係のデータを利用するのが比較的難易度が低いかと思います。
いずれにしても今回の課題の最大の難関、WEB-APIに関しては
- APIのドキュメントを読んだ上で
- クエリパラメーターを把握し
- 返ってくるデータ構造を把握し
- 返ってきたデータをいい感じに成形(ごにょごにょ)して
- 最終的にフロントのcontroller.addData()関数にいい感じのjsonに変換して渡す
という一連の操作を行うプログラムを組めるかどうかのテストだという認識です。
具体的にどんな風に進めたのかはまた別記事にまとめたいと思います。
(一先ずここまで…)以上
- 投稿日:2020-10-20T21:08:15+09:00
Laravel+vue.jsでサービス開発する際の一連の流れ(1)〜環境構築編〜
LaravelとVue.jsを使ってサービスを開発しました。その過程でやったことと、参考にした記事などを書いていきます。備忘録兼、私と同じような初心者の道標になるような記事になれば良いなと思います。
環境
・Laravel(5.8.38)
・Vue.js
・MAMPプロジェクト作成
開発に必要なファイル一式が揃ったフォルダを作成します。プロジェクト作成には2種類の方法があります。
- laravel new
- composerコマンド
laravel new
を使うと最新バージョンのLaravelがインストールされるようです。僕は5.8系を使いたかったので、composerコマンドを使いました。ターミナル% composer create-project "laravel/laravel=(Laravelのバージョン)" (プロジェクト名)
僕の場合、実際のコマンドは下のようになりました。
MAMPを使用しているので、cd /Applications/MAMP/htdocs
でhtdocsディレクトリに移動し、実行します。プロジェクト名は、laravel_exampleとします。ターミナル% composer create-project "laravel/laravel=5.8.*" laravel_example
すると、パッケージがズラーッとインストールされ、laravel_exampleディレクトリが作成されました。
laravel_exampleディレクトリに移り、Laravelのバージョンを確認します。ターミナル% php artisan -v Laravel Framework 5.8.38
ちゃんと5.8系のLaravelがインストールされました。
参考記事:【Laravel入門】プロジェクト作成から起動まで
ディレクトリ構造
先ほどインストールしたディレクトリの配下に、appディレクトリとかconfigディレクトリとか、いろいろ入ってます。
最初はあまり気にしなくていいと思うし、覚える必要もないと思います。開発をしていくと勝手にこの辺には何が入ってる、というのはわかってきます。一応、公式の解説ページを載せときます。
Laravel 5.8 ディレクトリ構造
ちなみに、この公式のドキュメント、開発するにあたってめちゃくちゃお世話になります。簡潔にまとまっている分初心者にはちょっと難しく感じられ、読むのを避けがちです。
しかし、ググっても解決できず、気が進まないながらも公式ドキュメントを読んだら簡単に解決できた、ということが少なからずありました。データベース(mysql)の設定
データベースの作成
まず、今回の開発で使うデータベースを作成しましょう。
プロジェクトのrootディレクトリ直下にて(ここでなくても良いかもしれないが)ターミナル% mysql -u root -p Enter password:
すると、パスワードの入力を求められます。僕の場合、特に何も設定していなかってのでパスワードはrootです(ユーザー名もroot)。入力するとmysqlが起動し、ターミナルの表示が
%
からmysql>
に変わります。
既に存在するデータベース一覧はSHOW DATABASES;
で表示できます。最後の「 ; 」を忘れないようにしましょう。ターミナルmysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | performance_schema | | mysql | | php_sample01 | | sample | | sample2 | | sys | | wordpress | +--------------------+ 8 rows in set (0.03 sec)データベースを作成するコマンドは
ターミナルmysql> CREATE DATABASE (データベース名);僕の場合、下のようになりました。データベース名もlaravel_exampleにしました。なんでも良いと思います。
ターミナルmysql> CREATE DATABASE laravel_example; Query OK, 1 row affected (0.00 sec)もう一度データベースの一覧を見てみると、laravel_exampleが作成されていることが確認できます。
ターミナルmysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | laravel_example | | mysql | | performance_schema | | php_sample01 | | sample | | sample2 | | sys | | wordpress | +--------------------+ 9 rows in set (0.00 sec)参考記事:MySQLをMacのターミナルで操作するときのメモ
Laravelのデータベース設定
作成したデータベースをLaravelで使えるように設定します。先ほど作ったディレクトリ(僕ならlaravel_exampleディレクトリ)の中にあるファイルを修正します。
.env
(プロジェクトのルートディレクトリ直下にあります。)database.php
(configディレクトリにあります。).env
.env
ファイルとは?.envファイルを使って開発環境と本番環境を切り替えたり、データベースなどの接続情報の変更を行うことができます。つまりLaravelにとって重要な設定変更このは.envファイルを介することで簡単に行うことができます。例えば開発環境では簡易に利用できるsqliteのデータベースに接続し、本番環境ではmysqlのDBに接続といった変更が可能です。
参考記事:入門者のためのLaravel .envファイルの基礎と理解とりあえずは、この
.env
ファイルに情報を入力していけば、開発環境の設定ができます。
.env
の中でデータベースに関わる部分は以下の通りです。.envDB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel (データベース名) DB_USERNAME=root (ユーザー名) DB_PASSWORD= (パスワード)これを修正していきましょう。
DB_CONNECTION、DB_HOST等の項目の意味は下の記事を参考に。
参考記事:保存版!Laravelの.envでできること大全僕の場合、mysqlの設定は変更していないので、ユーザー名もパスワードもrootのままでした。一応、MAMPを使っている場合はサーバーをオンにした後に自動で表示されるページにも載っています。(下の画像の赤枠で囲んだところです)
データベース名はさっきCREATE DATABASE
で作成したものを記入します。.envDB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_example DB_USERNAME=root DB_PASSWORD=root画像をよく見ると、
Socket /Applications/MAMP/tmp/mysql/mysql.sock
とも書いてありますね。これも.env
に追加しておきましょう。
ちなみに、下記のsqlコマンドを打っても、socketを取得できます。ターミナルmysql> SHOW VARIABLES LIKE '%sock%'; +-----------------------------------------+-----------------------------------------+ | Variable_name | Value | +-----------------------------------------+-----------------------------------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | -1 | | socket | /Applications/MAMP/tmp/mysql/mysql.sock | +-----------------------------------------+-----------------------------------------+ 3 rows in set (0.00 sec).envDB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_example DB_USERNAME=root DB_PASSWORD=root DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sockこれで
.env
ファイルの設定、つまり、開発環境の設定がほぼ完了しました。database.php
開発環境の設定が「ほぼ」完了した、と言いましたが、それは
.env
に設定した内容をLaravelに反映させる必要があるからです。
config
ディレクトリ内にあるdatabase.php
ファイルで、.env
に書いたデータベース情報を読み込んでいます。※ちなみに、
database.php
が.env
のデータベース情報を読み込んでいるのと同様に、mail.php
ではメールの情報を、cache.php
ではキャッシュの情報を.env
から読み込むといった感じになっています。今回使うのはmysqlなので、
database.php
内のmysqlの部分を修正していきましょう。database.php'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
env()
はヘルパ関数(Laravelが用意してくれている便利メソッド)で、第1引数で.env
の値を取得、第2引数は.env
内に値がなかった場合のデフォルトの値を設定します。個人的には、第2引数は全て
''
で良いのでは?と思います。
なぜなら、サービスを作り終えてサーバーにデプロイする際(開発環境から本番環境に切り替える際)、デフォルト値を下手に設定していたせいでエラー地獄に陥ったからです。具体的には、本番環境では
unix_socket
を設定する必要がなかったのですが、database.php'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),と書いていたためにデフォルト値の
/Applications/MAMP/tmp/mysql/mysql.sock
が設定されてしまいエラーになるなど。
デプロイ時にこうなることを避けるために、僕はデフォルト値(第2引数)は全部空にしておこうと思います。
(複数人で開発する際には、環境を合わせるためにデフォルト値を設定しておいた方が良いのかも?)database.php'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', ''), 'port' => env('DB_PORT', ''), 'database' => env('DB_DATABASE', ''), 'username' => env('DB_USERNAME', ''), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],これで開発環境の設定は完了です。
動作確認
実際に正しくテーブルが作成できるか試してみましょう。
プロジェクトのルートディレクトリに移動し、ターミナル% php artisan migrate
Laravelは
users
テーブルとpassword_resets
テーブルを作成するためのファイルを予め準備してくれており、このコマンドを打つことでテーブルが作成されます。ターミナルlaravel_example % php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.03 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.03 seconds)
mysqlを確認しましょう。
use (データベース名);
で使用するデータベースを選択し、show tables;
でそのデータベースに登録されているテーブルを表示できます。ターミナルmysql>use laravel_example; 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 mysql> show tables; +---------------------------+ | Tables_in_laravel_example | +---------------------------+ | migrations | | password_resets | | users | +---------------------------+ 3 rows in set (0.00 sec)
users
テーブルとpassword_resets
テーブルがしっかり作成されています!ちなみに、Laravelにはテーブル作成の巻き戻しをするコマンドもあります。
ターミナルphp artisan migrate:rollback
php artisan migrate
とphp artisan migrate:rollback
はセットで覚えときましょう。後々たくさん使います。ターミナルlaravel_example % php artisan migrate:rollback Rolling back: 2014_10_12_100000_create_password_resets_table Rolled back: 2014_10_12_100000_create_password_resets_table (0.02 seconds) Rolling back: 2014_10_12_000000_create_users_table Rolled back: 2014_10_12_000000_create_users_table (0 seconds)
コマンド入力後、テーブルを確認してみると・・・
ターミナルmysql> show tables; +---------------------------+ | Tables_in_laravel_example | +---------------------------+ | migrations | +---------------------------+ 1 row in set (0.00 sec)
users
テーブルとpassword_resets
テーブルが削除されています。
ちゃんとデータベースを操作できているようですね。デバッグ
最後にデバッグの設定です。LarabelではデバッグのON,OFFも簡単に設定できます。
デバッグをONにするには.envファイルにて.envAPP_DEBUG=true
とするだけです。これは
config
ディレクトリのapp.php
で読み込まれています。app.php/* |-------------------------------------------------------------------------- | Application Debug Mode |-------------------------------------------------------------------------- | | When your application is in debug mode, detailed error messages with | stack traces will be shown on every error that occurs within your | application. If disabled, a simple generic error page is shown. | */ 'debug' => env('APP_DEBUG', false),ここに書かれている通りで、
APP_DEBUG
がtrue
なら、作成中のアプリケーションでエラーが起きると、エラーが起きるまでの過程とエラーメッセージを画面に表示してくれます。
false
なら、シンプルなエラーページが表示されるだけです。
サービスを公開する時には、falseにするのを忘れないようにしましょう。以上で環境構築編は終了です。あとはジャンジャン開発していきましょう!
続く
- 投稿日:2020-10-20T18:09:43+09:00
【Docker】開発環境構築 Rails6 / Ruby2.7 / MySQL8
はじめに
DockerでRails6, MySQLにて環境構築をする際になかなかてこずってしまったので、備忘録もかねて記事に残します。
つまずいた部分として、
Rails5 とは異なり Rails6 ではモダンなフロントエンド開発を強力にサポートするWebpackをRuby on Railsで使うためのgemパッケージであるWebpackerの導入が必須となったことがある。※Docker初心者であり各ファイルの記述についても理解できていない部分も多いです。
環境・バージョン
- Macbook Air Catalina
- Ruby 2.7
- Rails 6
- MySQL 8.0
環境構築完了までの手順
- プロジェクトのフォルダを用意
- 5つのファイルを用意
- 各ファイルを記述
- Rails プロジェクトの開始(rails new)
- Dockerイメージのビルド
- database.yml の編集
- DBを作成(db:create)
- コンテナを起動
実際に環境構築してみる
1. プロジェクトのフォルダを用意
任意の名前のフォルダを作成する(コマンドでなくてもOK)
mkdir dockerSampleApp2. 5つのファイルを用意
1.で作成したフォルダ内にファイルを作成する
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
entrypoint.sh
3. 各ファイルを記述
Dockerfile
プロジェクトのフォルダ名に関係なくmyappの箇所はmyappのままでOKです。
DockerfileFROM ruby:2.7 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update -qq \ && apt-get install -y nodejs yarn \ && mkdir /myapp WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install COPY . /myapp COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]docker-compose.yml
docker-compose.ymlversion: '3' services: db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: password ports: - '3306:3306' command: --default-authentication-plugin=mysql_native_password volumes: - mysql-data:/var/lib/mysql web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/myapp ports: - "3000:3000" depends_on: - db stdin_open: true tty: true volumes: mysql-data: driver: localGemfile
Gemfilesource 'https://rubygems.org' gem 'rails', '~>6'Gemfile.lock
Gemfile.lock# このファイルには何も記述しない
entrypoint.sh
entrypoint.sh#!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /myapp/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@"4. Rails プロジェクトの開始(rails new)
コマンドを実行
$ docker-compose run web rails new . --force --no-deps --database=mysql --skip-test --webpacker --api今回使用オプションについて
--force
既存のGemfileを上書きする--no-deps
リンクしたサービスを起動しない--database=mysql
データベースにMySQLを指定--skip-test
Minitest のインストールをスキップ(テストはRSpecを導入予定のため)--webpacker
webpacker をインストール(Rails6 では必須のパッケージ管理ツール)--api
APIだけ作りたいためAPIモードで実行。これにより不要なView・UI関連のライブラリがインストールされない。※オプションについては適時カスタムして使用する
5. Dockerイメージのビルド
イメージビルドとは、各種依存ライブラリやミドルウェアをインストールしたり、自分のアプリケーションをインストール・設定したりすること。
コマンドを実行
$ docker-compose build6. database.yml の編集
database.yml
の該当部分を修正。
docker-compose.yml
のservices
とMYSQL_ROOT_PASSWORD
の設定に合わせて該当箇所を修正。config/database.yml# ~ 省略 ~ default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password # -> 空欄を password に修正 host: db # -> localhostから db に修正 # ~ 省略 ~7. DBを作成(db:create)
コマンドを実行してDBを作成
$ docker-compose run web rails db:create8. コンテナを起動
最後にコマンドを実行してコンテナを起動する
$ docker-compose up少し時間がかかるかもですが、ターミナルにこんなログが流れればOK
web_1 | => Booting Puma web_1 | => Rails 6.0.3.4 application starting in development web_1 | => Run `rails server --help` for more startup options web_1 | Puma starting in single mode... web_1 | * Version 4.3.6 (ruby 2.7.2-p137), codename: Mysterious Traveller web_1 | * Min threads: 5, max threads: 5 web_1 | * Environment: development web_1 | * Listening on tcp://0.0.0.0:3000 web_1 | Use Ctrl-C to stop
localhost:3000
にアクセスすると無事ページが表示される。はず!!最後に
なんとか環境構築ができました!
今後Dockerなどインフラ面についても学習して理解を深めて行きたいです!参考資料
大変参考にさせていただきました!
- https://qiita.com/nsy_13/items/9fbc929f173984c30b5d
- https://qiita.com/kodai_0122/items/795438d738386c2c1966
- https://qiita.com/azul915/items/5b7063cbc80192343fc0
- https://qiita.com/c5meru/items/1c921676de8a5a038f70
ありがとうございました!!
- 投稿日:2020-10-20T15:58:21+09:00
SELECT文について
SQLのSELECT文について学習をしたので、記録として残しておきます。
SQLとは
- SQLとはデータベースを操作するための言語。Structured Query Languageの略。
- データを定義するDDL,データを操作するDML,データを制御するDCLの3つに分類される。
SELECT文基本構文
- SELECT文はDMLのうちの1つ。基本構文は以下のとおり。
SELECT <カラム名> FROM <テーブル名>;<カラム名>に複数の項目を指定することも可能。
SELECT カラム名1,カラム名2・・・ FROM <テーブル名>;<カラム名>に
*
を指定することで全てのカラムのデータを取得できる。SELECT * FROM <テーブル名>;order by 句
並び変えを行うことができる
order by カラム名 DESC or ASC
で降順or昇順に並び替え可能。(ASCは省略可能、DESCの場合は必要)ORDERBYSELECT * From users ORDER BY age ASC;この場合、usersテーブルの全ての値を年齢順(昇順)で並び替えて取得できる。
where 句
条件を指定してデータを取得できる
SELECT <カラム名> FROM <テーブル名> WHERE 条件
で使用する。WHERESELECT * From users WHERE id = 1;条件以外のデータを取得したい場合は
!=
または<>
を使用する。and、or
WHERE
句に続けてANDやOR使うと条件を並べて指定することができる。ANDSELECT カラム名1,カラム名2・・・ FROM users WHERE first_name = "鈴木" AND age > 20andの場合はAかつB、orの場合はAまたはBという意味になる。
GROUP BY
指定のデータをグループ化するときに用いる。
GROUPBYselect <カラム名> from <テーブル名> GROUP BY <グループ化する要素名>;count句
GROUP BY
によってグループ化されたデータの件数をカウントする。COUNTSELECT open_time, COUNT('open_time') FROM shops GROUP BY open_time;実行結果↓
open_time COUNT('open_time') 5:00:00 7 6:00:00 2 7:00:00 6 とりあえずここまで。
グループ化に関しては、集計関数も大きく関係しているみたいなので学習を進めつつアウトプットしていきます!
- 投稿日:2020-10-20T11:19:28+09:00
LaravelマイグレーションでDB構築~Seederで初期データ投入するまで
マイグレーションとは
マイグレーションとは、PHP MyAdminから行うような、データベースにテーブルを追加作成したり、カラムを追加、変更、削除したり…といった作業を、コマンド一発で簡単にできる機能です。
もちろん、環境が変わった場合でも使えるので、マイグレーションを使ったことがない人には是非、覚えて欲しい機能です。マイグレーションの手順
1. マイグレーションファイルを作成する
コマンドを使って簡単にマイグレーションファイルを作成することが出来ます。
2. 作成されたマイグレーションファイルに、処理を記述する
テーブル作成や、カラム追加、削除などの処理をPHPで記述します。
記述方法については、以下でご紹介します。3. マイグレーションを実行する
コマンドを使って、マイグレーションを実行します。
マイグレーション実行後、データベースに変更や追加が反映されているか確認します。Doctrine DBALライブラリーの導入
Laravelは、defaultではカラム変更のmygrationは実行出来ないため、Doctrine DBALライブラリーを追加する必要があります。
導入手順
Laravelルートディレクトリへ移動して、以下のコマンドを実行します。
composer require doctrine/dbal※Version差異によるエラーが出ることあり
導入の確認方法
laravel/composer.jsonを開いてdoctrine/dbalが追加されていればOK
"require": { "php": "^7.1.3", "doctrine/dbal": "^2.9",//※追加 "fideloper/proxy": "^4.0", "laravel/framework": "5.8.*", "laravel/tinker": "^1.0", "nesbot/carbon": "^2.16.0",※以下のカラムタイプのみ変更可能
bigInteger、binary、boolean、date、dateTime、dateTimeTz、decimal、integer、json、longText、mediumText、smallInteger、string、text、time、unsignedBigInteger、unsignedInteger and unsignedSmallInteger
1:マイグレーションファイル作成
Laravelでデータベースを扱うために、テーブル作成とモデルファイル作成の方法をご紹介します。
Laravelでテーブルを作成するコマンド
例:XXXテーブルを作成
php artisan make:migration [マイグレーションファイル名] --create=[テーブル名] php artisan make:migration create_XXX_table --create=XXX※マイグレーションファイル名はそのままクラス名になるので、分かりやすい名前をつけること
※生成出力先のパスを指定したい場合は、make:migrateコマンドの実行時に--pathオプションを付ける。(Laravelルートディレクトリからの相対パスで指定)例:Reservationsテーブルを作成する場合
php artisan make:migration create_reservations_table --create=reservations上記のコマンド実行すると、以下のようなファイルが生成されます。
マイグレーション用ファイル:コマンド実行日時+create_reservations_table.php
作成される場所:プロジェクトフォルダ\database\migrations
※この段階ではまだテーブルは作成されていません。
生成されたファイル
create_reservations_table.phpを開いてみます。
「CreateReservationsTable」というクラス名でファイルが生成されているのが確認できます。upメソッド
upメソッド内にテーブル追加・変更の内容を記述していきます。
ここに記述された内容が、マイグレート(migrate)コマンドを叩いた時に、実行される処理です。public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); }downメソッド
ここにはロールバック(rollback)した時に、実行される処理を記述します。
例えば、ロールバック時、テーブルを削除したい場合は以下のように記述します。public function down() { { Schema::dropIfExists('reservations'); } }マイグレーション実行
とりあえずテーブルを作成してみたいので、マイグレーションを実行してみます。
以下のコマンドを叩きます。php artisan migrate以下のように「Migrated」と表示されればOK。マイグレーション実行は成功しています。
Migrating: 2020_10_19_154405_create_reservations_table Migrated: 2020_10_19_154405_create_reservations_table (37.32ms)実行されたSQL文を確認するコマンド
実行されたSQL文を確認したい場合は、以下のコマンドを叩きます。
php artisan migrate --pretend全テーブルを削除してマイグレーションをやり直したい場合
php artisan migrate:resetresetコマンドはdown メソッドを呼び出し、アプリケーション全部のマイグレーションをロールバックします。
実行後、DBのmigrationsテーブルが空になっているのが確認できます。※resetコマンドはあくまでもロールバックのみなので、テーブル削除+マイグレーション再実行を一発で済ませたい場合は、refreshコマンドを使うと便利です。
カラムの追加、名前変更、属性変更、削除
ここまでの手順後、カラムの追加、名前変更、属性変更、削除が必要な場合は、それ用のファイルを別で作成し、再度マイグレーションを実行します。
カラム名を変更
まず、カラム変更用のマイグレーションファイルを作成するため、以下のようにコマンドを叩きます。
php artisan make:migration rename_変更前のカラム名_to_変更後のカラム名_on_テーブル名_table --table=テーブル名作成されたファイルを開いて編集します。
カラム名を変更する:renameColumnメソッド
Schema::table('users', function (Blueprint $table) { $table->renameColumn('from', 'to'); });※カラムタイプがenumのカラム名変更は、Version5.5時点ではサポートされていない
カラム属性の変更
まず、カラム属性変更用のマイグレーションファイルを作成するため、以下のようにコマンドを叩きます。
php artisan make:migration changecolumn_属性変更するカラム名_テーブル名_table --table=テーブル名作成されたファイルを開いて編集します。
カラム属性を変更する:changeメソッド
例:nameカラムのサイズを25から50へ増やす
Schema::table('users', function (Blueprint $table) { $table->string('name', 50)->change(); });カラムの追加
既存テーブルにカラムを追加する
生成されたファイルを編集
public function up() { Schema::table('abc;', function (Blueprint $table) { $table->integer('test')->default(0)->index('index_test')->after('aaa')->comment('新カラム'); }); }カラム追加時の修飾子
- afterメソッド:どのカラムの後に追加するかを指定
- nullableメソッド:null値許容
- nullableメソッドに引数false指定:not null
- 型指定:tinyInteger('test')
- default null挿入:nullable($value = true)
- TIMESTAMPカラムのデフォルト値をCURRENT_TIMESTAMPに指定:useCurrent()
※第二引数はauto_increment、第三引数はprimary keyの指定なので、String型のように第二引数は長さの指定ではないことに注意
カラムの削除
既存テーブルを削除:dropColumnメソッド
引数に配列を渡して複数削除可
Schema::table('users', function (Blueprint $table) { $table->dropColumn(['votes', 'avatar', 'location']); });DBに初期データを投入(Insert)
マイグレーションでDBを構築したら、シーディングで初期データを投入してみます。
Seedファイルの生成
投入データ用Seedファイルを生成するため、以下のコマンドを実行します。
※Reservationsテーブルへのシーダーを生成するのであれば「ReservationsTableSeeder」といったクラス名にするphp artisan make:seeder ReservationsTableSeeder以下が表示されればOK。作成
Seeder created successfully.データ投入の記述
プロジェクトフォルダ\database\seeders\配下にReservationsTableSeeder.phpファイルが生成されているので、開いてデータを投入する記述を追加します。
ReservationsTableSeeder.php<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB;//←追加 class ReservationsTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { //ここにデータを投入する記述 } }1レコード分の投入であれば以下のように記述します。複数レコードは、配列でその下に追加します。
ReservationsTableSeeder.phpDB::table('users')->insert([ [ 'name' => '木村', 'email' => 'kimura@XXX.co.jp', 'password' => '123456', 'user_id' => 'kimura3', 'auth_id' => 1, 'last_login_date' => date('Y-m-d H:i:s'), ],実行時に呼び出す記述を追加
シーダクラスを定義したら、このシーダクラスをシーディング実行時に呼び出す記述を追加します。
seedsディレクトリ内DatabaseSeeder.phpに以下を記述します。登録したいシーダクラスが複数ある場合は、ここに配列で追加します。DatabaseSeeder.php<?php namespace Database\Seeders; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call([ ReservationsTableSeeder::class, ]); } }シーディングの実行
プロジェクトフォルダで以下コマンドを実行します。
php artisan db:seedファイル名を指定して実行する場合
上の手順で呼び出し用の記述をDatabaseSeeder.phpにしましたが、optionでファイル名を指定する場合は、記述しなくても実行できます。
php artisan db:seed --class=UsersTableSeederDB確認
テーブルにデータが作成されている事が確認できます。
LaravelでModelを作成するコマンド
例:XXXモデルを作成
php artisan make:model XXX上記コマンド実行後、プロジェクトルート/appにXXX.phpというModelファイルが作成されているのが確認できます。
- 投稿日:2020-10-20T03:13:47+09:00
AnsibleでMySQLをいじるときの参考記事
CentOS7だとmariadbが入ってて邪魔だったり、パスワード変更が面倒だったりしますよね
ansibleでどうにかmysqlを弄りたい時に参考になる記事を発見したのでQiitaの民も検索できるように共有します。MySQL 8のAnsibleハマりポイント(rootのパスワード変更とか) - そうなんでげす
あとは以下の公式ドキュメントを読めば、データベース作成もできるので十分かと!
mysql_db - Add or remove MySQL databases from a remote host. — Ansible Documentation
- 投稿日:2020-10-20T01:28:07+09:00
Laravel7マイグレートエラー(SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint)
Laravelで、タグ付けのできる投稿サイトをチームで制作しています。
投稿テーブル(reviews)を先に作っていたのですが、今回タグテーブル(tags)を作成し、reviewsとはreview_tagという中間テーブルで多対多のリレーションを作成したいです。
しかし、マイグレートした時にエラーで少しだけ苦しんだのでメモしておきます。問題点はここ
$ php artisan migrate Migrating: 2020_09_19_035606_create_tags_table Migrated: 2020_09_19_035606_create_tags_table (0.08 seconds) Migrating: 2020_09_19_053140_create_review_tag_table Illuminate\Database\QueryException SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `review_tag` add constraint `review_tag_tag_id_foreign` foreign key (`tag_id`) references `tags` (`id`) on delete cascade)外部キーが設定できないぜと仰っているようです。いろいろ調べると、主キーidの設定でBIGINTとINTは両立できない模様。
エラーになった時の3つの各テーブルのマイグレーションファイルは下のようになっていました。主キーを設定している箇所にご注目ください。
reviewsテーブルのマイグレーションファイル↓
XXXXXX_create_reviews_table.phpclass CreateReviewsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('reviews', function (Blueprint $table) { $table->id();//BIGINTの主キー $table->date('live_date'); $table->string('title', 255); $table->text('text'); $table->timestamps(0); $table->foreignId('user_id')->constrained('users'); }); }tagsテーブルのマイグレーションファイル↓
XXXXXX_create_tag_table.phpclass CreateTagsTable extends Migration { * @return void */ public function up() { Schema::create('tags', function (Blueprint $table) { $table->increments('id');//BIGINTではないid主キー $table->string('tag_name', 30); $table->string('info'); $table->string('url'); $table->timestamps(); }); }review_tag中間テーブルのマイグレーションファイル↓
XXXXXX_create_review_tag_table.phppublic function up() { Schema::create('review_tag', function (Blueprint $table) { $table->increments('id');//BIGINTではないid主キー $table->timestamps(); $table->foreignId('review_id')->constrained('reviews')->onDelete('cascade'); //foreignIdはunsignedBigIntegerのエイリアス $table->foreignId('tag_id')->constrained('tags')->onDelete('cascade'); //foreignIdはunsignedBigIntegerのエイリアス }); }こう解決しました
まず、MySQLにて
drop table テーブル名;
でtagsとreview_tagを一旦削除。
次に、tagsとreview_tagのマイグレーションファイルにて、$table->increments('id');
を$table->id();
に変更。
(正直、reviewsと中間テーブルを挟んで間接的にしか繋がってない(?)tagsテーブルの方のマイグレーションファイルのidも修正が必要だったのかは不明...)
こうして再度マイグレートしたら、エラー出ずに上手くいきました。$ php artisan migrate Migrating: 2020_09_19_035606_create_tags_table Migrated: 2020_09_19_035606_create_tags_table (0.03 seconds) Migrating: 2020_09_19_053140_create_review_tag_table Migrated: 2020_09_19_053140_create_review_tag_table (0.09 seconds)以上になります。ごもし指摘などあれば、ぜひよろしくお願いします。
- 投稿日:2020-10-20T01:04:13+09:00
もはや DB は Docker でインストールする時代!初心者のための DB インストール on Docker
この記事について
データベース、これは 2020 年になっても、エンタープライズなどのアプリケーション開発において、必ずと言っていいほど使用されるものだと思います。
ただ、従来同様、本番環境や検証環境、開発環境に至るまで、未だに人力で頑張ってホスト OS に直接インストール
している方が多いというのが現状です。(少し誇張が過ぎるかもですが)
開発環境のデータベースのインストールに 5 分以上時間をかけるのは時間の無駄です!今、このタイミングで、Docker でサクッと DB をインストールできることを覚えましょう。
ただし、本番環境など、冗長化構成や可用性を担保する必要がある場合などは、きちんと要求に合致したインストール方法を実施をしましょう。Oracle Database on Docker
※ちょっとインストール方法が面倒なので、後日追記します。早く情報を知りたい方は、参考情報に記載の内容をご参照ください。
SQL Server on Docker
- Docker Hub - Microsoft SQL Server (Ubuntu ベース)
GitHub にて公開しているこちらのリポジトリを参考に、docker-compose.yaml を作成してください。
※下記の yaml は RHEL ベースの SQL Server (on Linux) on Docker です。
※GitHub のリポジトリでは、ブランチで RHEL ベースと Ubuntu ベースの 2 つを用意しています。(2017 は Ubuntu のみ)docker-compose.yamlversion: '3' services: mssql: image: mcr.microsoft.com/mssql/rhel/server:2019-latest container_name: 'mssql2019-latest-rhel' environment: - MSSQL_SA_PASSWORD=<your_strong_password> - ACCEPT_EULA=Y # - MSSQL_PID=<your_product_id> # default: Developer # - MSSQL_PID=Express # - MSSQL_PID=Standard # - MSSQL_PID=Enterprise # - MSSQL_PID=EnterpriseCore ports: - 1433:1433 # volumes: # Mounting a volume does not work on Docker for Mac # - ./mssql/log:/var/opt/mssql/log # - ./mssql/data:/var/opt/mssql/data
docker-compose up -d
で、コンテナーを起動すれば、SQL Server のインストールは完了です。docker-compose up -d
MySQL on Docker
GitHub にて公開しているこちらのリポジトリを参考に、docker-compose.yaml を作成してください。
docker-compose.yamlversion: '3' services: db: image: mysql:8 container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: P@ssw0rd #required # MYSQL_DATABASE: employees #optional # MYSQL_USER: user #optional # MYSQL_PASSWORD: P@ssw0rd #optional # MYSQL_ALLOW_EMPTY_PASSWORD: "yes" #optional # MYSQL_RANDOM_ROOT_PASSWORD: "yes" #optional # MYSQL_ONETIME_PASSWORD: "yes" #optional (MySQL 5.6 or above) # MYSQL_INITDB_SKIP_TZINFO: "" #optional ports: - 3306:3306 volumes: - ./data/mysql:/var/lib/mysql - ./conf:/etc/mysql/conf.d
docker-compose up -d
で、コンテナーを起動すれば、MySQL のインストールは完了です。docker-compose up -d
PostgreSQL on Docker
GitHub にて公開しているこちらのリポジトリを参考に、docker-compose.yaml を作成してください。
docker-compose.yamlversion: '3' services: db: image: postgres:13 container_name: postgres restart: always environment: POSTGRES_PASSWORD: P@ssw0rd #required # POSTGRES_USER: postgres #optional # POSTGRES_DB: postgres #optional # POSTGRES_INITDB_ARGS: "--data-checksums" #optional # POSTGRES_INITDB_WALDIR: "" #optional (PostgreSQL 10+ or above) # POSTGRES_INITDB_XLOGDIR: "" #optional (PostgreSQL 9.x only) # POSTGRES_HOST_AUTH_METHOD: trust #optional # PGDATA: /var/lib/postgresql/data/pgdata #optional ports: - 5432:5432 volumes: - ./data:/var/lib/postgresql/data
docker-compose up -d
で、コンテナーを起動すれば、PostgreSQL のインストールは完了です。docker-compose up -d
MongoDB on Docker
GitHub にて公開しているこちらのリポジトリを参考に、docker-compose.yaml を作成してください。
docker-compose.yamlversion: '3' services: mongo: image: mongo:latest container_name: mongodb restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: P@ssw0rd ports: - 27017:27017 volumes: - ./data/db:/data/db - ./data/configdb:/data/configdb # Command 1: Customize configuration without configuration file # Command 2: Setting WiredTiger cache size limits # command: > # --serviceExecutor adaptive # --wiredTigerCacheSizeGB 1.5 mongo-express: image: mongo-express:latest container_name: mongo-express restart: always ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: P@ssw0rd
docker-compose up -d
で、コンテナーを起動すれば、MongoDB のインストールは完了です。docker-compose up -d
管理ツール
管理ツールについては、各自好きなものを使用すれば良いと思いますが、おすすめは Visual Studio Code を使う方法です。
Docker Compose も DB 操作も Visual Studio Code 内で行えるため、とても便利です。
詳細は以下の記事を参照してください。
- Visual Studio Code 上で SQL Database を操作するための便利な拡張機能
- Visual Studio Code 上で MySQL を操作するための便利な拡張機能
- Visual Studio Code 上で PostgreSQL と Cosmos DB を操作するための便利な拡張機能
- Visual Studio Code 上で MongoDB を操作するための便利な拡張機能
また、MySQL と PostgreSQL のところで記載している adminer のコンテナーを一緒に作るのもアリかと思います。
参考情報
Oracle Database
- GitHub - oracle/docker-images
- 公式 Oracle Database の Docker イメージを構築
- Oracle Database 19c available on GitHub
- [Oracle Database] 公式Docker Imageを利用してOracle Database 19c環境を構築してみた
SQL Server
MySQL
PostgresSQL
MongoDB
- 投稿日:2020-10-20T00:44:40+09:00
UbuntuでMySQLにログインできなかった(ERROR 1698 (28000))
はじめに
UbuntuにMySQLをインストールし、DB操作を始めようとしたところ、
エラーが吐き出されてログインできなかったので、その解決方法を書き記します。この記事でわかること
ERROR 1698 (28000)を解決する方法として以下のふたつがわかります。
しかし本質的な解決ではないので、その場しのぎに使ってもらえたらと思います。
- sudoを使ってMySQLにログインする方法
- アカウントを作ってMySQLにログインする方法
実行環境
- Ubuntu 20.04
- MySQL 8.0.21
- Virtual Box 6.1
MySQLにログインできなかった
UbuntuにMySQLを導入し、初期アカウントとなるrootでログインしようとしたところ以下のエラーメッセージが出ました。
$ mysql -u root -p Enter password: ERROR 1698 (28000): Access denied for user 'root'@'localhost'エラーコードをもとに色々調べてみたところ、auth_socket pluginなるものが関係しているようなのですが、、
私にはよく分からず。root にアクセス権限が設定されていないことで起こる
ERROR 1698 (28000)- Access denied for user 'root'@'localhost' で MySQL にrootでログインできない上記のようなことが発生しているらしいです。
こちらのサイトに書かれているのは本質的な解決方法に感じるので、参照すると より幸せになれると思います。
私の知識不足により、現時点ではその中身を正しく理解できなかったため、本記事ではこれ以上言及しません(言及できません)。解決方法(暫定的な解決方法)
1.管理者権限でログインする
管理者権限でログインすることで、MySQLにログインすることができました。
$ sudo mysqlとりあえずこのコマンドで入れば、ひと通り動きはします。
しかし、アカウントという概念を無視しているようで、スマートに感じられなかったため、
別の解決方法も探すことにしました。2.管理者権限でログインしたあと、アカウントを作る
$ sudo mysql mysql> create user "hogeName" identied by "fooPassword";このあとターミナルを再起動し、
作成したユーザー名と、そのパスワードを入力することで無事ログインができました。参考