MySQL alternatives from MySQL

3 January 2010

Monty Widenius, after the selling of MySQL AB to SUN started a company “Monty Program Ab”, and released a new MySQL engine: MariaDB (following his tradition of naming his programing childs after his biological ones)

One of the pourposes of MariaDB is t0 counteract the side effects of InnoDB being under the control of ORACLE, and provide a “crash-safe alternative to MyISAM” and for Maria2.0 “A fully transactional storage engine with at least all of InnoDB’s major features.”

Also there is an GPL2 alternative to InnoDB: percona-xtradb (from an independent company)

“Percona XtraDB is an enhanced version of the InnoDB storage engine, designed to better scale on modern hardware, and including a variety of other features useful in high performance environments. It is fully backwards compatible, and so can be used as a drop-in replacement for standard InnoDB.”

Oracle buying Sun, therefore adquiring MySQL!!!!!

3 January 2010

Oracle is buying SUN. But because SUN holds MySQL, there is a problem of competency and the European Commission is looking closely the acquisition to guaranty that the market diversity for databases is similar before and after the merging.

Monty (the creator of MySQL) thinks that Oracle will kill MySQL in the long run and also thinks that  this was its first motivation when buying SUN: get rid off an annoying competitor. Therefore he started a big campaign to show to the EC that Oracle’s movement is a thread to MySQL development:

Monty Widenius, in early Dicember 2009 asked for people using MySQL to write to EC in order to prevent oracle to acquire MySQL unconditionally. He ask for several points not addressed in the oracle ‘promises’:

Oracle has NOT promised (as far as I know and certainly not in a legally binding manner):

– To keep (all of) MySQL under an open source license.
– Not to add closed source parts, modules or required tools.
– To keep the code for MySQL enterprise edition and MySQL community edition the same.
– To not raise MySQL license or MySQL support prices.
– To release new MySQL versions in a regular and timely manner. (*)
– To continue with dual licensing and always provide affordable commercial licenses to MySQL to those who needs them (to storage vendors and application vendors) or provide MySQL under a more permissive license
– To develop MySQL as an Open Source project
– To actively work with the community
– Apply submitted patches in a timely manner
– To not discriminate patches that make MySQL compete more with Oracles other products
– To ensure that MySQL is improved also in manners that make it compete even more with Oracles’ main offering.

From looking at how Oracle handled the InnoDB acquisition, I don’t have high hopes that Oracle will do the above right if not required to do so:

For InnoDB:
– Bug fixes were done (but this was done under a contractual obligation)
– New features, like compression that was announced before acquisition, took 3 years to implement
– No time tables or insight into development
– The community where not allowed to participate in development
– Patches from users (like Google) that would have increased performance was not implemented/released until after Oracle announced it was acquiring Sun.
– Oracle started working on InnoDB+, a better ‘closed source’ version of InnoDB
– In the end Sun had to fork InnoDB, just to be able to improve performance.

Monty says that when he sold MySQL to Sun there was a trap clause that he didn’t fully understood  at that time:

About MySQL Workbench 7; I always wanted MySQL AB to only produce Open Source code. I had in my shareholder agreement a clause that ensured that the MySQL server should always be fully open source (no commercial modules) until MySQL AB would be sold. (Note that it’s impossible to get an agreement from investors that would protect the code after the company is sold). Unfortunately, the clause was written in such a way that it did not protect other programs (I did not understand this at the time I signed the contract). For a long time I manage to fight off any attempt from the management for closed source programs until they finally went over my head and created some of the new tools as closed source programs. I, and many other developers in MySQL AB, always thought that was a bad idea and we still think that way!

And a better Monty’s explanation of the process of MySQL being sold to SUN and how the agreement of MySQL being open source get jeopardized when it was sold to SUN could be found here. :

Q: Didn’t you sell MySQL to Sun? Do you want to have the cake and eat it too?

First a little background:

I started to work on a code that would later become MySQL in 1982. MySQL was released in 1995 under a dual licensing scheme that allowed David Axmark and me to very quickly work full time on developing MySQL.

I lost the rights to the MySQL copyright in 2001 when MySQL AB was created and we allowed investors to come in. We needed to bring in investors to be able to create a full-scale working company to satisfy big customers and to be able to hire more developers and take MySQL to the next stage. To ensure that MySQL would continue to be free, David and I stated in the shareholder agreement that MySQL AB would have to keep MySQL under an open source license. The problem with a shareholder agreement is that it is terminated when the company is sold. This is just how things works.

David and I however thought that this would not be a problem, as we would help ensure that MySQL would be bought by a good owner.

I continued to lead the MySQL project and have been one of the leaders and top contributors for the project since then.

