SakuraWi - BLog

WEBエンジニア。聴いたお話をまとめておく倉庫的な。スタックストックスタック!

herokuのclearDBが容量限界そうなのでMySQL5.7を8にあげてみる


経緯

herokuのエラーで何度か storage errorが出ていた。

接続すると、エラー画面になっていて、操作が効かない感じ。

エラーの内容から、おそらく、DBの容量の問題と思う。

けど、中身をcsvでダンプすると100MBほどしかないのだが...

とりあえず、herokuのプラン更新をしようにも、5.7はもうサポートされていないようなので、今のうちにやっておくことにした。punchプランのClearDBでした。

経験値にもなるだろうし、いずれ容量増えたら必要なことなので、やることにした。

まず手元から

qiita.com

brew update

brew install mysql

をする。

==> Summary
🍺  /opt/homebrew/Cellar/mysql/8.3.0: 323 files, 312.5MB

とのこと。入ってそう。

ということで、手元で8が起動するか試していく。

$ ps ax | grep mysql
 5157 s001  S+     0:00.00 grep mysql
sakurawi@Wi-MacBook-Air: ~/workspace/XXX_APP (master *=)
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.44, for osx10.18 (x86_64) using  EditLine wrapper
sakurawi@Wi-MacBook-Air: ~/workspace/XXX_APP (master *=)
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.44, for osx10.18 (x86_64) using  EditLine wrapper
sakurawi@Wi-MacBook-Air: ~/workspace/XXX_APP (master *=)
$ brew uninstall mysql@5.7
Uninstalling /opt/homebrew/Cellar/mysql@5.7/5.7.44_1... (321 files, 233.9MB)
sakurawi@Wi-MacBook-Air: ~/workspace/XXX_APP (master *=)

消えないので、アンインストールした

$ mysql --version
mysql  Ver 8.3.0 for macos13.6 on arm64 (Homebrew)

お、よさそう。

$ mysql.server start
Starting MySQL
 SUCCESS!

スタートもできるぽい。

railsを動かしていく

rails serverすると当然動かない。

bundle updateしてみる

rails server する。 お、起動するぞ。

え、ぜんぜんうごくやん。

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.44    |
+-----------+
1 row in set (0.00 sec)

いや変わってなさそう。

$ mysql.server restart
Shutting down MySQL
.... SUCCESS!
Starting MySQL
.... SUCCESS!

リスタートさせてみる

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.3.0     |
+-----------+
1 row in set (0.00 sec)

mysql>

お、切り替わった。

rails consoleからもみてみる

[1] pry(main)> ActiveRecord::Base.connection.execute('SELECT version()').to_a
   (0.1ms)  SELECT version()
=> [["8.3.0"]]

いいやん。

sequel Proが見れなくなる。 ググる。

MySQL8.0.x に Sequel Pro で接続する #MySQL - Qiita

なんと、夜版じゃないと8.0がみれないとのこと。 なんじゃそら。

ローカルは秒で動くようになったので、 じゃ、pushしてみる。

herokuのプランを変える

というか、mysql 8に対応したアドオンを付け直す。

新しくインスタンスを置くイメージかな。

新しい方のDBのデータみたい。

が、heroku configを叩いても、繋いでいる方がでる。 まあ当然すな。

あ、

$ heroku addons


Add-on                              Plan    Price         Max Price    State
──────────────────────────────────  ──────  ────────────  ───────────  ───────
cleardb (cleardb-horizontal-00000)  punch   ~$0.014/hour  $9.99/month  created
 └─ as CLEARDB_DATABASE

cleardb (cleardb-fitted-999999)      punch8  ~$0.014/hour  $9.99/month  created
 └─ as CLEARDB_ONYX

でてましたわ。

情報を

heroku config:set DATABASE_URL='mysql2://username:password@hostname/database_name?reconnect=true'

でupdateする

他のdbの環境変数も、向くように変更。

herokuで rails db:createする

D, [2024-02-22T05:06:39.800007 #2] DEBUG -- :    (18.1ms)  CREATE DATABASE `heroku_bdd258af7170eb8` DEFAULT CHARACTER SET `utf8mb4`
Database 'heroku_bdd258af7170eb8' already exists
ActiveRecord::StatementInvalid (Mysql2::Error: Table 'heroku_bdd258af7170eb8.users' doesn't exist):

となるので、migrateする。

無事走る。

動いた!

データをインポートする

ローカルにダンプしておいてものをエクスポート、

すぐに本番DBにインポートする

だいじょうぶそう

個人アプリなので、以上でよさそう。

ただ、デフォルトの文字コードなどの問題はありそうなので、その辺もチェックをしておく。

その後

異常がなければ、add-onは消してしまってよさそう。

自動採番

なぜか、 3になっている。

mysql> SHOW VARIABLES LIKE 'auto_increment_increment';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 3     |
+--------------------------+-------+
1 row in set (0.19 sec)

なおす。

前に10になっていたのは、直接イジってつじつまを勝手にあわせてくれた説。

今回、3じゃないと最後のものと称号したときにおかしいからか。

いや、と思ったけど、デフォっぽいので、放置することにする。

参考URL

https://zenn.dev/hiro1111/articles/bf0111ed763485