Incorrect definition of table mysql.event

Итак, после перехода mysql на mariadb все запустилось и сайт заработал без проблем, однако в логах mariadb появилась следующая ругань

130302 15:14:39 [ERROR] mysqld: Table ‘./mysql/user’ is marked as crashed and should be repaired
130302 15:14:39 [Warning] Checking table: ‘./mysql/user’
130302 15:14:39 [ERROR] mysql.user: 1 client is using or hasn’t closed the table properly
130302 15:14:40 [ERROR] Incorrect definition of table mysql.event: expected column ‘sql_mode’ at position 14 to have type set(‘REAL_AS_FLOAT’,’PIPES_AS_CONCAT’,’ANSI_QUOTES’,’IGNORE_SPACE’,’IGNORE_BAD_TABLE_OPTIONS’, ‘ONLY_FULL_GROUP_BY’,’NO_UNSIGNED_SUBTRACTION’,’NO_DIR_IN_CREATE’,’POSTGRESQL’,’ORACLE’,’MSSQL’, ‘DB2′,’MAXDB’,’NO_KEY_OPTIONS’,’NO_TABLE_OPTIONS’,’NO_FIELD_OPTIONS’,’MYSQL323′,’MYSQL40′,’ANSI’, ‘NO_AUTO_VALUE_ON_ZERO’,’NO_BACKSLASH_ESCAPES’,’STRICT_TRANS_TABLES’,’STRICT_ALL_TABLES’, ‘NO_ZERO_IN_DATE’,’NO_ZERO_DATE’,’INVALID_DATES’,’ERROR_FOR_DIVISION_BY_ZERO’,’TRADITIONAL’, ‘NO_AUTO_CREATE_USER’,’HIGH_NOT_PRECEDENCE’,’NO_ENGINE_SUBSTITUTION’,’PAD_CHAR_TO_FULL_LENGTH’), found type set(‘REAL_AS_FLOAT’,’PIPES_AS_CONCAT’,’ANSI_QUOTES’,’IGNORE_SPACE’,’NOT_USED’,’ONLY_FULL_GROUP_BY’, ‘NO_UNSIGNED_SUBTRACTION’,’NO_DIR_IN_CREATE’,’POSTGRESQL’,’ORACLE’,’MSSQL’,’DB2′,’MAXDB’, ‘NO_KEY_OPTIONS’,’NO_TABLE_OPTIONS’,’NO_FIELD_OPTIONS’,’MYSQL323′,’MYSQL40′,’ANSI’, ‘NO_AUTO_VALUE_ON_ZERO’,’NO_BACKSLASH_ESCAPES’,’STRICT_TRANS_TABLES’,’STRICT_A
130302 15:14:40 [ERROR] Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.
130302 15:14:40 [Note] /usr/local/libexec/mysqld: ready for connections.
Version: ‘5.5.29-MariaDB’ socket: ‘/tmp/mysql.sock’ port: 3306 Source distribution

и кроме того не подключаются плагины

MySQL [(none)]> INSTALL PLUGIN sphinx SONAME 'ha_sphinx.so';

ERROR 1126 (HY000): Can’t open shared library ‘/usr/local/lib/mysql/plugin/ha_sphinx.so’ (errno: 2 /usr/local/lib/mysql/plugin/ha_sphinx.so: Undefined symbol «_ZN7handler12keyread_timeEjjy»)

А всё кроется в несколько изменённом значении поля sql_mode таблицы mysql.event. То, что в mysql’е именуется NOT_USED, в mariadb будет IGNORE_BAD_TABLE_OPTIONS. Следовательно устраняем ошибку запросом:

ALTER TABLE `event` CHANGE `sql_mode` `sql_mode` SET( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'IGNORE_BAD_TABLE_OPTIONS', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH' ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';

После этого выполняем stop/start  mariadb и смотрим в логи, там всё чисто. Подключаем нужный плагин. Ошибок нет

Александр Черных
системный администратор

Статьи по теме

0