[wp-trac] [WordPress Trac] #56259: Database Repair doesn't check for missing primary keys / A.I.

WordPress Trac noreply at wordpress.org
Wed Jul 20 15:55:41 UTC 2022


#56259: Database Repair doesn't check for missing primary keys / A.I.
-------------------------+-----------------------------
 Reporter:  harryfear    |      Owner:  (none)
     Type:  enhancement  |     Status:  new
 Priority:  normal       |  Milestone:  Awaiting Review
Component:  Database     |    Version:
 Severity:  minor        |   Keywords:
  Focuses:               |
-------------------------+-----------------------------
 Hi amazing WP community,

 This is the second time I've come across this issue in the wild.

 The built-in DB repair functionality (repair.php) doesn't attempt to
 verify or repair missing primary key / autoincrement attributes of the
 core wp_posts table (and possibly other important core tables). This
 affects fringe/edge cases where this core table has been corrupted due to
 third-party plugins or other user misfortune.

 We just need add some SQL to check for this health database attribute,
 such as:

 {{{
 SELECT COLUMN_NAME
 FROM information_schema.KEY_COLUMN_USAGE
 WHERE TABLE_NAME = 'wp_posts'
   AND CONSTRAINT_NAME = 'PRIMARY';
 }}}

 {{{
 SELECT COLUMN_NAME
 FROM information_schema.KEY_COLUMN_USAGE
 WHERE TABLE_NAME = 'wp_options'
   AND CONSTRAINT_NAME = 'PRIMARY';
 }}}

 (Adapted from source: https://stackoverflow.com/a/52288527/8800423)

 These should each return 1 result each.

 As part of 'repair', we could have auto-fix SQL to re-enable the auto-
 increment / primary key. There is obviously sometimes a 'market' for that
 fix:

 https://webshop.mijnpress.nl/shop/plugins/wpdb-wp-core-database-sql-index-
 primary-keys-fix-script/ (commercial; no association)

 There are quite a few edge/fringe cases recorded that this could help:
 • https://wordpress.stackexchange.com/questions/353713/wordpress-database-
 problem-wp-posts-primary-key
 • https://wordpress.stackexchange.com/questions/237076/resetting-auto-
 increment-primary-key
 • https://www.alexgeorgiou.gr/repair-auto_increment-primary-key-wordpress-
 mysql/
 • https://wordpress.stackexchange.com/questions/329162/is-it-possible-to-
 fix-repair-all-index-primary-key-unique-and-all-other-stru
 • https://wordpress.stackexchange.com/questions/225641/wordpress-database-
 lost-auto-increment

 Additionally, in a sense this is a core functionality break if these
 database attributes are not present because posts will fail to create in
 the DB.

 Perhaps the detection and fix shouldn't be on advanced user’s manual use
 of repair.php.

 In which case, running a regular check with mosts WP requests would be
 non-performant. So perhaps this could be included as a CRON'd/infrequent
 health check within the WP Site Health scope?

 N.B. The popular non-core "WP-DBManager" plugin does not (at latest
 version 2.80.8) check for (let alone repair) this issue either.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/56259>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list