I am not able to update ghost past 3.22.2 (current version on my server). I skip 3.23 as there is a notification that there is an issue with upgrading from earlier versions, but with both 3.24.0 and 3.25.0 I get the following error in the ghost-cli debug log each time I try to upgrade:
Debug Information:
OS: Debian GNU/Linux, v10
Node Version: v10.14.2
Ghost Version: 3.25.0
Ghost-CLI Version: 1.14.1
Environment: production
Command: ‘ghost update’
Message: alter table tags add twitter_image varchar(2000) null - ER_TOO_BIG_ROWSIZE: Row size too large. The maximum row size for the used ta$
Help: Error occurred while executing the following migration: 04-add-meta-columns-to-tags-table.js
Suggestion: journalctl -u ghost_blog-leavesoftea-net -n 50
Stack: Error: alter table tags add twitter_image varchar(2000) null - ER_TOO_BIG_ROWSIZE: Row size too large. The maximum row size for the us$
at Server.server.close (/usr/local/lib/node_modules/ghost-cli/lib/utils/port-polling.js:38:28)
at Object.onceWrapper (events.js:273:13)
at Server.emit (events.js:182:13)
at emitCloseNT (net.js:1629:8)
at process._tickCallback (internal/process/next_tick.js:63:19)
OS: Debian 10.4
Database Server: MariaDB v10.3.22-0+deb10u1
Web Server: NGINX v1.18.0
Install date of this Ghost instance: Manual Install - October 2013
Would you be able to provide us with a little more information to help us, help you?
I noticed in the logs you’ve posted there’s a string like "The maximum row size for the used ta$" - did something get cut off when you were pasting that in? If so, the rest of it would be really useful!
If you’re able to connect to your database, the output of running describe tags; would also be really useful (it doesn’t contain any personal information, just the columns and data types in the table).
Lastly are you running a 32bit operating system? If you’re not sure would you be able to share the output of uname -m?
Hi, I’m having the same issue with a similar system setup (Debian 10, etc etc…)
Message: alter table tags add twitter_image varchar(2000) null - ER_TOO_BIG_ROWSIZE: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Help: Error occurred while executing the following migration: 04-add-meta-columns-to-tags-table.js
Suggestion: journalctl -u ghost instance -n 50
Honestly I’m fascinated by this - the max row size in modern versions of MySQL is 65,535K, not 8126K, I’m not sure if you’re getting 8K errors because you’re on a too-old DB, a buggy version or a misconfigured DB - Google suggests it could be any of them.
The post table is twice as big as the update tags table (posts = 32K, updated tags = 16K) - so I don’t understand how you’ve managed to get this far with posts if your DB doesn’t support more than 8K per row.
What do you get with SHOW TABLE STATUS WHERE Name = 'posts'?
I dist-upgraded from Debian 9, so previous MariaDB installation was 10.1 (and the default row format “Compact”) so after upgrading to Debian 10 there was no default file format set as it should be Barracuda and the row format to dynamic
So, to avoid headaches in future installations set/make sure that the default row_format to dynamic and the file format to Barracuda. In already.existing installations you may have to change the table row format
Great catch on this one @rmontagud! I, like you, also dist-upgraded and so once I set barracuda and dynamic then altered the tables, the upgrade to 3.25.0 was able to succeed.
Thanks much!
Steps I used to fix this problem
In your my.cnf set the following under [mysqld]:
innodb_default_row_format = dynamic
innodb_file_format = barracuda
Then restart your database server
Then alter your tables with:
ALTER TABLE `[table_name]` ROW_FORMAT=DYNAMIC
I had the same issue - kudos to @ceylon23 and @rmontagud for the solution!
I have many blogs hosted on various Debian servers - and make the following tweaks to @ceylon23’s fix:
Don’t change my.cnf - the Debian way is to add a new .cnf file in /etc/mysql/conf.d - e.g. /etc/mysql/conf.d/custom.cnf so that upgrades will not overwrite your change.
Don’t set innodb_file_format = barracuda' - that option is being deprecated - see the MySQL docs.
DO set innodb_default_row_format = dynamic
Instead of ALTER TABLE you can use the command-line to fix all tables in the database: e.g. one of: