Redmineのローカル環境構築の際、データベースのテーブル等の作成につまづいた時の対処法(mysql)

公開:2020/10/04
更新:2020/10/04
6 min読了の目安(約5600字TECH技術記事

Redmineのローカル環境構築の際、データベースのテーブル等の作成につまづいた時の対処法(mysql)

概要

ちょっと自分でローカルにredmineを構築してプロジェクト管理をしたいなと思って、Redmineガイドに基づいて構築していった。
基本的に手順通りに作成していったが、「Step 6 - データベースのテーブル等の作成」の際にerrorがでまくったので、そのerror内容と解決策を記録しておこうと思う。

error内容

redmineのappのルートディレクトリにて、以下のコマンドを実行。

❯ RAILS_ENV=production bundle exec rails db:migrate
rails aborted!
Mysql2::Error::ConnectionError: Access denied for user 'redmine'@'localhost' (using password: YES)
/Library/Ruby/Gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect'
/Library/Ruby/Gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/mysql2_adapter.rb:22:in `new'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/mysql2_adapter.rb:22:in `mysql2_connection'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:830:in `new_connection'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:874:in `checkout_new_connection'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:853:in `try_to_checkout_new_connection'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:814:in `acquire_connection'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:538:in `checkout'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:382:in `connection'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:1033:in `retrieve_connection'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_handling.rb:118:in `retrieve_connection'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/connection_handling.rb:90:in `connection'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/tasks/database_tasks.rb:172:in `migrate'
/Library/Ruby/Gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/railties/databases.rake:60:in `block (2 levels) in <top (required)>'
/Library/Ruby/Gems/2.6.0/gems/railties-5.2.4.2/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/Library/Ruby/Gems/2.6.0/gems/railties-5.2.4.2/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/Library/Ruby/Gems/2.6.0/gems/railties-5.2.4.2/lib/rails/command.rb:48:in `invoke'
/Library/Ruby/Gems/2.6.0/gems/railties-5.2.4.2/lib/rails/commands.rb:18:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

Mysql2::Error::ConnectionError: Access denied for user 'redmine'@'localhost' (using password: YES) と出ていたので、「 redmine@localhost のユーザーアクセス権が拒否されました(パスワード使用中) 」と解釈。
データベース側を調べてみる必要があると判断。

mysql

ここでやったこととしては2つ。

  • mysql側のdatabaseの一覧を見てみた(一部 ** で加工してます)。
  • app側の config/database.yml でproduction環境の設定を変更。
❯ mysql -uroot -p                                        
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is **
Server version: ****** Homebrew

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> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| *** |
| *** |
| *** |
| *** |
+--------------------+
4 rows in set (0.01 sec)
production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: root
  password: "MYPASSWORD"
  encoding: utf8mb4
  
(中略)

この2つからわかったことは、以下の通り。

  • production環境には redmine というdatabaseが必要であったが、mysql上ではそれがなかった。
  • passwordは設定していたので、その辺りの問題はなかった。
  • ということは、mysqlに redmine のdatabaseを新規設定する必要がある。

となったので、mysql側に手動で新しく redmine というdatabase名を登録。

mysql> CREATE DATABASE redmine;
Query OK, 1 row affected (0.01 sec)

作成後、管理者名もついでに登録しました。

mysql> create user USERNAME identified by 'PASSWORD';
Query OK, 0 rows affected (0.00 sec)

redmine側に戻る

諸々DB側で設定したあと、redmine側に戻り、もう一度実行してみた。

❯ RAILS_ENV=production bundle exec rails db:migrate               
== 1 Setup: migrating =========================================================

(中略)

== 20190620135549 ChangeRolesNameLimit: migrated (0.0262s) ====================

ここまでいって、次のStep7へと進むことができました。

まとめ

mysqlに関しては、特にrailsと絡むことで結構罠に落ちるなあという印象です。
おそらく、ガイドの方のmysql versionが古いせいかもしれません。。。
今後も気をつけながら操作していきたいです。

追記(2020.10.15 08:21更新)

Twitterにて、このようなご指摘をいただきました。

自分がなんらかの手違いで、ここを予め設定していないのが、主な原因のようでした。。。
やらかしました、、、
とはいえ、いい経験になったので、このまま残しておきたいと思います😭。

参考URL