--- branches/akonadi/1.1/server/src/akonadi.cpp 2009/01/03 16:17:31 905029 +++ branches/akonadi/1.1/server/src/akonadi.cpp 2009/02/25 10:55:29 931467 @@ -225,23 +225,30 @@ const QString actualConfig = XdgBaseDirs::saveDir( "data", QLatin1String( "akonadi" ) ) + QLatin1String("/mysql.conf"); if ( globalConfig.isEmpty() ) akFatal() << "Did not find MySQL server default configuration (mysql-global.conf)"; - QFile globalFile( globalConfig ); - QFile actualFile( actualConfig ); - if ( globalFile.open( QFile::ReadOnly ) && actualFile.open( QFile::WriteOnly ) ) { - actualFile.write( globalFile.readAll() ); - if ( !localConfig.isEmpty() ) { - QFile localFile( localConfig ); - if ( localFile.open( QFile::ReadOnly ) ) { - actualFile.write( localFile.readAll() ); - localFile.close(); + bool confUpdate = false; + QFile actualFile ( actualConfig ); + // update conf only if either global (or local) is newer than actual + if ( (QFileInfo( globalConfig ).lastModified() > QFileInfo( actualFile ).lastModified()) || + (QFileInfo( localConfig ).lastModified() > QFileInfo( actualFile ).lastModified()) ) + { + QFile globalFile( globalConfig ); + QFile localFile ( localConfig ); + if ( globalFile.open( QFile::ReadOnly ) && actualFile.open( QFile::WriteOnly ) ) { + actualFile.write( globalFile.readAll() ); + if ( !localConfig.isEmpty() ) { + if ( localFile.open( QFile::ReadOnly ) ) { + actualFile.write( localFile.readAll() ); + localFile.close(); + } } + globalFile.close(); + actualFile.close(); + confUpdate = true; + } else { + akError() << "Unable to create MySQL server configuration file."; + akError() << "This means that either the default configuration file (mysql-global.conf) was not readable"; + akFatal() << "or the target file (mysql.conf) could not be written."; } - actualFile.close(); - globalFile.close(); - } else { - akError() << "Unable to create MySQL server configuration file."; - akError() << "This means that either the default configuration file (mysql-global.conf) was not readable"; - akFatal() << "or the target file (mysql.conf) could not be written."; } // MySQL doesn't like world writeable config files (which makes sense), but @@ -276,6 +283,12 @@ } } + // clear mysql ib_logfile's in case innodb_log_file_size option changed in last confUpdate + if ( confUpdate ) { + QFile(dataDir + QDir::separator() + QString::fromLatin1( "ib_logfile0" )).remove(); + QFile(dataDir + QDir::separator() + QString::fromLatin1( "ib_logfile1" )).remove(); + } + // synthesize the mysqld command QStringList arguments; arguments << QString::fromLatin1( "--defaults-file=%1/mysql.conf" ).arg( akDir );