メインコンテンツまでスキップ

「MySQL」タグの記事が2件件あります

全てのタグを見る

snake

MySQL(MariaDB)への接続時にconnect ECONNREFUSEDというエラーが発生する場合の解決策についてまとめます。

下記は実際に発生した際のエラーログです。Ubuntu server 20.04 LTSのDockerコンテナ上でGhost blogの公式イメージを動かした際に発生しました。データベースにはMariaDBを使用していますが、MySQLでも発生を確認しています。

...**はIPです。

[2021-04-11 08:09:51] INFO Ghost is running in production...
[2021-04-11 08:09:51] INFO Your site is now available on https://viasnake.com/
[2021-04-11 08:09:51] INFO Ctrl+C to shut down
[2021-04-11 08:09:51] INFO Ghost server started in 0.666s
[2021-04-11 08:09:51] ERROR connect ECONNREFUSED ***.***.***.***:3306

connect ECONNREFUSED ***.***.***.***:3306

"Unknown database error"

Error ID:
500

Error Code:
ECONNREFUSED

----------------------------------------

DatabaseError: connect ECONNREFUSED ***.***.***.***:3306
at DatabaseError.KnexMigrateError (/var/lib/ghost/versions/4.2.0/node_modules/knex-migrator/lib/errors.js:7:26)
at new DatabaseError (/var/lib/ghost/versions/4.2.0/node_modules/knex-migrator/lib/errors.js:55:26)
at /var/lib/ghost/versions/4.2.0/node_modules/knex-migrator/lib/database.js:48:19
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async DatabaseStateManager.getState (/var/lib/ghost/versions/4.2.0/core/server/data/db/state-manager.js:39:13)
at async DatabaseStateManager.makeReady (/var/lib/ghost/versions/4.2.0/core/server/data/db/state-manager.js:72:25)
at async initDatabase (/var/lib/ghost/versions/4.2.0/core/boot.js:49:5)
at async bootGhost (/var/lib/ghost/versions/4.2.0/core/boot.js:277:9)

Error: connect ECONNREFUSED ***.***.***.***:3306
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1144:16)
--------------------
at Protocol._enqueue (/var/lib/ghost/versions/4.2.0/node_modules/mysql/lib/protocol/Protocol.js:144:48)
at Protocol.handshake (/var/lib/ghost/versions/4.2.0/node_modules/mysql/lib/protocol/Protocol.js:51:23)
at Connection.connect (/var/lib/ghost/versions/4.2.0/node_modules/mysql/lib/Connection.js:116:18)
at /var/lib/ghost/versions/4.2.0/node_modules/knex/lib/dialects/mysql/index.js:68:18
at new Promise (<anonymous>)
at Client_MySQL.acquireRawConnection (/var/lib/ghost/versions/4.2.0/node_modules/knex/lib/dialects/mysql/index.js:63:12)
at create (/var/lib/ghost/versions/4.2.0/node_modules/knex/lib/client.js:290:39)

[2021-04-11 08:09:51] WARN Ghost is shutting down
[2021-04-11 08:09:51] WARN Ghost has shut down
[2021-04-11 08:09:51] WARN Your site is now offline
[2021-04-11 08:09:51] WARN Ghost was running for a few seconds

connect ECONNREFUSEDのエラーはサーバー側からの明示的な接続拒否です。

考えられる問題としては、MySQL(MariaDB)が動いていないか、IP(上記エラーの***...***箇所)をリッスンしていないかのどちらかが大きな問題の一つとして考えられます。

MySQL(MariaDB)が動いていない場合は、下記のコマンドで起動させてあげてください。

v systemctl start mysql systemctl start mariadb


IPリッスンしていない場合(ソケットのみをリッスンしている場合)は、*/etc/my.cnf*に下記を追記してください。

[mysqld] skip-networking=0 skip-bind-address


これで動くはずです。

snake

MySQLのデータベースをSQLiteへ変換する必要があったので、手順をメモっておきます。

環境は以下の通りです。

  • CentOS Stream 8
  • MariaDB 10.3.27(MySQLでも可)
  • SQLite 3.26.0

SQLite3がインストールされていない場合、下記のコマンドでインストールしておいて下さい。

$ dnf -y install sqlite

下記のコマンドを実行して、データベースをdumpしてください。

$ mysqldump --skip-extended-insert --compact データベース名 > dump.sql

認証が必要な場合は下記のコマンド使って下さい。下記のコマンドではユーザー名がrootになってるので、適切なユーザー名に変更して下さい。

$ mysqldump --skip-extended-insert --compact -u root -p データベース名 > dump.sql

dumpが完了したら、下記のコマンドでmysql2sqliteというスクリプトダウンロードして下さい。

$ wget https://raw.githubusercontent.com/dumblob/mysql2sqlite/master/mysql2sqlite

mysql2sqliteはMySQLからSQLiteへと変換してくれるやつです。詳細はGitHubを確認して下さい。 dumblob/mysql2sqlite

スクリプトがダウンロード完了したら、下記のコマンドでスクリプトを実行して下さい。

$ ./mysql2sqlite dump.sql | sqlite3 sqlite.db

スクリプトの実行が完了すると、ディレクトリ内にsqlite.dbが生成されています。

以上で変換完了です。