Error "#1067 - Invalid default value for 'post_date'" al intentar restablecer AI después de la copia de seguridad
He restaurado mi base de datos de WordPress desde una copia de seguridad SQL. Sin embargo, al hacerlo, todas las tablas han perdido el auto increment.
Cuando intento agregarlo de nuevo con este SQL:
ALTER TABLE `mercury_posts` CHANGE `ID` `ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT;
Obtengo el error #1067 - Invalid default value for 'post_date'
. ¿Cómo puedo solucionarlo?

El valor predeterminado de post_date es 0000-00-00 00:00:00. Si verificas la variable sql_mode de esta manera:
show variables like 'sql_mode';
... te mostrará la variable sql_mode, que será algo como esto: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Debes configurar nuevamente la variable sql_mode sin NO_ZERO_IN_DATE,NO_ZERO_DATE
Así que en el ejemplo anterior deberías establecer sql_mode de esta forma:
SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Luego verifica nuevamente la variable sql_mode para asegurarte de que haya cambiado correctamente:
show variables like 'sql_mode';
¡Entonces la restricción desaparecerá! ;D
Encontré la solución aquí: https://stackoverflow.com/a/37696251/504910

Lo anterior agregó un AUTO_CREATE_USER incorrecto. El código correcto estaba en la URL vinculada (https://stackoverflow.com/a/37696251/504910) set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

El código que escribí no incluye NO_ZERO_IN_DATE,NO_ZERO_DATE. La variable sql_mode original en mi sistema tenía NO_AUTO_CREATE_USER, así que la dejé así.

El código proporcionado por @CarlosFaria no funciona para el problema descrito. Pero el código proporcionado por popealope
funciona bien. Por lo tanto, prefiero corregir esto en la publicación.

Consulta mi respuesta para una explicación de por qué ocurre esto https://wordpress.stackexchange.com/a/426561/157837

Primera ejecución
ALTER TABLE `wp_posts`
CHANGE `post_date` `post_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE `post_date_gmt` `post_date_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE `post_modified` `post_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE `post_modified_gmt` `post_modified_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
luego después del auto incremento

Tal como está redactada actualmente, tu respuesta no es clara. Por favor, [edita] para añadir detalles adicionales que ayuden a otros a entender cómo esto responde a la pregunta formulada. Puedes encontrar más información sobre cómo escribir buenas respuestas en el centro de ayuda.

La respuesta de Carlos Faria ¡es perfecta!
Pero aquí hay un pequeño código que puedes usar si estás en PhpMyAdmin y no quieres meterte con la configuración SQL.
Aquí voy a cambiar el valor de sql_mode
pero solo para la sesión, solo el tiempo necesario para alterar la tabla:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'NO_ZERO_IN_DATE,NO_ZERO_DATE',''));
ALTER TABLE wp_posts auto_increment = XXX;
(No olvides cambiar el prefijo de la tabla wp_
y reemplazar XXX
por el nuevo valor AI que deseas)

Cambiar sql_mode a
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
funciona, pero solo dura hasta que reinicias el servidor SQL.
Así que en caso de que lo necesites nuevamente, tendrás que cambiar sql_mode otra vez.

esta es la respuesta y solución correcta a la pregunta: https://gist.github.com/kaorukobo/718f4eb684ac01e1b65fc4cb69587fae
en resumen: no puedes modificar la tabla, porque MySQL detecta un error de valor predeterminado para el campo post_date (y otros también). por lo tanto, solo adapta la consulta para resolver este problema, después de eso, puedes modificar la tabla como desees.
