Dzisiaj kilka słów na temat migracji zmian w szablonach wykorzystujących ACF (Advanced Custom Fields). Pracując z ACF’ami w fazie rozwojowej projektu webdeweloperzy stają przed problemem wielokrotnego uzupełniania zmian w szablonach. Dopóki mamy możliwość wdrażania zrzutów całych baz danych na serwery docelowe (testowy, produkcyjny itd.), dopóty problem jest do zgryzienia. Jednak, gdy nie ma już możliwości nadpisywania danych w bazie (z różnych przyczyn – np. przez dane produkcyjne, testowe lub inne specyficzne na serwerze docelowym, których nie chcemy utracić) trzeba sobie radzić innymi środkami. W bieżącym artykule postaram się pokazać jedną z metod.

Oczywiście problemu nie ma, gdy sytuacja dotyczy dodania lub usunięcia jednego lub maksymalnie kilka pól ACF. Czas poświęcony na „przeklikanie” zmian we wszystkich wersjach systemu (serwerach) w panelu administracyjnym jest podobny do tego, który zajmie nam wykorzystanie metody, o której tutaj mowa. Polega ona na wykorzystaniu logów binarnych MySQL (mysqlbinlog).

Od czego zaczynamy?

Konieczna jest odpowiednia konfiguracja serwera bazodanowego MySQL (plik my.ini):

log-bin=mysql-bin
binlog-do-db=db_name
binlog_format=STATEMENT
expire_logs_days=10
max_binlog_size=100M

Włączenie logów binarnych rozpocznie się po restarcie serwera DB. Odtąd jakakolwiek operacja w bazie danych, przyczyniająca się do zmiany struktury lub samych danych, zostanie zarchiwizowana w plikach logów.

Tym sposobem jesteśmy w domu. Mamy skąd brać komendy do uruchomienia na serwerach docelowych w celu aktualizacji struktury szablonów.

Odczyt binlogów

Wykorzystując bogactwo parametrów aplikacji mysqlbinlog możemy dokonać replikacji, wykorzystując parametr

--start-datetime="2017-08-25 11:25:56"

i/lub

--stop-datetime="2017-09-01 11:25:56"

Podając jako wartości czas rozpoczęcia i czas zakończenia zmian przefiltrujemy logi, by uzyskać tylko te, które nas interesują.

Komendą:

./mysqlbinlog.exe /f/Xampp/mysql/data/mysql-bin.000012 | grep -i 'update \|insert \|delete \|replace \|alter ' > /f/Xampp/mysql/data/preview-000012.txt

pobieramy listę komend ze wskazanego pliku binarnego (możemy podać kilka po spacjach), które później wykorzystamy do replikacji.

Polecenie wykorzystuje unixowego grepa, więc w konsoli Windowsa go nie wykonacie, ale można wykorzystać do tego Git bash.

Przykładowa lista:

/* Aktualizacja metadanych i danych posta typu group ACF */
 UPDATE `wp_postmeta` SET `meta_value` = '1' WHERE `post_id` = 104 AND `meta_key` = '_edit_last'
 UPDATE `wp_posts` SET `post_author` = 1, `post_date` = '2017-08-07 11:18:11', `post_date_gmt` = '2017-08-07 09:18:11', `post_content` = 'a:7:{s:8:\"location\";a:1:{i:0;a:1:{i:0;a:3:{s:5:\"param\";s:12:\"options_page\";s:8:\"operator\";s:2:\"==\";s:5:\"value\";s:14:\"system-options\";}}}s:8:\"position\";s:6:\"normal\";s:5:\"style\";s:8:\"seamless\";s:15:\"label_placement\";s:3:\"top\";s:21:\"instruction_placement\";s:5:\"label\";s:14:\"hide_on_screen\";s:0:\"\";s:11:\"description\";s:124:\"Zawiera wszelkie parametry potrzebne na wszystkich stronach/podstronach systemowych (lub na zdecydowanej większości stron)\";}', `post_content_filtered` = '', `post_title` = 'Parametry globalne', `post_excerpt` = 'parametry-globalne', `post_status` = 'publish', `post_type` = 'acf-field-group', `comment_status` = 'closed', `ping_status` = 'closed', `post_password` = '', `post_name` = 'group_59882fcedfde7', `to_ping` = '', `pinged` = '', `post_modified` = '2017-08-31 08:23:40', `post_modified_gmt` = '2017-08-31 06:23:40', `post_parent` = 0, `menu_order` = 0, `post_mime_type` = '', `guid` = 'http://127.0.0.2/?post_type=acf-field-group&p=104' WHERE `ID` = 104

