[MDEV-9017] Disabling InnoDB on a slave results in slave warnings re: mysql.gtid_slave_pos Created: 2015-10-27 Updated: 2023-07-12 Resolved: 2023-07-12 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Replication |
| Affects Version/s: | 10.0.21 |
| Fix Version/s: | N/A |
| Type: | Bug | Priority: | Minor |
| Reporter: | Chris Calender (Inactive) | Assignee: | Kristian Nielsen |
| Resolution: | Won't Fix | Votes: | 0 |
| Labels: | None | ||
| Environment: |
All |
||
| Description |
|
If you disable InnoDB (I used skip-innodb and default-storage-engine=MyISAM) in MariaDB (tested on 10.0.21) on a slave, then you will end up with the following warnings in your error log and SHOW SLAVE STATUS: Unable to load replication GTID slave state from mysql.gtid_slave_pos: Unknown storage engine 'InnoDB' Even if you delete the existing .frm file, and restart, you will still have the issue. The only work-around is to create the table as MyISAM. However, you must delete the .frm first, and ensure you're in a clean state. Then re-create the table as follows:
Then you must stop/start your slave to clear the error from the output. If you're not using InnoDB nor GTID, then this should not be a requirement, and should not be in your SHOW SLAVE STATUS. |
| Comments |
| Comment by Elena Stepanova [ 2015-11-25 ] |
|
ccalender, sorry for the delay. The GTID position is always tracked and the table is always updated, even if currently the slave does not use it for replication; so, naturally, the table should always be accessible. If you mean to question the design according to which the GTID position always being tracked, I can redirect the issue to Kristian for further discussion. |
| Comment by Chris Calender (Inactive) [ 2015-11-25 ] |
|
The first problem is that the table, mysql.gtid_slave_pos, by default, is InnoDB (which is understandable). However, if you run without InnoDB enabled (--skip-innodb), you will continuously (so monitoring and actually troubleshooting real problems is a nightmare)) receive errors in your SHOW SLAVE STATUS output: Unable to load replication GTID slave state from mysql.gtid_slave_pos: Unknown storage engine 'InnoDB' The only fix is to change this to a MyISAM table. I don't see a fix for this in the actual mysql server code, but perhaps if you run wish --skip-innodb, then mysql_upgrade could check that, and convert any system InnoDB tables (as this is not the only possible one) to MyISAM tables. |
| Comment by Chris Calender (Inactive) [ 2015-11-25 ] |
|
Or just not allow/silently ignore the error, "Unable to load replication GTID slave state from mysql.gtid_slave_pos: Unknown storage engine 'InnoDB'", if one is not using GTID replication. |
| Comment by Elena Stepanova [ 2015-11-25 ] |
If you upgrade the schema where mysql.gtid_slave_pos does not yet exist, mysql_upgrade does exactly that: it checks that InnoDB is not available, and creates the table as MyISAM.
I'll redirect this suggestion to knielsen. |
| Comment by Kristian Nielsen [ 2023-07-12 ] |
|
I think I'll close this old issue. It might be a valid feature request to disable updates to mysql.gtid_slave_pos (for performance), feel free to re-open as such, though a lot of things seem to expect GTID nowadays. |