|
| 1 | +include/rpl_init.inc [topology=none] |
| 2 | +include/rpl_default_connections.inc |
| 3 | +CALL mtr.add_suppression("Statement violates GTID consistency:"); |
| 4 | +CREATE TABLE innodb (a INT) ENGINE = InnoDB; |
| 5 | +CREATE TABLE myisam (a INT) ENGINE = MyISAM; |
| 6 | +==== AUTOMATIC, GTID-consistent: all modes ok ==== |
| 7 | +[connection master] |
| 8 | +BEGIN; |
| 9 | +INSERT INTO innodb VALUES (1); |
| 10 | +[connection master1] |
| 11 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 12 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; |
| 13 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 14 | +SET GLOBAL GTID_MODE = ON_PERMISSIVE; |
| 15 | +SET GLOBAL GTID_MODE = ON; |
| 16 | +[connection master] |
| 17 | +COMMIT; |
| 18 | +[connection master] |
| 19 | +BEGIN; |
| 20 | +INSERT INTO innodb VALUES (1); |
| 21 | +[connection master1] |
| 22 | +SET GLOBAL GTID_MODE = ON_PERMISSIVE; |
| 23 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF; |
| 24 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 25 | +SET GLOBAL GTID_MODE = OFF; |
| 26 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 27 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF; |
| 28 | +[connection master] |
| 29 | +COMMIT; |
| 30 | +==== AUTOMATIC, GTID-violating: only OFF and OFF_PERMISSIVE ok ==== |
| 31 | +[connection master] |
| 32 | +BEGIN; |
| 33 | +INSERT INTO innodb VALUES (1); |
| 34 | +INSERT INTO myisam VALUES (1); |
| 35 | +[connection master1] |
| 36 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 37 | +Warnings: |
| 38 | +Warning 3117 There are ongoing transactions that violate GTID consistency. |
| 39 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; |
| 40 | +ERROR HY000: Cannot set ENFORCE_GTID_CONSISTENCY = ON because there are ongoing transactions that violate GTID consistency. |
| 41 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 42 | +SET GLOBAL GTID_MODE = ON_PERMISSIVE; |
| 43 | +ERROR HY000: SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE is not allowed because there are ongoing transactions that use GTID_NEXT = 'AUTOMATIC', which violate GTID consistency. Adjust your workload to be GTID-consistent before setting @@GLOBAL.GTID_MODE = ON_PERMISSIVE. See the Manual for @@GLOBAL.ENFORCE_GTID_CONSISTENCY for details. |
| 44 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF; |
| 45 | +[connection master] |
| 46 | +COMMIT; |
| 47 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 48 | +[connection master] |
| 49 | +BEGIN; |
| 50 | +INSERT INTO innodb VALUES (1); |
| 51 | +INSERT INTO myisam VALUES (1); |
| 52 | +[connection master1] |
| 53 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 54 | +Warnings: |
| 55 | +Warning 3117 There are ongoing transactions that violate GTID consistency. |
| 56 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; |
| 57 | +ERROR HY000: Cannot set ENFORCE_GTID_CONSISTENCY = ON because there are ongoing transactions that violate GTID consistency. |
| 58 | +SET GLOBAL GTID_MODE = ON_PERMISSIVE; |
| 59 | +ERROR HY000: SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE is not allowed because there are ongoing transactions that use GTID_NEXT = 'AUTOMATIC', which violate GTID consistency. Adjust your workload to be GTID-consistent before setting @@GLOBAL.GTID_MODE = ON_PERMISSIVE. See the Manual for @@GLOBAL.ENFORCE_GTID_CONSISTENCY for details. |
| 60 | +SET GLOBAL GTID_MODE = OFF; |
| 61 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF; |
| 62 | +[connection master] |
| 63 | +COMMIT; |
| 64 | +==== ANONYMOUS, GTID-consistent: all except ON are ok ==== |
| 65 | +[connection master] |
| 66 | +SET GTID_NEXT = 'ANONYMOUS'; |
| 67 | +BEGIN; |
| 68 | +INSERT INTO innodb VALUES (1); |
| 69 | +[connection master1] |
| 70 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 71 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; |
| 72 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 73 | +SET GLOBAL GTID_MODE = ON_PERMISSIVE; |
| 74 | +SET GLOBAL GTID_MODE = ON; |
| 75 | +ERROR HY000: SET @@GLOBAL.GTID_MODE = ON is not allowed because there are ongoing, anonymous transactions. Before setting @@GLOBAL.GTID_MODE = ON, wait until SHOW STATUS LIKE 'ANONYMOUS_TRANSACTION_COUNT' shows zero on all servers. Then wait for all existing, anonymous transactions to replicate to all slaves, and then execute SET @@GLOBAL.GTID_MODE = ON on all servers. See the Manual for details. |
| 76 | +[connection master] |
| 77 | +COMMIT; |
| 78 | +[connection master] |
| 79 | +SET GTID_NEXT = 'ANONYMOUS'; |
| 80 | +BEGIN; |
| 81 | +INSERT INTO innodb VALUES (1); |
| 82 | +[connection master1] |
| 83 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 84 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; |
| 85 | +SET GLOBAL GTID_MODE = ON; |
| 86 | +ERROR HY000: SET @@GLOBAL.GTID_MODE = ON is not allowed because there are ongoing, anonymous transactions. Before setting @@GLOBAL.GTID_MODE = ON, wait until SHOW STATUS LIKE 'ANONYMOUS_TRANSACTION_COUNT' shows zero on all servers. Then wait for all existing, anonymous transactions to replicate to all slaves, and then execute SET @@GLOBAL.GTID_MODE = ON on all servers. See the Manual for details. |
| 87 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 88 | +SET GLOBAL GTID_MODE = OFF; |
| 89 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF; |
| 90 | +[connection master] |
| 91 | +COMMIT; |
| 92 | +==== ANONYMOUS, GTID-violating: all except ON are ok ==== |
| 93 | +[connection master] |
| 94 | +SET GTID_NEXT = 'ANONYMOUS'; |
| 95 | +BEGIN; |
| 96 | +INSERT INTO innodb VALUES (1); |
| 97 | +INSERT INTO myisam VALUES (1); |
| 98 | +[connection master1] |
| 99 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 100 | +Warnings: |
| 101 | +Warning 3117 There are ongoing transactions that violate GTID consistency. |
| 102 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; |
| 103 | +ERROR HY000: Cannot set ENFORCE_GTID_CONSISTENCY = ON because there are ongoing transactions that violate GTID consistency. |
| 104 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 105 | +SET GLOBAL GTID_MODE = ON_PERMISSIVE; |
| 106 | +SET GLOBAL GTID_MODE = ON; |
| 107 | +ERROR HY000: SET @@GLOBAL.GTID_MODE = ON is not allowed because there are ongoing, anonymous transactions. Before setting @@GLOBAL.GTID_MODE = ON, wait until SHOW STATUS LIKE 'ANONYMOUS_TRANSACTION_COUNT' shows zero on all servers. Then wait for all existing, anonymous transactions to replicate to all slaves, and then execute SET @@GLOBAL.GTID_MODE = ON on all servers. See the Manual for details. |
| 108 | +[connection master] |
| 109 | +COMMIT; |
| 110 | +[connection master] |
| 111 | +SET GTID_NEXT = 'ANONYMOUS'; |
| 112 | +BEGIN; |
| 113 | +INSERT INTO innodb VALUES (1); |
| 114 | +INSERT INTO myisam VALUES (1); |
| 115 | +Warnings: |
| 116 | +Warning 1785 Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables. |
| 117 | +[connection master1] |
| 118 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 119 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; |
| 120 | +ERROR HY000: Cannot set ENFORCE_GTID_CONSISTENCY = ON because there are ongoing transactions that violate GTID consistency. |
| 121 | +SET GLOBAL GTID_MODE = ON; |
| 122 | +ERROR HY000: SET @@GLOBAL.GTID_MODE = ON is not allowed because there are ongoing, anonymous transactions. Before setting @@GLOBAL.GTID_MODE = ON, wait until SHOW STATUS LIKE 'ANONYMOUS_TRANSACTION_COUNT' shows zero on all servers. Then wait for all existing, anonymous transactions to replicate to all slaves, and then execute SET @@GLOBAL.GTID_MODE = ON on all servers. See the Manual for details. |
| 123 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 124 | +SET GLOBAL GTID_MODE = OFF; |
| 125 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF; |
| 126 | +[connection master] |
| 127 | +COMMIT; |
| 128 | +==== GTID transaction: all except OFF are ok ==== |
| 129 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 130 | +[connection master] |
| 131 | +SET GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'; |
| 132 | +BEGIN; |
| 133 | +INSERT INTO innodb VALUES (1); |
| 134 | +[connection master1] |
| 135 | +SET GLOBAL GTID_MODE = OFF; |
| 136 | +ERROR HY000: SET @@GLOBAL.GTID_MODE = OFF is not allowed because there are ongoing transactions that have a GTID. Before you set @@GLOBAL.GTID_MODE = OFF, wait until SELECT @@GLOBAL.GTID_OWNED is empty on all servers. Then wait for all GTID-transactions to replicate to all servers, and then execute SET @@GLOBAL.GTID_MODE = OFF on all servers. See the Manual for details. |
| 137 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 138 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF; |
| 139 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; |
| 140 | +SET GLOBAL GTID_MODE = ON_PERMISSIVE; |
| 141 | +SET GLOBAL GTID_MODE = ON; |
| 142 | +[connection master] |
| 143 | +COMMIT; |
| 144 | +[connection master] |
| 145 | +SET GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2'; |
| 146 | +BEGIN; |
| 147 | +INSERT INTO innodb VALUES (1); |
| 148 | +[connection master1] |
| 149 | +SET GLOBAL GTID_MODE = ON_PERMISSIVE; |
| 150 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN; |
| 151 | +SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF; |
| 152 | +SET GLOBAL GTID_MODE = OFF_PERMISSIVE; |
| 153 | +SET GLOBAL GTID_MODE = OFF; |
| 154 | +ERROR HY000: SET @@GLOBAL.GTID_MODE = OFF is not allowed because there are ongoing transactions that have a GTID. Before you set @@GLOBAL.GTID_MODE = OFF, wait until SELECT @@GLOBAL.GTID_OWNED is empty on all servers. Then wait for all GTID-transactions to replicate to all servers, and then execute SET @@GLOBAL.GTID_MODE = OFF on all servers. See the Manual for details. |
| 155 | +[connection master] |
| 156 | +COMMIT; |
| 157 | +SET GLOBAL GTID_MODE = OFF; |
| 158 | +SET GTID_NEXT = AUTOMATIC; |
| 159 | +DROP TABLE innodb, myisam; |
| 160 | +include/rpl_end.inc |
0 commit comments