/* Aktualizacja bez znaczenie w kontekscie przenoszenia danych */
 UPDATE `wp_options` SET `option_value` = 'a:11:{i:1504160920;a:1:{s:25:\"wpseo_ping_search_engines\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:0:{}}}}i:1504162423;a:1:{s:24:\"akismet_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504163319;a:1:{s:12:\"wsal_cleanup\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}}i:1504165149;a:1:{s:30:\"wp_scheduled_auto_draft_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504165487;a:1:{s:19:\"wpseo-reindex-links\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504169920;a:1:{s:17:\"log_files_pruning\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504178766;a:3:{s:16:\"wp_version_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:17:\"wp_update_plugins\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:16:\"wp_update_themes\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1504178806;a:1:{s:19:\"wp_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504184552;a:1:{s:13:\"sm_ping_daily\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504235460;a:1:{s:29:\"mc4wp_refresh_mailchimp_lists\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}s:7:\"version\";i:2;}' WHERE `option_name` = 'cron'

/* Aktualizacja AuditLog'a - bez znaczenia w kontekście przenoszenia danych */
 REPLACE INTO `wp_wsal_occurrences` (`site_id`, `alert_id`, `created_on`, `is_read`, `is_migrated`) VALUES (1, 2031, 1504160621.110184, '', '')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (398, 'PostID', 104)
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (398, 'PostType', 'acf-field-group')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (398, 'PostTitle', 'Parametry globalne')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (398, 'PostUrl', 'http://127.0.0.2/?post_type=acf-field-group&p=104')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (398, 'EditorLinkPost', 'http://127.0.0.2/wp-admin/post.php?post=104&action=edit')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (398, 'ClientIP', '127.0.0.1')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (398, 'UserAgent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (398, 'CurrentUserID', 1)
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (398, 'CurrentUserRoles', 'a:2:{i:0;s:13:\"administrator\";i:1;s:10:\"superadmin\";}')

/* Aktualizacja danych pingback'a powiązanego z ostatnio aktualizowanym postem typu group ACF */
 INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient_timeout_sm_ping_post_id', '1504160741', 'no') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)
 INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient_sm_ping_post_id', '104', 'no') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)

/* Aktualizacja bez znaczenie w kontekscie przenoszenia danych */
 UPDATE `wp_options` SET `option_value` = 'a:12:{i:1504160626;a:1:{s:7:\"sm_ping\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:0:{}}}}i:1504160920;a:1:{s:25:\"wpseo_ping_search_engines\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:0:{}}}}i:1504162423;a:1:{s:24:\"akismet_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504163319;a:1:{s:12:\"wsal_cleanup\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}}i:1504165149;a:1:{s:30:\"wp_scheduled_auto_draft_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504165487;a:1:{s:19:\"wpseo-reindex-links\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504169920;a:1:{s:17:\"log_files_pruning\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504178766;a:3:{s:16:\"wp_version_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:17:\"wp_update_plugins\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:16:\"wp_update_themes\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1504178806;a:1:{s:19:\"wp_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504184552;a:1:{s:13:\"sm_ping_daily\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504235460;a:1:{s:29:\"mc4wp_refresh_mailchimp_lists\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}s:7:\"version\";i:2;}' WHERE `option_name` = 'cron'

/* Tworzenie posta typu field ACF, który został dołączony do group ACF */
 INSERT INTO `wp_posts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_content_filtered`, `post_title`, `post_excerpt`, `post_status`, `post_type`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_parent`, `menu_order`, `post_mime_type`, `guid`) VALUES (1, '2017-08-31 08:23:41', '2017-08-31 06:23:41', 'a:10:{s:4:\"type\";s:4:\"text\";s:12:\"instructions\";s:0:\"\";s:8:\"required\";i:0;s:17:\"conditional_logic\";i:0;s:7:\"wrapper\";a:3:{s:5:\"width\";s:0:\"\";s:5:\"class\";s:0:\"\";s:2:\"id\";s:0:\"\";}s:13:\"default_value\";s:0:\"\";s:11:\"placeholder\";s:0:\"\";s:7:\"prepend\";s:0:\"\";s:6:\"append\";s:0:\"\";s:9:\"maxlength\";s:0:\"\";}', '', 'Test2', 'test2', 'publish', 'acf-field', 'closed', 'closed', '', 'field_59a7ab67b2cd3', '', '', '2017-08-31 08:23:41', '2017-08-31 06:23:41', 104, 2, '', '')
 UPDATE `wp_posts` SET `guid` = 'http://127.0.0.2/?post_type=acf-field&p=167' WHERE `ID` = 167

/* Aktualizacja AuditLog'a - bez znaczenia w kontekście przenoszenia danych */
 REPLACE INTO `wp_wsal_occurrences` (`site_id`, `alert_id`, `created_on`, `is_read`, `is_migrated`) VALUES (1, 2041, 1504160621.833010, '', '')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'PostID', 104)
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'PostType', 'acf-field-group')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'PostTitle', 'Parametry globalne')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'OldDate', '2017-08-07 11:18:11')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'NewDate', '2017-08-31 08:23:41')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'EditorLinkPost', 'http://127.0.0.2/wp-admin/post.php?post=104&action=edit')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'ClientIP', '127.0.0.1')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'UserAgent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'CurrentUserID', 1)
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (399, 'CurrentUserRoles', 'a:2:{i:0;s:13:\"administrator\";i:1;s:10:\"superadmin\";}')

/* Aktualizacja danych pingback'a powiązanego z ostatnio aktualizowanym postem typu field ACF */
 UPDATE `wp_options` SET `option_value` = '1504160742' WHERE `option_name` = '_transient_timeout_sm_ping_post_id'
 UPDATE `wp_options` SET `option_value` = '167' WHERE `option_name` = '_transient_sm_ping_post_id'

/* Aktualizacja metadanych i danych posta typu group ACF */
 UPDATE `wp_posts` SET `post_author` = 1, `post_date` = '2017-08-07 11:18:11', `post_date_gmt` = '2017-08-07 09:18:11', `post_content` = 'a:7:{s:8:\"location\";a:1:{i:0;a:1:{i:0;a:3:{s:5:\"param\";s:12:\"options_page\";s:8:\"operator\";s:2:\"==\";s:5:\"value\";s:14:\"system-options\";}}}s:8:\"position\";s:6:\"normal\";s:5:\"style\";s:8:\"seamless\";s:15:\"label_placement\";s:3:\"top\";s:21:\"instruction_placement\";s:5:\"label\";s:14:\"hide_on_screen\";s:0:\"\";s:11:\"description\";s:124:\"Zawiera wszelkie parametry potrzebne na wszystkich stronach/podstronach systemowych (lub na zdecydowanej większości stron)\";}', `post_content_filtered` = '', `post_title` = 'Parametry globalne', `post_excerpt` = 'parametry-globalne', `post_status` = 'publish', `post_type` = 'acf-field-group', `comment_status` = 'closed', `ping_status` = 'closed', `post_password` = '', `post_name` = 'group_59882fcedfde7', `to_ping` = '', `pinged` = '', `post_modified` = '2017-08-31 08:23:42', `post_modified_gmt` = '2017-08-31 06:23:42', `post_parent` = 0, `menu_order` = 0, `post_mime_type` = '', `guid` = 'http://127.0.0.2/?post_type=acf-field-group&p=104' WHERE `ID` = 104

/* Aktualizacja AuditLog'a - bez znaczenia w kontekście przenoszenia danych */
 REPLACE INTO `wp_wsal_occurrences` (`site_id`, `alert_id`, `created_on`, `is_read`, `is_migrated`) VALUES (1, 2031, 1504160622.296931, '', '')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (400, 'PostID', 104)
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (400, 'PostType', 'acf-field-group')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (400, 'PostTitle', 'Parametry globalne')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (400, 'PostUrl', 'http://127.0.0.2/?post_type=acf-field-group&p=104')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (400, 'EditorLinkPost', 'http://127.0.0.2/wp-admin/post.php?post=104&action=edit')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (400, 'ClientIP', '127.0.0.1')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (400, 'UserAgent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (400, 'CurrentUserID', 1)
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (400, 'CurrentUserRoles', 'a:2:{i:0;s:13:\"administrator\";i:1;s:10:\"superadmin\";}')
 REPLACE INTO `wp_wsal_options` (`id`, `option_name`, `option_value`) VALUES ('8', 'wsal-promo-send-id', 2)
 REPLACE INTO `wp_wsal_occurrences` (`site_id`, `alert_id`, `created_on`, `is_read`, `is_migrated`) VALUES (1, 9999, 1504160622.625304, '', '')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (401, 'ClientIP', '127.0.0.1')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (401, 'Username', 'Plugin')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (401, 'PromoMessage', 'Benefit from a discount of 70&percnt; upgrade to premium for just $89 and add <strong>Email Alerts</strong>, <strong>User Logins Management</strong>, <strong>Search</strong> and <strong>Reporting</strong> functionality to the plugin. <strong><a href=\"https://www.wpsecurityauditlog.com/extensions/all-add-ons-60-off/?utm_source=auditviewer&utm_medium=promoalert&utm_campaign=plugin\" target=\"_blank\">Upgrade Now</a></strong>')
 REPLACE INTO `wp_wsal_metadata` (`occurrence_id`, `name`, `value`) VALUES (401, 'PromoName', 'Get 70% Discount When You Upgrade to Premium')

/* Aktualizacja danych pingback'a powiązanego z ostatnio aktualizowanym postem typu group ACF */
 UPDATE `wp_options` SET `option_value` = '104' WHERE `option_name` = '_transient_sm_ping_post_id'

/* Aktualizacja blokady posta typu group ACF */
 UPDATE `wp_postmeta` SET `meta_value` = '1504160622:1' WHERE `post_id` = 104 AND `meta_key` = '_edit_lock'
 UPDATE `wp_postmeta` SET `meta_value` = '1504160623:1' WHERE `post_id` = 104 AND `meta_key` = '_edit_lock'

/* Aktualizacja bez znaczenie w kontekscie przenoszenia danych */
 INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient_doing_cron', '1504160685.0463778972625732421875', 'yes') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)
 UPDATE `wp_options` SET `option_value` = 'a:11:{i:1504160920;a:1:{s:25:\"wpseo_ping_search_engines\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:0:{}}}}i:1504162423;a:1:{s:24:\"akismet_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504163319;a:1:{s:12:\"wsal_cleanup\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}}i:1504165149;a:1:{s:30:\"wp_scheduled_auto_draft_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504165487;a:1:{s:19:\"wpseo-reindex-links\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504169920;a:1:{s:17:\"log_files_pruning\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504178766;a:3:{s:16:\"wp_version_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:17:\"wp_update_plugins\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:16:\"wp_update_themes\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1504178806;a:1:{s:19:\"wp_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504184552;a:1:{s:13:\"sm_ping_daily\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1504235460;a:1:{s:29:\"mc4wp_refresh_mailchimp_lists\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}s:7:\"version\";i:2;}' WHERE `option_name` = 'cron'
 UPDATE `wp_options` SET `option_value` = 'O:28:\"GoogleSitemapGeneratorStatus\":4:{s:39:\"\0GoogleSitemapGeneratorStatus\0startTime\";d:1504160686.972997;s:37:\"\0GoogleSitemapGeneratorStatus\0endTime\";i:0;s:41:\"\0GoogleSitemapGeneratorStatus\0pingResults\";a:0:{}s:38:\"\0GoogleSitemapGeneratorStatus\0autoSave\";b:1;}' WHERE `option_name` = 'sm_status'
 UPDATE `wp_options` SET `option_value` = 'O:28:\"GoogleSitemapGeneratorStatus\":4:{s:39:\"\0GoogleSitemapGeneratorStatus\0startTime\";d:1504160686.972997;s:37:\"\0GoogleSitemapGeneratorStatus\0endTime\";i:0;s:41:\"\0GoogleSitemapGeneratorStatus\0pingResults\";a:1:{s:6:\"google\";a:5:{s:9:\"startTime\";d:1504160687.014118;s:7:\"endTime\";i:0;s:7:\"success\";b:0;s:3:\"url\";s:91:\"http://www.google.com/webmasters/sitemaps/ping?sitemap=http%3A%2F%2F127.0.0.2%2Fsitemap.xml\";s:4:\"name\";s:6:\"Google\";}}s:38:\"\0GoogleSitemapGeneratorStatus\0autoSave\";b:1;}' WHERE `option_name` = 'sm_status'
 UPDATE `wp_options` SET `option_value` = 'O:28:\"GoogleSitemapGeneratorStatus\":4:{s:39:\"\0GoogleSitemapGeneratorStatus\0startTime\";d:1504160686.972997;s:37:\"\0GoogleSitemapGeneratorStatus\0endTime\";i:0;s:41:\"\0GoogleSitemapGeneratorStatus\0pingResults\";a:1:{s:6:\"google\";a:5:{s:9:\"startTime\";d:1504160687.014118;s:7:\"endTime\";d:1504160687.175035;s:7:\"success\";b:1;s:3:\"url\";s:91:\"http://www.google.com/webmasters/sitemaps/ping?sitemap=http%3A%2F%2F127.0.0.2%2Fsitemap.xml\";s:4:\"name\";s:6:\"Google\";}}s:38:\"\0GoogleSitemapGeneratorStatus\0autoSave\";b:1;}' WHERE `option_name` = 'sm_status'
 UPDATE `wp_options` SET `option_value` = 'O:28:\"GoogleSitemapGeneratorStatus\":4:{s:39:\"\0GoogleSitemapGeneratorStatus\0startTime\";d:1504160686.972997;s:37:\"\0GoogleSitemapGeneratorStatus\0endTime\";i:0;s:41:\"\0GoogleSitemapGeneratorStatus\0pingResults\";a:2:{s:6:\"google\";a:5:{s:9:\"startTime\";d:1504160687.014118;s:7:\"endTime\";d:1504160687.175035;s:7:\"success\";b:1;s:3:\"url\";s:91:\"http://www.google.com/webmasters/sitemaps/ping?sitemap=http%3A%2F%2F127.0.0.2%2Fsitemap.xml\";s:4:\"name\";s:6:\"Google\";}s:4:\"bing\";a:5:{s:9:\"startTime\";d:1504160687.222716;s:7:\"endTime\";i:0;s:7:\"success\";b:0;s:3:\"url\";s:84:\"http://www.bing.com/webmaster/ping.aspx?siteMap=http%3A%2F%2F127.0.0.2%2Fsitemap.xml\";s:4:\"name\";s:4:\"Bing\";}}s:38:\"\0GoogleSitemapGeneratorStatus\0autoSave\";b:1;}' WHERE `option_name` = 'sm_status'
 UPDATE `wp_options` SET `option_value` = 'O:28:\"GoogleSitemapGeneratorStatus\":4:{s:39:\"\0GoogleSitemapGeneratorStatus\0startTime\";d:1504160686.972997;s:37:\"\0GoogleSitemapGeneratorStatus\0endTime\";i:0;s:41:\"\0GoogleSitemapGeneratorStatus\0pingResults\";a:2:{s:6:\"google\";a:5:{s:9:\"startTime\";d:1504160687.014118;s:7:\"endTime\";d:1504160687.175035;s:7:\"success\";b:1;s:3:\"url\";s:91:\"http://www.google.com/webmasters/sitemaps/ping?sitemap=http%3A%2F%2F127.0.0.2%2Fsitemap.xml\";s:4:\"name\";s:6:\"Google\";}s:4:\"bing\";a:5:{s:9:\"startTime\";d:1504160687.222716;s:7:\"endTime\";d:1504160687.55949;s:7:\"success\";b:1;s:3:\"url\";s:84:\"http://www.bing.com/webmaster/ping.aspx?siteMap=http%3A%2F%2F127.0.0.2%2Fsitemap.xml\";s:4:\"name\";s:4:\"Bing\";}}s:38:\"\0GoogleSitemapGeneratorStatus\0autoSave\";b:1;}' WHERE `option_name` = 'sm_status'
 UPDATE `wp_options` SET `option_value` = 'a:52:{s:18:\"sm_b_prio_provider\";s:41:\"GoogleSitemapGeneratorPrioByCountProvider\";s:9:\"sm_b_ping\";b:1;s:10:\"sm_b_stats\";b:0;s:12:\"sm_b_pingmsn\";b:1;s:12:\"sm_b_autozip\";b:1;s:11:\"sm_b_memory\";s:0:\"\";s:9:\"sm_b_time\";i:-1;s:18:\"sm_b_style_default\";b:1;s:10:\"sm_b_style\";s:0:\"\";s:12:\"sm_b_baseurl\";s:0:\"\";s:11:\"sm_b_robots\";b:1;s:9:\"sm_b_html\";b:0;s:12:\"sm_b_exclude\";a:0:{}s:17:\"sm_b_exclude_cats\";a:0:{}s:10:\"sm_in_home\";b:1;s:11:\"sm_in_posts\";b:1;s:15:\"sm_in_posts_sub\";b:0;s:11:\"sm_in_pages\";b:1;s:10:\"sm_in_cats\";b:0;s:10:\"sm_in_arch\";b:0;s:10:\"sm_in_auth\";b:0;s:10:\"sm_in_tags\";b:0;s:9:\"sm_in_tax\";a:2:{i:0;s:13:\"offercategory\";i:1;s:9:\"promotype\";}s:17:\"sm_in_customtypes\";a:2:{i:0;s:10:\"wholesaler\";i:1;s:5:\"offer\";}s:13:\"sm_in_lastmod\";b:1;s:10:\"sm_cf_home\";s:5:\"daily\";s:11:\"sm_cf_posts\";s:7:\"monthly\";s:11:\"sm_cf_pages\";s:6:\"weekly\";s:10:\"sm_cf_cats\";s:6:\"weekly\";s:10:\"sm_cf_auth\";s:6:\"weekly\";s:15:\"sm_cf_arch_curr\";s:5:\"daily\";s:14:\"sm_cf_arch_old\";s:6:\"yearly\";s:10:\"sm_cf_tags\";s:6:\"weekly\";s:10:\"sm_pr_home\";d:1;s:11:\"sm_pr_posts\";d:0.6;s:15:\"sm_pr_posts_min\";d:0.2;s:11:\"sm_pr_pages\";d:0.6;s:10:\"sm_pr_cats\";d:0.3;s:10:\"sm_pr_arch\";d:0.3;s:10:\"sm_pr_auth\";d:0.3;s:10:\"sm_pr_tags\";d:0.3;s:12:\"sm_i_donated\";b:0;s:17:\"sm_i_hide_donated\";b:0;s:17:\"sm_i_install_date\";i:1502366607;s:16:\"sm_i_hide_survey\";b:0;s:14:\"sm_i_hide_note\";b:0;s:15:\"sm_i_hide_works\";b:0;s:16:\"sm_i_hide_donors\";b:0;s:9:\"sm_i_hash\";s:20:\"9de64aaa23192f13b375\";s:13:\"sm_i_lastping\";i:1504160687;s:16:\"sm_i_supportfeed\";b:1;s:22:\"sm_i_supportfeed_cache\";i:1503899007;}' WHERE `option_name` = 'sm_options'
 UPDATE `wp_options` SET `option_value` = 'O:28:\"GoogleSitemapGeneratorStatus\":4:{s:39:\"\0GoogleSitemapGeneratorStatus\0startTime\";d:1504160686.972997;s:37:\"\0GoogleSitemapGeneratorStatus\0endTime\";d:1504160687.630689;s:41:\"\0GoogleSitemapGeneratorStatus\0pingResults\";a:2:{s:6:\"google\";a:5:{s:9:\"startTime\";d:1504160687.014118;s:7:\"endTime\";d:1504160687.175035;s:7:\"success\";b:1;s:3:\"url\";s:91:\"http://www.google.com/webmasters/sitemaps/ping?sitemap=http%3A%2F%2F127.0.0.2%2Fsitemap.xml\";s:4:\"name\";s:6:\"Google\";}s:4:\"bing\";a:5:{s:9:\"startTime\";d:1504160687.222716;s:7:\"endTime\";d:1504160687.55949;s:7:\"success\";b:1;s:3:\"url\";s:84:\"http://www.bing.com/webmaster/ping.aspx?siteMap=http%3A%2F%2F127.0.0.2%2Fsitemap.xml\";s:4:\"name\";s:4:\"Bing\";}}s:38:\"\0GoogleSitemapGeneratorStatus\0autoSave\";b:1;}' WHERE `option_name` = 'sm_status'
 UPDATE `wp_options` SET `option_value` = 'a:52:{s:18:\"sm_b_prio_provider\";s:41:\"GoogleSitemapGeneratorPrioByCountProvider\";s:9:\"sm_b_ping\";b:1;s:10:\"sm_b_stats\";b:0;s:12:\"sm_b_pingmsn\";b:1;s:12:\"sm_b_autozip\";b:1;s:11:\"sm_b_memory\";s:0:\"\";s:9:\"sm_b_time\";i:-1;s:18:\"sm_b_style_default\";b:1;s:10:\"sm_b_style\";s:0:\"\";s:12:\"sm_b_baseurl\";s:0:\"\";s:11:\"sm_b_robots\";b:1;s:9:\"sm_b_html\";b:0;s:12:\"sm_b_exclude\";a:0:{}s:17:\"sm_b_exclude_cats\";a:0:{}s:10:\"sm_in_home\";b:1;s:11:\"sm_in_posts\";b:1;s:15:\"sm_in_posts_sub\";b:0;s:11:\"sm_in_pages\";b:1;s:10:\"sm_in_cats\";b:0;s:10:\"sm_in_arch\";b:0;s:10:\"sm_in_auth\";b:0;s:10:\"sm_in_tags\";b:0;s:9:\"sm_in_tax\";a:2:{i:0;s:13:\"offercategory\";i:1;s:9:\"promotype\";}s:17:\"sm_in_customtypes\";a:2:{i:0;s:10:\"wholesaler\";i:1;s:5:\"offer\";}s:13:\"sm_in_lastmod\";b:1;s:10:\"sm_cf_home\";s:5:\"daily\";s:11:\"sm_cf_posts\";s:7:\"monthly\";s:11:\"sm_cf_pages\";s:6:\"weekly\";s:10:\"sm_cf_cats\";s:6:\"weekly\";s:10:\"sm_cf_auth\";s:6:\"weekly\";s:15:\"sm_cf_arch_curr\";s:5:\"daily\";s:14:\"sm_cf_arch_old\";s:6:\"yearly\";s:10:\"sm_cf_tags\";s:6:\"weekly\";s:10:\"sm_pr_home\";d:1;s:11:\"sm_pr_posts\";d:0.6;s:15:\"sm_pr_posts_min\";d:0.2;s:11:\"sm_pr_pages\";d:0.6;s:10:\"sm_pr_cats\";d:0.3;s:10:\"sm_pr_arch\";d:0.3;s:10:\"sm_pr_auth\";d:0.3;s:10:\"sm_pr_tags\";d:0.3;s:12:\"sm_i_donated\";b:0;s:17:\"sm_i_hide_donated\";b:0;s:17:\"sm_i_install_date\";i:1502366607;s:16:\"sm_i_hide_survey\";b:0;s:14:\"sm_i_hide_note\";b:0;s:15:\"sm_i_hide_works\";b:0;s:16:\"sm_i_hide_donors\";b:0;s:9:\"sm_i_hash\";s:20:\"9de64aaa23192f13b375\";s:13:\"sm_i_lastping\";i:1504160688;s:16:\"sm_i_supportfeed\";b:1;s:22:\"sm_i_supportfeed_cache\";i:1503899007;}' WHERE `option_name` = 'sm_options'
 DELETE FROM `wp_options` WHERE `option_name` = '_transient_sm_ping_post_id'
 DELETE FROM `wp_options` WHERE `option_name` = '_transient_timeout_sm_ping_post_id'
 DELETE FROM `wp_options` WHERE `option_name` = '_transient_doing_cron'
 DELETE FROM `wp_options` WHERE `option_name` = '_site_transient_theme_roots'
 DELETE FROM `wp_options` WHERE `option_name` = '_site_transient_timeout_theme_roots'
 INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_site_transient_timeout_theme_roots', '1504162605', 'no') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)
 INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_site_transient_theme_roots', 'a:2:{s:5:\"budio\";s:7:\"/themes\";s:15:\"twentyseventeen\";s:7:\"/themes\";}', 'no') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)

 

Testując sposób miałem włączoną wtyczkę AuditLog, która zaśmieca nieco binlogi. Komendy, które są pokłosiem jej działania zaznaczyłem. Z replikacji należy również wykluczyć komendy, które są wynikiem działania CMS-owego cron’a.

Finalny plik wykonujemy na serwerach docelowych, aktualizujemy na nich kod źródłowy systemu i po problemie.