Ghost: Can’t Upgrade from v2.27 to v3.8 ER_NO_SUCH_TABLE error

Issue Summary

I am trying to upgrade my Ghost v2.27 install to v3.8 and I am getting the following error

You can also check theme compatibility at https://gscan.ghost.org

? Are you sure you want to proceed with migrating to Ghost 3.8.0? Yes ✔ Updating to a major version

  • sudo systemctl stop ghost_chrometips-nspeaks-com ✔ Stopping Ghost ✔ Linking latest Ghost and recording versions
  • sudo systemctl start ghost_chrometips-nspeaks-com
  • sudo systemctl stop ghost_chrometips-nspeaks-com ✖ Restarting Ghost A GhostError occurred.

Message: show columns from emails - ER_NO_SUCH_TABLE: Table ‘chrometips.emails’ doesn’t exist Suggestion: journalctl -u ghost_chrometips-nspeaks-com -n 50

Debug Information: OS: Ubuntu, v18.04.4 LTS Node Version: v10.19.0 Ghost Version: 3.8.0 Ghost-CLI Version: 1.13.1 Environment: production Command: ‘ghost upgrade’

Additional log info available in: /home/<user>/.ghost/logs/ghost-cli-debug-2020-02-25T13_30_27_168Z.log

Contents of the Log file

Debug Information:
    OS: Ubuntu, v18.04.4 LTS
    Node Version: v10.19.0
    Ghost Version: 3.8.0
    Ghost-CLI Version: 1.13.1
    Environment: production
    Command: 'ghost upgrade'
Message: show columns from `emails` - ER_NO_SUCH_TABLE: Table 'chrometips.emails' doesn't exist
Suggestion: journalctl -u ghost_chrometips-nspeaks-com -n 50
Stack: Error: show columns from `emails` - ER_NO_SUCH_TABLE: Table 'chrometips.emails' doesn't exist
    at Server.server.close (/usr/lib/node_modules/ghost-cli/lib/utils/port-polling.js:38:28)
    at Object.onceWrapper (events.js:286:20)
    at Server.emit (events.js:198:13)
    at emitCloseNT (net.js:1619:8)
    at process._tickCallback (internal/process/next_tick.js:63:19)

Result of the journalctl command - http://bit.ly/2vZxJ6p 2

To Reproduce

  1. Tried ghost update
  2. Tried ghost update --force
  3. Followed https://ghost.org/update/?v=2.0

Technical details:

  • Ghost Version: 2.27
  • Node Version: 10.19
  • Browser/OS: Ubuntu 18.04.4

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 18 (9 by maintainers)

Most upvoted comments

@naz thanks for the detailed write up, I think we can safely say this is not a migration bug as it originally appeared and we don’t need to do anything further 👍


Summary of this issue:

Ghost does not yet officially support MySQL 8. This is because Node.js does not yet have support for MySQL 8.

There are two main points of incompatibility.

To the best of my knowledge neither of these things actually with cause problems with Ghost.

What does cause problems, generally, is mixed collations. This is known to cause unique constraints to fail.

To repeat - MySQL 8 isn’t supported in Ghost but probably works. MySQL 8 isn’t the problem here, mixed collations is and that’s a general administering mysql problem rather than a Ghost problem.


I don’t know what happened here to end up with the different collations, but I assume mysql was upgraded or the content was transferred.

In MySQL 8 the default charset is utf8mb4 (what Ghost uses) & the default collation is utf8mb4_0900_ai_ci. utf8mb4_general_ci was the default in earlier versions of MySQL. I assume this is related.

Going to close this as figuring out how to fix it is definitely outside of scope here - although feel free to post in our community.

Hey @andrewmatveychuk I did receive the snapshot on my account but haven’t have a chance to look into it yet. It is on my list of things to do.

Just one more thing. I used MariaDB 10.3. Not sure if that matters.

And I am pasting the content of the journalctl command here instead of the paste.org link in my original post above. Easier to track.

  | -- Logs begin at Mon 2019-02-11 12:08:42 UTC, end at Tue 2020-02-25 13:34:28 UTC. --
