Friday, September 29, 2006

New PBXT Beta release includes a pluggable storage engine for MySQL 5.1

I have just released the first Beta version of PrimeBase XT. Besides MySQL 4.1.21 support it is also available as a pluggable storage engine for MySQL 5.1. As far as I know, PBXT is the first full featured engine to be released in this form.

The engine can be downloaded (at http://www.primebase.com/xt) and built separately from MySQL. Currently, a reference to a MySQL 5.1 source tree is required to build the plug-in. However, in the future things will be even easier. Lenz Grimmer has told me that the plan is to include the required headers in the mysql-devel package. Then it will only be necessary to install the mysql-devel package in order to build the engine.

Still further in the future, once 5.1 is released, I will be able to make the PBXT engine available as a binary download for a number of platforms.

Once you have built the PBXT engine, you can install it by copying the binary, libpbxt.so, to the MySQL plug-in directory. Then enter the following command:

mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';

After this, you can create tables that use the PBXT engine by setting ENGINE=PBXT in the table declaration as usual. It's that easy!

I think this makes PrimeBase XT a great demo of the ease and power of the new pluggable storage engine API for MySQL 5.1.

9 comments:

Anonymous said...

Paul,

this is GREAT!

I will grab one right away and get a go at both plugging in an engine, and testdrive that clever log juggling storage engine.

All the best to you and primebase!

Roland Bouman

Ronald Bradford said...

Excellent! Woot! Well Done!

I know it's been a bit of work to move to 5.1, but the result can only be a great plus in exposure and ease of uptake of PBXT with the upcoming MySQL 5.1 GA release.

I'll be checking out this pluggable option as soon as I can find the extra brain cycles.

You inspire me Paul with your commitment to Open Source and MySQL.

Ronald Bradford

Anonymous said...

Hi!

I am working on the last of the incompatibility changes in the loadable API this weekend. If all goes well these will make it into 5.1.12, which means from that point on we should have much better compatibility.

Cheers,
-Brian

Anonymous said...

Hi people,

it's probably me, but I can't build pbxt. ./cofigure seems to complete without errors or warnings, but make fails with:

ha_pbxt.cc:2949: error: too many initializers for 'st_mysql_storage_engine'
ha_pbxt.cc:2965: error: invalid conversion from 'int (*)()' to 'int (*)(void*)'
ha_pbxt.cc:2965: error: invalid conversion from 'int (*)()' to 'int (*)(void*)'

My configure line is like this:

sudo ./configure --with-mysql=/opt/mysql/mysql-5.1-bk/mysql-5.1 --libdir=/opt/mysql/bleeding/lib/mysql --prefix=/opt/mysql/bleeding

(it fails with the same errors even if I use the default path for the plugin dir as stated in the README)

Any ideas?

Roland Bouman

Paul McCullagh said...

Firstly, thanks Ronald, Roland and Brain for the encouraging comments.

With regard to the error:

ha_pbxt.cc:2949: error: too many initializers for 'st_mysql_storage_engine'

I suspect that the definition of st_mysql_storage_engine has changed since I last updated my 5.1 source tree.

This may well be due to Brain's fine work in finalizing the loadable API.

So, accepting the fact that we are on the bleeding edge here (as your prefix path suggests), I will post an update shortly.

Ronald Bradford said...

Paul.

I've referenced your work in this week's Log Buffer #13: a Carnival of the Vanities for DBAs.

Regards

Ronald

Anonymous said...

Hi Paul,

great work! I just tried to compile it.

I am getting following compile error. Any ideas?

g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/home/hakan/work/mysql/mysql-5.1/sql -I/home/hakan/work/mysql/mysql-5.1/include -I/home/hakan/work/mysql/mysql-5.1/regex -I/home/hakan/work/mysql/mysql-5.1 -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT -D_P1003_1B_VISIBLE -DMYSQL_DYNAMIC_PLUGIN -DMYSQL_SERVER -O3 -fno-implicit-templates -fno-exceptions -fno-rtti -MT libpbxt_la-ha_pbxt.lo -MD -MP -MF .deps/libpbxt_la-ha_pbxt.Tpo -c ha_pbxt.cc -fPIC -DPIC -o .libs/libpbxt_la-ha_pbxt.o
ha_pbxt.cc:2959: error: invalid conversion from 'int (*)(void*)' to 'int'
ha_pbxt.cc:2959: error: invalid conversion from 'int' to 'int (*)(void*)'
ha_pbxt.cc:2959: warning: converting to non-pointer type 'unsigned int' from NULL
make[2]: *** [libpbxt_la-ha_pbxt.lo] Error 1

Bye, Hakan

Paul McCullagh said...

Hi Hakan,

The compilation error is due to a change to struct st_mysql_plugin since I posted 0.9.71.

I will update the sources soon.

I have heard that the official 5.1.12 snapshot is almost ready, so hopefully my next update will then compile without change against 5.1.12.

Paul McCullagh said...

I have just posted pbxt-0.9.72-beta. If the BK sources haven't changed again, then all should compile now.

Sure looking forward to the 5.1.12 snapshot! :)