(see discussion at http://forums.contribs.org/viewtopic.php?t=32233&start=30 )

STEP 1 - MAKE A BACKUP OF YOUR DATABASES

mysqldump -aec >backup_mysql_databases.sql

STEP 2 - GET THE NEW RPM'S

THERE ARE TWO WAYS OF DOING THIS:

/etc/rc.d/init.d/mysqld stop
yum --enablerepo=centosplus update mysql
/etc/rc.d/init.d/mysqld start
wget \
http://mirror.centos.org/centos/4/centosplus/i386/RPMS/mysqlclient14-4.1.14-4.2.c4.1.i386.rpm \
http://mirror.centos.org/centos/4/centosplus/i386/RPMS/mysql-server-5.0.22-1.centos.1.i386.rpm \
http://mirror.centos.org/centos/4/centosplus/i386/RPMS/mysql-5.0.22-1.centos.1.i386.rpm

followed by:

rpm -U mysql-5.0.22-1.centos.1.i386.rpm \
mysql-server-5.0.22-1.centos.1.i386.rpm \
mysqlclient14-4.1.14-4.2.c4.1.i386.rpm

and then:

/etc/rc.d/init.d/mysqld stop
rm -f /etc/my.cnf.rpmnew
/etc/rc.d/init.d/mysqld start

STEP 3 - FIX THE PRIVILEGES ON HORDE

mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE ON horde.* TO 'horde'@'localhost';FLUSH PRIVILEGES"

STEP 4 - ADD MISSING MySQL-TABLES TO MYSQL DATABASE: (for instance with PhpMyAdmin)

DROP TABLE IF EXISTS `proc`;

CREATE TABLE `proc` (
  `db` char(64) character set utf8 collate utf8_bin NOT NULL default "",
  `name` char(64) NOT NULL default "",
  `type` enum('FUNCTION','PROCEDURE') NOT NULL,
  `specific_name` char(64) NOT NULL default "",
  `language` enum('SQL') NOT NULL default 'SQL',
  `sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL default 'CONTAINS_SQL',
  `is_deterministic` enum('YES','NO') NOT NULL default 'NO',
  `security_type` enum('INVOKER','DEFINER') NOT NULL default 'DEFINER',
  `param_list` blob NOT NULL,
  `returns` char(64) NOT NULL default "",
  `body` longblob NOT NULL,
  `definer` char(77) character set utf8 collate utf8_bin NOT NULL default "",
  `created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `modified` timestamp NOT NULL default '0000-00-00 00:00:00',
  `sql_mode` 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_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') NOT NULL default "",
  `comment` char(64) character set utf8 collate utf8_bin NOT NULL default "",
  PRIMARY KEY  (`db`,`name`,`type`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Stored Procedures';
DROP TABLE IF EXISTS `procs_priv`;

CREATE TABLE `procs_priv` (
  `Host` char(60) collate utf8_bin NOT NULL default "",
  `Db` char(64) collate utf8_bin NOT NULL default "",
  `User` char(16) collate utf8_bin NOT NULL default "",
  `Routine_name` char(64) collate utf8_bin NOT NULL default "",
  `Routine_type` enum('FUNCTION','PROCEDURE') collate utf8_bin NOT NULL,
  `Grantor` char(77) collate utf8_bin NOT NULL default "",
  `Proc_priv` set('Execute','Alter Routine','Grant') character set utf8 NOT NULL default "",
  `Timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`Host`,`Db`,`User`,`Routine_name`,`Routine_type`),
  KEY `Grantor` (`Grantor`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Procedure privileges';

STEP 5 - RESTART MySQL:

You simply reboot the server

OR

without rebooting the server:

/etc/rc.d/init.d/mysqld stop;
/etc/rc.d/init.d/mysqld start;
/etc/rc.d/init.d/mysql.init restart;