-- | --
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Client_MySQL.query (/var/www/chrometips/html/versions/3.8.0/node_modules/knFeb 25 13:30:26 nspeaks24 node[1805]:     at /var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modFeb 25 13:30:26 nspeaks24 node[1805]:     at tryCatcher (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migraFeb 25 13:30:26 nspeaks24 node[1805]:     at Function.Promise.attempt.Promise.try (/var/www/chrometips/html/versions/3.8Feb 25 13:30:26 nspeaks24 node[1805]:     at Client_MySQL.trxClient.query (/var/www/chrometips/html/versions/3.8.0/node_Feb 25 13:30:26 nspeaks24 node[1805]:     at Runner.<anonymous> (/var/www/chrometips/html/versions/3.8.0/node_modules/knFeb 25 13:30:26 nspeaks24 node[1805]:     at Runner.tryCatcher (/var/www/chrometips/html/versions/3.8.0/node_modules/kneFeb 25 13:30:26 nspeaks24 node[1805]:     at Runner.query (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migFeb 25 13:30:26 nspeaks24 node[1805]:     at Runner.queryArray (/var/www/chrometips/html/versions/3.8.0/node_modules/kneFeb 25 13:30:26 nspeaks24 node[1805]:     at /var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modFeb 25 13:30:26 nspeaks24 node[1805]:     at tryCatcher (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migraFeb 25 13:30:26 nspeaks24 node[1805]:     at /var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modFeb 25 13:30:26 nspeaks24 node[1805]:     at tryCatcher (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migraFeb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromiseFromHandler (/var/www/chrometips/html/versions/3.8.0/Feb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromise (/var/www/chrometips/html/versions/3.8.0/node_moduleFeb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromise0 (/var/www/chrometips/html/versions/3.8.0/node_modulFeb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromises (/var/www/chrometips/html/versions/3.8.0/node_modulFeb 25 13:30:26 nspeaks24 node[1805]:     at Promise._fulfill (/var/www/chrometips/html/versions/3.8.0/node_modules/knexFeb 25 13:30:26 nspeaks24 node[1805]:     at PromiseArray._resolve (/var/www/chrometips/html/versions/3.8.0/node_modulesFeb 25 13:30:26 nspeaks24 node[1805]:     at PromiseArray._promiseFulfilled (/var/www/chrometips/html/versions/3.8.0/nodFeb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromise (/var/www/chrometips/html/versions/3.8.0/node_moduleFeb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromise0 (/var/www/chrometips/html/versions/3.8.0/node_modulFeb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromises (/var/www/chrometips/html/versions/3.8.0/node_modulFeb 25 13:30:26 nspeaks24 node[1805]:     at _drainQueueStep (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-Feb 25 13:30:26 nspeaks24 node[1805]:     at _drainQueue (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrFeb 25 13:30:26 nspeaks24 node[1805]:     at Async._drainQueues (/var/www/chrometips/html/versions/3.8.0/node_modules/knlines 1-27...skipping...
  | -- Logs begin at Mon 2019-02-11 12:08:42 UTC, end at Tue 2020-02-25 13:34:28 UTC. --
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Client_MySQL.query (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/knex/lib/client.js:192:17)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at /var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/knex/lib/transaction.js:232:21
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at tryCatcher (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/util.js:16:23)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Function.Promise.attempt.Promise.try (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/method.js:39:29)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Client_MySQL.trxClient.query (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/knex/lib/transaction.js:229:33)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Runner.<anonymous> (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/knex/lib/runner.js:138:36)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Runner.tryCatcher (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/util.js:16:23)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Runner.query (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/method.js:15:34)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Runner.queryArray (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/knex/lib/runner.js:207:40)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at /var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/knex/lib/runner.js:44:23
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at tryCatcher (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/util.js:16:23)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at /var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/using.js:185:26
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at tryCatcher (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/util.js:16:23)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromiseFromHandler (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise.js:547:31)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromise (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise.js:604:18)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromise0 (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise.js:649:10)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromises (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise.js:729:18)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Promise._fulfill (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise.js:673:18)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at PromiseArray._resolve (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise_array.js:127:19)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at PromiseArray._promiseFulfilled (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise_array.js:145:14)        Feb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromise (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise.js:609:26)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromise0 (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise.js:649:10)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Promise._settlePromises (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/promise.js:729:18)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at _drainQueueStep (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/async.js:93:12)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at _drainQueue (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/async.js:86:9)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Async._drainQueues (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/async.js:102:5)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at Immediate.Async.drainQueues (/var/www/chrometips/html/versions/3.8.0/node_modules/knex-migrator/node_modules/bluebird/js/release/async.js:15:14)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at runCallback (timers.js:705:18)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at tryOnImmediate (timers.js:676:5)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at processImmediate (timers.js:658:5)
  | Feb 25 13:30:26 nspeaks24 node[1805]:     at process.topLevelDomainCallback (domain.js:126:23)
  | Feb 25 13:30:26 nspeaks24 node[1805]:
  | Feb 25 13:30:26 nspeaks24 node[1805]: [2020-02-25 13:30:26] INFO Bootstrap client was closed.
  | Feb 25 13:30:26 nspeaks24 node[1805]: [2020-02-25 13:30:26] WARN Ghost has shut down
  | Feb 25 13:30:26 nspeaks24 systemd[1]: Stopping Ghost systemd service for blog: chrometips-nspeaks-com...
  | Feb 25 13:30:26 nspeaks24 node[1805]: [2020-02-25 13:30:26] WARN Your site is now offline
  | Feb 25 13:30:27 nspeaks24 node[1805]: /usr/lib/node_modules/ghost-cli/lib/process-manager.js:46
  | Feb 25 13:30:27 nspeaks24 node[1805]:         throw error;
  | Feb 25 13:30:27 nspeaks24 node[1805]:         ^
  | Feb 25 13:30:27 nspeaks24 node[1805]: [object Object]
  | Feb 25 13:30:27 nspeaks24 systemd[1]: ghost_chrometips-nspeaks-com.service: Main process exited, code=exited, status=1/FAILURE
  | Feb 25 13:30:27 nspeaks24 systemd[1]: ghost_chrometips-nspeaks-com.service: Failed with result 'exit-code'.
  | Feb 25 13:30:27 nspeaks24 systemd[1]: Stopped Ghost systemd service for blog: chrometips-nspeaks-com.
  | Feb 25 13:30:37 nspeaks24 systemd[1]: Started Ghost systemd service for blog: chrometips-nspeaks-com.
  | Feb 25 13:30:38 nspeaks24 node[1953]: - Inspecting operating system
  | Feb 25 13:30:43 nspeaks24 node[1953]: [2020-02-25 13:30:43] INFO Ghost is running in production...
  | Feb 25 13:30:43 nspeaks24 node[1953]: [2020-02-25 13:30:43] INFO Your site is now available on https://chrometips.nspeaks.com/
  | Feb 25 13:30:43 nspeaks24 node[1953]: [2020-02-25 13:30:43] INFO Ctrl+C to shut down
  | Feb 25 13:30:43 nspeaks24 node[1953]: [2020-02-25 13:30:43] INFO Ghost boot 4.511s
  | Feb 25 13:30:43 nspeaks24 node[1953]: [2020-02-25 13:30:43] INFO Bootstrap client was closed.