I had an existing 1.16 installation.
I read the Upgrade guides, checked all the requirements, followed all the instructions.
I went to mydomain.com/mw-config/ and followed all the steps. There were some warning but nothing relevant. It said it was ready to install, all the requirements were met. At the step where it was supposed to perform the database upgrade, I got this error (see screenshot and output below).
This is f***ed up at so many levels.
- No error should have occurred in the first place, as all requirement were made and all checks had been succesful. If some requirement were missing, then it should have been detected in the checks.
- Additionally, the spinning icon below the "Upgrade existing installation" title remained stuck spinning forever, which is an additional bug. Looks like some client-side script doesn't handle the error correctly. Even though the error was not supposed to happen in the first place, you have to handle it correctly. A spinning icon that keeps spinning forever upon an error is unacceptable.
- I should get an understandable error message telling me exactly what wrong and what I need to do to fix it, in a language that I, as the ADMINISTRATOR of the wiki, can understand.
- I see that it has something to do with database permissions: access being denied to the mysql user to perform some query.
4.1) At no point did the instructions tell me that I had to set up any particular permissions for the configured database user, or that I needed to set up a different user for the upgrade.
4.2) Why the f*** didn't the script check whether it had the needed permissions before performing the upgrade?? That is a requirement that should have been checked when checking requirements.
Turning off Content Handler DB fields for this part of upgrade. ...have ipb_id field in ipblocks table. ...have ipb_expiry field in ipblocks table. ...already have interwiki table ...indexes seem up to 20031107 standards. ...have rc_type field in recentchanges table. ...index new_name_timestamp already set on recentchanges table. ...have user_real_name field in user table. ...querycache table already exists. ...objectcache table already exists. ...categorylinks table already exists. ...have pagelinks; skipping old links table updates ...il_from OK ...have rc_ip field in recentchanges table. ...index PRIMARY already set on image table. ...have rc_id field in recentchanges table. ...have rc_patrolled field in recentchanges table. ...logging table already exists. ...have user_token field in user table. ...have wl_notificationtimestamp field in watchlist table. ...watchlist talk page rows already present. ...user table does not contain user_emailauthenticationtimestamp field. ...page table already exists. ...have log_params field in logging table. ...logging table has correct log_title encoding. ...have ar_rev_id field in archive table. ...have page_len field in page table. ...revision table does not contain inverse_timestamp field. ...have rev_text_id field in revision table. ...have rev_deleted field in revision table. ...have img_width field in image table. ...have img_metadata field in image table. ...have user_email_token field in user table. ...have ar_text_id field in archive table. ...page_namespace is already a full int (int(11)). ...ar_namespace is already a full int (int(11)). ...rc_namespace is already a full int (int(11)). ...wl_namespace is already a full int (int(11)). ...qc_namespace is already a full int (int(11)). ...log_namespace is already a full int (int(11)). ...have img_media_type field in image table. ...already have pagelinks table. ...image table does not contain img_type field. ...already have unique user_name index. ...user_groups table exists and is in current format. ...have ss_total_pages field in site_stats table. ...user_newtalk table already exists. ...transcache table already exists. ...have iw_trans field in interwiki table. ...wl_notificationtimestamp is already nullable. ...index times already set on logging table. ...have ipb_range_start field in ipblocks table. ...no page_random rows needed to be set ...have user_registration field in user table. ...templatelinks table already exists ...externallinks table already exists. ...job table already exists. ...have ss_images field in site_stats table. ...langlinks table already exists. ...querycache_info table already exists. ...filearchive table already exists. ...have ipb_anon_only field in ipblocks table. ...index rc_ns_usertext already set on recentchanges table. ...index rc_user_text already set on recentchanges table. ...have user_newpass_time field in user table. ...redirect table already exists. ...querycachetwo table already exists. ...have ipb_enable_autoblock field in ipblocks table. ...index pl_namespace on table pagelinks includes field pl_from. ...index tl_namespace on table templatelinks includes field tl_from. ...index il_to on table imagelinks includes field il_from. ...have rc_old_len field in recentchanges table. ...have user_editcount field in user table. ...page_restrictions table already exists. ...have log_id field in logging table. ...have rev_parent_id field in revision table. ...have pr_id field in page_restrictions table. ...have rev_len field in revision table. ...have rc_deleted field in recentchanges table. ...have log_deleted field in logging table. ...have ar_deleted field in archive table. ...have ipb_deleted field in ipblocks table. ...have fa_deleted field in filearchive table. ...have ar_len field in archive table. ...have ipb_block_email field in ipblocks table. ...index cl_sortkey on table categorylinks includes field cl_from. ...have oi_metadata field in oldimage table. ...index usertext_timestamp already set on archive table. ...index img_usertext_timestamp already set on image table. ...index oi_usertext_timestamp already set on oldimage table. ...have ar_page_id field in archive table. ...have img_sha1 field in image table. ...protected_titles table already exists. ...have ipb_by_text field in ipblocks table. ...page_props table already exists. ...updatelog table already exists. ...category table already exists. Populating category table, printing progress markers. For large databases, you may want to hit Ctrl-C and do this manually with maintenance/ populateCategory.php. Category population complete. Done populating category table. ...have ar_parent_id field in archive table. ...have user_last_timestamp field in user_newtalk table. Populating rev_parent_id fields, printing progress markers. For large databases, you may want to hit Ctrl-C and do this manually with maintenance/populateParentId.php. Populating rev_parent_id column ...doing rev_id from 1 to 200 ...doing rev_id from 201 to 400 ...doing rev_id from 401 to 600 ...doing rev_id from 601 to 800 ...doing rev_id from 801 to 1000 ...doing rev_id from 1001 to 1200 ...doing rev_id from 1201 to 1400 ...doing rev_id from 1401 to 1600 ...doing rev_id from 1601 to 1800 ...doing rev_id from 1801 to 2000 ...doing rev_id from 2001 to 2200 ...doing rev_id from 2201 to 2400 ...doing rev_id from 2401 to 2600 ...doing rev_id from 2601 to 2800 ...doing rev_id from 2801 to 3000 ...doing rev_id from 3001 to 3200 ...doing rev_id from 3201 to 3400 ...doing rev_id from 3401 to 3600 ...doing rev_id from 3601 to 3800 ...doing rev_id from 3801 to 4000 ...doing rev_id from 4001 to 4200 ...doing rev_id from 4201 to 4400 ...doing rev_id from 4401 to 4600 ...doing rev_id from 4601 to 4800 ...doing rev_id from 4801 to 5000 rev_parent_id population complete ... 0 rows [0 changed] ...protected_titles table has correct pt_title encoding. ...have ss_active_users field in site_stats table. ...ss_active_users user count set... ...have ipb_allow_usertalk field in ipblocks table. ...change_tag table already exists. ...tag_summary table already exists. ...valid_tag table already exists. ...user_properties table already exists. ...log_search table already exists. ...have log_user_text field in logging table. Populating log_user_text field, printing progress markers. For large databases, you may want to hit Ctrl-C and do this manually with maintenance/populateLogUsertext.php. ...doing log_id from 1 to 100 ...doing log_id from 101 to 200 ...doing log_id from 201 to 300 ...doing log_id from 301 to 400 ...doing log_id from 401 to 500 ...doing log_id from 501 to 600 ...doing log_id from 601 to 700 ...doing log_id from 701 to 800 ...doing log_id from 801 to 900 ...doing log_id from 901 to 1000 ...doing log_id from 1001 to 1100 ...doing log_id from 1101 to 1200 ...doing log_id from 1201 to 1300 ...doing log_id from 1301 to 1400 ...doing log_id from 1401 to 1500 ...doing log_id from 1501 to 1600 ...doing log_id from 1601 to 1700 ...doing log_id from 1701 to 1800 ...doing log_id from 1801 to 1900 ...doing log_id from 1901 to 2000 ...doing log_id from 2001 to 2100 ...doing log_id from 2101 to 2200 ...doing log_id from 2201 to 2300 ...doing log_id from 2301 to 2400 ...doing log_id from 2401 to 2500 ...doing log_id from 2501 to 2600 ...doing log_id from 2601 to 2700 ...doing log_id from 2701 to 2800 ...doing log_id from 2801 to 2900 ...doing log_id from 2901 to 3000 ...doing log_id from 3001 to 3100 ...doing log_id from 3101 to 3200 ...doing log_id from 3201 to 3300 ...doing log_id from 3301 to 3400 ...doing log_id from 3401 to 3500 ...doing log_id from 3501 to 3600 ...doing log_id from 3601 to 3700 ...doing log_id from 3701 to 3800 ...doing log_id from 3801 to 3900 ...doing log_id from 3901 to 4000 ...doing log_id from 4001 to 4100 ...doing log_id from 4101 to 4200 ...doing log_id from 4201 to 4300 ...doing log_id from 4301 to 4400 ...doing log_id from 4401 to 4500 ...doing log_id from 4501 to 4600 ...doing log_id from 4601 to 4700 ...doing log_id from 4701 to 4800 Done populating log_user_text field. done. Populating log_search table, printing progress markers. For large databases, you may want to hit Ctrl-C and do this manually with maintenance/populateLogSearch.php. ...doing log_id from 1 to 100 ...doing log_id from 101 to 200 ...doing log_id from 201 to 300 ...doing log_id from 301 to 400 ...doing log_id from 401 to 500 ...doing log_id from 501 to 600 ...doing log_id from 601 to 700 ...doing log_id from 701 to 800 ...doing log_id from 801 to 900 ...doing log_id from 901 to 1000 ...doing log_id from 1001 to 1100 ...doing log_id from 1101 to 1200 ...doing log_id from 1201 to 1300 ...doing log_id from 1301 to 1400 ...doing log_id from 1401 to 1500 ...doing log_id from 1501 to 1600 ...doing log_id from 1601 to 1700 ...doing log_id from 1701 to 1800 ...doing log_id from 1801 to 1900 ...doing log_id from 1901 to 2000 ...doing log_id from 2001 to 2100 ...doing log_id from 2101 to 2200 ...doing log_id from 2201 to 2300 ...doing log_id from 2301 to 2400 ...doing log_id from 2401 to 2500 ...doing log_id from 2501 to 2600 ...doing log_id from 2601 to 2700 ...doing log_id from 2701 to 2800 ...doing log_id from 2801 to 2900 ...doing log_id from 2901 to 3000 ...doing log_id from 3001 to 3100 ...doing log_id from 3101 to 3200 ...doing log_id from 3201 to 3300 ...doing log_id from 3301 to 3400 ...doing log_id from 3401 to 3500 ...doing log_id from 3501 to 3600 ...doing log_id from 3601 to 3700 ...doing log_id from 3701 to 3800 ...doing log_id from 3801 to 3900 ...doing log_id from 3901 to 4000 ...doing log_id from 4001 to 4100 ...doing log_id from 4101 to 4200 ...doing log_id from 4201 to 4300 ...doing log_id from 4301 to 4400 ...doing log_id from 4401 to 4500 ...doing log_id from 4501 to 4600 ...doing log_id from 4601 to 4700 ...doing log_id from 4701 to 4800 Done populating log_search table. done. ...l10n_cache table already exists. ...index change_tag_rc_tag already set on change_tag table. ...have rd_interwiki field in redirect table. Converting tc_time from UNIX epoch to MediaWiki timestamp ... An error occurred: A database query error has occurred. Did you forget to run your application's database schema updater after upgrading? Query: ALTER TABLE `transcache` MODIFY tc_time binary(14) Function: Wikimedia\Rdbms\Database::sourceFile( /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/maintenance/archives/patch-tc-timestamp.sql ) Error: 1142 ALTER command denied to user 'xxxx4_xxxrede'@'localhost' for table 'transcache' (localhost) Purging caches...<!DOCTYPE html> <html><head><title>Internal error - MediaWiki</title><style>body { font-family: sans-serif; margin: 0; padding: 0.5em 2em; }</style></head><body> <div class="errorbox mw-content-ltr"><p>[3d217e9d4ecd66fe2e6bcddb] /xxx-xxxxx/mw-config/?page=Upgrade Wikimedia\Rdbms\DBQueryError from line 1457 of /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/includes/libs/rdbms/database/Database.php: A database query error has occurred. Did you forget to run your application's database schema updater after upgrading? <br /> Query: DELETE FROM `module_deps`<br /> Function: DatabaseUpdater::purgeCache<br /> Error: 1146 Table 'xxxx4_xxxxxxxxdb.module_deps' doesn't exist (localhost)<br /> </p><p>Backtrace:</p><p>#0 /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/includes/libs/rdbms/database/Database.php(1427): Wikimedia\Rdbms\Database->makeQueryException(string, integer, string, string)<br /> #1 /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/includes/libs/rdbms/database/Database.php(1200): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean)<br /> #2 /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/includes/libs/rdbms/database/Database.php(2845): Wikimedia\Rdbms\Database->query(string, string)<br /> #3 /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/includes/installer/DatabaseUpdater.php(1022): Wikimedia\Rdbms\Database->delete(string, string, string)<br /> #4 /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/includes/installer/DatabaseInstaller.php(394): DatabaseUpdater->purgeCache()<br /> #5 /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/includes/installer/WebInstallerUpgrade.php(65): DatabaseInstaller->doUpgrade()<br /> #6 /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/includes/installer/WebInstaller.php(281): WebInstallerUpgrade->execute()<br /> #7 /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/mw-config/index.php(79): WebInstaller->execute(array)<br /> #8 /srv/www/xxxxxxxx.com/public_html/xxx-xxxxx/mw-config/index.php(38): wfInstallerMain()<br /> #9 {main}</p></div> </body></html>
{F27200575}