When the sales process to Sun started, I was at the time not anymore in the MySQL Board (just a MySQL shareholder). I was just informed about the deal, after it was agreed to. I did get money for my shares, that is true, but it did not change in any way my dedication or involvement in the MySQL project.

Also another problem is that although MySQL is GPL the manuals aren not!!!. And not the name either nor the ‘defensive’ IPR filled.

MYSQL devel files in ubuntu and installing perl DBD::mysql

29 December 2009

I am using the fantastic local::lib with ubuntu 9.04. That is great, but  not following the easy way (aka ‘aptitude’) and having full control managing all the perl modules with CPAN, has its downside: the installation of  the hard-to-install-modules like DBI and GD

A- where is myql_config script? DBD::mysql use it for finding where you have all the mysql things
B- where is now the mysql-devel package?

A) Not found until solved B.

mysql_config is not installed until you install the mysql-devel !!!

linux:~/.cpan/build/DBD-mysql-4.013-tjvDzy$ mysql_config
Usage: /usr/bin/mysql_config [OPTIONS]
–cflags         [-I/usr/include/mysql  -DBIG_JOINS=1 -fPIC -fno-strict-aliasing]
–include        [-I/usr/include/mysql]
–libs           [-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient]
–libs_r         [-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient_r]
–socket         [/var/run/mysqld/mysqld.sock]
–port           [0]
–version        [5.0.75]
–libmysqld-libs [-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqld -lwrap -lrt]

B) The msyql devel is no longer in ubuntu (at least with this name)

linux:~/.cpan/build/DBD-mysql-4.013-tjvDzy$ sudo aptitude search mysql | grep devel
p   liblua5.1-sql-mysql-dev         – luasql development files for the lua langu
p   libmysql++-dev                  – MySQL C++ library bindings (development)
p   libmysqlclient15-dev            – MySQL database development files
p   libmysqlclient16-dev            – MySQL database development files

Seems that now is called  libmysqlclient15-dev

Searching in the web:
a lot of people have had the same problem and they say that ‘ libmysql++-dev’ works ok

What I was not able to find is what is the difference between libmysqlclient15-dev and libmysqlclient16-dev. I have mysql-5.0 installed but in the repostiroty there is also the 5.1. Are the libmysqlcientxx-devel specific for each msyql version?

# installing the libmysql++-dev
> sudo aptitude install libmysql++-dev
The following NEW packages will be installed:
libmysql++-dev libmysql++3{a} libmysqlclient15-dev{a}

==intalled devel files ==

== Try to install DBD::mysql with CPAN==

cpan[12]> install DBD::mysql

‘/home/pablo/localperl/bin/perl Makefile.PL’ returned status 512, won’t make
Running make test
Make had some problems, won’t test
Running make install
Make had some problems, won’t install

* try it manually

pablo@pmg-linux:~/.cpan/build/DBD-mysql-4.013-2mMMny$ perl Makefile.PL


For ‘make test’ to run properly, you must ensure that the
database user ‘pablo’ can connect to your MySQL server
and has the proper privileges that these tests require such
as ‘drop table’, ‘create table’, ‘drop procedure’, ‘create procedure’
as well as others.

mysql> grant all privileges on test.* to ‘pablo’@’localhost’ identified by ‘s3kr1t’;

You can also optionally set the user to run ‘make test’ with:

perl –testuser=username

I will use the following settings for compiling and testing:

cflags        (mysql_config) = -I/usr/include/mysql  -DBIG_JOINS=1 -fPIC -fno-strict-aliasing
embedded      (mysql_config) =
libs          (mysql_config) = -Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient
mysql_config  (guessed     ) = mysql_config
nocatchstderr (default     ) = 0
nofoundrows   (default     ) = 0
ssl           (guessed     ) = 0
testdb        (default     ) = test
testhost      (default     ) =
testpassword  (default     ) =
testsocket    (default     ) =
testuser      (guessed     ) = pablo

To change these settings, see ‘perl Makefile.PL –help’ and

# Before installing, it would be good to have a test database and give rights to the my user:
$ mysql -u root -p
mysql> grant all privileges on test.* to ‘pablo’@’localhost’;
mysql> create database test;
$ cd ~/.cpan/build/DBD-mysql-4.013-2mMMny
perl Makefile.PL

$ make

$ make test
All tests successful.
Files=36, Tests=745, 15 wallclock secs ( 0.24 usr  0.97 sys +  1.47 cusr  7.16 csys =  9.84 CPU)
Result: PASS

$ make install


After installing it manually I did the installation again from CPAN with the CPAN shell into my local-lib and it worked ok! Well I was expecting it to warn me that was already installed but it was installed again instead.