Amarok/Development/MySQL Embedded
Why MySQL Embedded?
MySQL-embedded allows us to leverage the performance increase of a MySQL configuration, whilst alleviating non trivial configuration that comes with a standalone server.
Most noticeably, you will see much improved performance of collection scanning and searching, especially with very large music collections.
Eventually we also hope to be able to provide support for standalone MySQL servers.
Distribution specific instructions
Ubuntu 12.10 (Quantal)
- Install package libmysqld-pic
Archlinux
- Install mysql and mysql-client from [extra]
- Amarok trunk should compile fine with MySQL Embedded support on i686 systems
- Need confirmation for x86_64 systems. If you have problems, mysqle from AUR should work
openSUSE 11.0 / 11.1
- Install libmysqlclient-devel
- Amarok trunk should compile fine with MySQL Embedded support
- Note that you may have to remove CMakeCache.txt from the build directory after installing libmysqlclient-devel for it to be recognized.
Fedora 10 (Rawhide)
- Install mysql-embedded and mysql-embedded-devel (both located in the Fedora Rawhide repository)
- Amarok trunk should compile fine with MySQL Embedded support
Compiling from source
Unfortunately mysql-embedded packages present in most of the existing distributions are not fit to be used with Amarok for the following reasons:
- they are built without -fPIC (MySQL bug 39288)
- mysql library calls exit() wherever it feels like it (MySQL bug 39289)
Also, there were some failures reported:
- InnoDB does not start for lfranchi. But his configuration is too complex for me to contemplate. Perhaps this is a bug for Lenz/bugs.mysql.com
Download
Download MySQL from here:
We've tested it against 5.1.30. The direct url is:
If you need 5.1.28-rc for some reason, you can get it from here: (limited offer!)
Compilation instructions
tar xzvf mysql-5.1.28-rc.tar.gz cd mysql-5.1.28 cp -R /path/to/amaroksource/supplementary_scripts/mysqle/* . export MAKEOPTS=-j2 # or more if you have many CPU cores ./build-mysqle.sh --prefix=${HOME}/usr then build Amarok like normal
If you install to a different prefix, you will have to set the CMAKE_INCLUDE_PATH and CMAKE_LIBRARY_PATH environment variables. For example, if you install to ~/amarok-build/mysql, you should do
export CMAKE_LIBRARY_PATH=$HOME/amarok-build/mysql/lib:$CMAKE_LIBRARY_PATH export CMAKE_INCLUDE_PATH=$HOME/amarok-build/mysql/include:$CMAKE_INCLUDE_PATH
before running cmake on the Amarok sources. (Recommendation: add -DCMAKE_INCLUDE_PATH and -DCMAKE_LIBRARY_PATH as options to your cmake call for amarok compilation, do not forget to remove CMakeCache.txt before)
Pitfalls and common problems
- Insufficient permissions
- MySQL 5.0 vs 5.1
- Qt compiled with -sql-mysql driver inside Qt itself makes amarok use libmysqlclient instead of libmysqld, which is a problem because it doesn't use mysql embedded then. Make sure your Qt does not have mysql driver "built-in" or at most compile it with mysql driver as a plugin.
- build-mysqle.sh is not distributed in official tarballs, so if you want to use it, get it from SVN
Tips
Some tools like MySQL Administrator require a daemon to connect to. You can start such a daemon like this from your ~/.kde4/share/apps/amarok directory (--defaults-file MUST be the first option!):
/usr/sbin/mysqld --defaults-file=`pwd`/my.cnf --default-storage-engine=MyISAM --datadir=`pwd`/mysqle --skip-networking --socket=`pwd`/sock --skip-grant-tables
The skip-grant-tables means you can use any password or username to connect to it. Neither 'localhost' nor '127.0.0.1' will work, the MySQL client must use a unix socket (still in directory ~/.kde4/share/apps/amarok):
mysql --socket=`pwd`/sock
To make opening the database on Windows easier you can create a bat file with these contents <notepad -> paste -> save (select save as 'all files') -> amarokmysqld.bat>:
mysqld --defaults-file=%appdata%\.kde\share\apps\amarok\my.cnf --default-storage-engine=MyISAM --datadir=%appdata%\.kde\share\apps\amarok\mysqle --skip-networking --socket=%appdata%\.kde\share\apps\amarok\sock --skip-grant-tables
Open the bat file now and your mysql-server should run. start mysql.exe now from a commandline client:
mysql.exe --socket=%appdata%\.kde\share\apps\amarok\sock
and you can access the database.