CentOS7 |
CentOS7で単純にyum update mariadb-server -yを実行してMariaDBを10.4にアップグレードしました。しばらくは特に問題なく動作していたのに、PHPで突然SQLSTATE[HY000][2002] No buffer space available(SQL: select *fromといったエラーが出るようになりました。そこで、/var/log/messagesを確認すると次のようなログが。
Dec 27 11:05:08 CentOS7 mysqld: 2017-12-27 11:05:08 0 [ERROR] Missing s
ystem table mysql.roles_mapping; please run mysql_upgrade to create it
Dec 27 11:05:08 CentOS7 mysqld: 2017-12-27 11:05:08 0 [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','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT'), found type
ログの指示に従って、mysql_upgradeを実行してみます。
mysql_upgrade -u root -p
Enter password:
Phase 1/7: Checking and upgrading mysql database
Processing databases
mysql
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.servers OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Upgrading from a version before MariaDB-10.1
Phase 2/7: Installing used storage engines
Checking for tables with unknown storage engine
Phase 3/7: Fixing views
Phase 4/7: Running 'mysql_fix_privilege_tables'
Phase 5/7: Fixing table and database names
Phase 6/7: Checking and upgrading tables
Processing databases
information_schema
performance_schema
user1
user1.mytable OK
test
Phase 7/7: Running 'FLUSH PRIVILEGES'
OK
どうやらこれで問題が解決したようです。
MySQL Serverのリファレンスマニュアルを見ると、アップグレード時にはmysql_upgradeの実行が必要なようです。
4.4.7 mysql_upgrade — MySQL テーブルのチェックとアップグレード mysql_upgrade は、MySQL をアップグレードするたびに実行するようにしてください。