Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
DBD::mysql::INSTALL(3)User Contributed Perl DocumentatioDBD::mysql::INSTALL(3)

       DBD::mysql::INSTALL - How to install and	configure DBD::mysql

	 perl Makefile.PL [options]
	 make test
	 make install

       This document describes the installation	and configuration of
       DBD::mysql, the Perl DBI	driver for the MySQL database. Before reading
       on, make	sure that you have the prerequisites available:	Perl, MySQL
       and DBI.	For details see	the separate section "PREREQUISITES".

       Depending on your version of Perl, it might be possible to use a	binary
       distribution of DBD::mysql. If possible,	this is	recommended. Otherwise
       you need	to install from	the sources.  If so, you will definitely need
       a C compiler. Installation from binaries	and sources are	both described
       in separate sections. "BINARY INSTALLATION". "SOURCE INSTALLATION".

       Finally,	if you encounter any problems, do not forget to	read the
       section on known	problems "KNOWN	PROBLEMS". If that doesn't help, you
       should check the	section	on "SUPPORT".

	   Preferably a	version	of Perl, that comes preconfigured with your
	   system. For example,	all Linux and FreeBSD distributions come with
	   Perl. For Windows, use ActivePerl
	   <> or Strawberry Perl

	   You need not	install	the actual MySQL database server, the client
	   files and the development files are sufficient. For example,	Fedora
	   Linux distribution comes with RPM files (using YUM) mysql and
	   mysql-server	(use "yum search" to find exact	package	names).	These
	   are sufficient, if the MySQL	server is located on a foreign
	   machine.  You may also create client	files by compiling from	the
	   MySQL source	distribution and using

	     configure --without-server

	   If you are using Windows and	need to	compile	from sources (which is
	   only	the case if you	are not	using ActivePerl or Strawberry Perl),
	   then	you must ensure	that the header	and library files are
	   installed. This may require choosing	a "Custom installation"	and
	   selecting the appropriate option when running the MySQL setup

       DBI DBD::mysql is a DBI driver, hence you need DBI. It is available
	   from	the same source	where you got the DBD::mysql distribution

       C compiler
	   A C compiler	is only	required if you	install	from source. In	most
	   cases there are binary distributions	of DBD::mysql available.
	   However, if you need	a C compiler, make sure, that it is the	same C
	   compiler that was used for compiling	Perl and MySQL!	Otherwise you
	   will	almost definitely encounter problems because of	differences in
	   the underlying C runtime libraries.

	   In the worst	case, this might mean to compile Perl and MySQL
	   yourself. But believe me, experience	shows that a lot of problems
	   are fixed this way.

       Gzip libraries
	   Late	versions of MySQL come with support for	compression. Thus it
	   may be required that	you have install an RPM	package	like libz-
	   devel, libgz-devel or something similar.

       Binary installation is possible in the most cases, depending on your

       Strawberry Perl

       Strawberry Perl comes bundled with DBD::mysql and the needed client

       ActiveState Perl

       ActivePerl offers a PPM archive of DBD::mysql. All you need to do is
       typing in a cmd.exe window:

	 ppm install DBD-mysql

       This will fetch the module via HTTP and install them. If	you need to
       use a WWW proxy server, the environment variable	HTTP_proxy must	be

	 set HTTP_proxy=
	 ppm install DBD-mysql

       Of course you need to replace the host name "" and
       the port	number 8080 with your local values.

       If the above procedure doesn't work, please upgrade to the latest
       version of ActivePerl. ActiveState has a	policy where it	only provides
       access free-of-charge for the PPM mirrors of the	last few stable	Perl
       releases. If you	have an	older perl, you'd either need to upgrade your
       perl or contact ActiveState about a subscription.

   Red Hat Enterprise Linux (RHEL), CentOS and Fedora
       Red Hat Enterprise Linux, its community derivatives such	as CentOS, and
       Fedora come with	MySQL and DBD::mysql.

       Use the following command to install DBD::mysql:

	   yum install "perl(DBD::mysql)"

   Debian and Ubuntu
       On Debian, Ubuntu and derivatives you can install DBD::mysql from the
       repositories with the following command:

	   sudo	apt-get	install	libdbd-mysql-perl

   SLES	and openSUSE
       On SUSE Linux Enterprise	and the	community version openSUSE, you	can
       install DBD::mysql from the repositories	with the following command:

	   zypper install perl-DBD-mysql

   Other systems
       In the case of other Linux or FreeBSD distributions it is very likely
       that all	you need comes with your distribution.	I just cannot give you
       names, as I am not using	these systems.

       Please let me know if you find the files	in your	favorite Linux or
       FreeBSD distribution so that I can extend the above list.

       So you need to install from sources. If you are lucky, the Perl module
       "CPAN" will do all for you, thanks to the excellent work	of Andreas
       KA<paragraph>nig. Otherwise you will need to do a manual	installation.
       All of these installation types have their own section: "CPAN
       installation", "Manual installation" and	"Configuration".

       The DBD::mysql Makefile.PL needs	to know	where to find your MySQL
       installation. This may be achieved using	command	line switches (see
       "Configuration")	or automatically using the mysql_config	binary which
       comes with most MySQL distributions. If your MySQL distribution
       contains	mysql_config the easiest method	is to ensure this binary is on
       your path.

       Typically, this is the case if you've installed the mysql library from
       your systems' package manager.


	 export	PATH

       As stated, to compile DBD::mysql	you'll need a C	compiler. This should
       be the same compiler as the one used to build perl AND the mysql	client
       libraries. If you're on linux, this is most typically the case and you
       need not	worry. If you're on UNIX systems, you might want to pay

       Also you'll need	to get the MySQL client	and development	headers	on
       your system. The	easiest	is to get these	from your package manager.

       To run the tests	that ship with the module, you'll need access to a
       running MySQL server. This can be running on localhost, but it can also
       be on a remote machine.

       On Fedora the process is	as follows. Please note	that Fedora actually
       ships with MariaDB but not with MySQL. This is not a problem, it	will
       work just as well.  In this example we install and start	a local	server
       for running the tests against.

	   yum -y install make gcc mariadb-devel mariadb-libs mariadb-server
	   yum -y install "perl(Test::Deep)" "perl(Test::More)"
	   systemctl start mariadb.service

   Environment Variables
       For ease	of use,	you can	set environment	variables for DBD::mysql
       installation. You can set any or	all of the options, and	export them by
       putting them in your .bashrc or the like:

	   export DBD_MYSQL_CFLAGS=-I/usr/local/mysql/include/mysql
	   export DBD_MYSQL_LIBS="-L/usr/local/mysql/lib/mysql -lmysqlclient"
	   export DBD_MYSQL_CONFIG=mysql_config
	   export DBD_MYSQL_NOSSL=
	   export DBD_MYSQL_TESTDB=test
	   export DBD_MYSQL_TESTHOST=localhost
	   export DBD_MYSQL_TESTPASSWORD=s3kr1+
	   export DBD_MYSQL_TESTPORT=3306
	   export DBD_MYSQL_TESTUSER=me

       The most	useful may be the host,	database, port,	socket,	user, and

       Installation will first look to your mysql_config, and then your
       environment variables, and then it will guess with intelligent

   CPAN	installation
       Installation of DBD::mysql can be incredibly easy:

	 cpan DBD::mysql

       Please note that	this will only work if the prerequisites are
       fulfilled, which	means you have a C-compiler installed, and you have
       the development headers and mysql client	libraries available on your

       If you are using	the CPAN module	for the	first time, just answer	the
       questions by accepting the defaults which are fine in most cases.

       If you cannot get the CPAN module working, you might try	manual
       installation. If	installation with CPAN fails because the your local
       settings	have been guessed wrong, you need to ensure MySQL's
       mysql_config is on your path (see "SOURCE INSTALLATION")	or
       alternatively create a script called "mysql_config". This is described
       in more details later. "Configuration".

   Manual installation
       For a manual installation you need to fetch the DBD::mysql source
       distribution. The latest	version	is always available from

       The name	is typically something like


       The archive needs to be extracted. On Windows you may use a tool	like
       7-zip, on *nix you type

	 tar xf	DBD-mysql-4.025.tar.gz

       This will create	a subdirectory DBD-mysql-4.025.	Enter this
       subdirectory and	type

	 perl Makefile.PL
	 make test

       (On Windows you may need	to replace "make" with "dmake" or "nmake".) If
       the tests seem to look fine, you	may continue with

	 make install

       If the compilation (make) or tests fail,	you might need to configure
       some settings.

       For example you might choose a different	database, the C	compiler or
       the linker might	need some flags. "Configuration".  "Compiler flags".
       "Linker flags".

       For Cygwin there	is a special section below.  "Cygwin".

       The install script "Makefile.PL"	can be configured via a	lot of
       switches. All switches can be used on the command line. For example,
       the test	database:

	 perl Makefile.PL --testdb=<db>

       If you do not like configuring these switches on	the command line, you
       may alternatively create	a script called	"mysql_config".	 This is
       described later on.

       Available switches are:

	   Name	of the test database, defaults to test.

	   Name	of the test user, defaults to empty. If	the name is empty,
	   then	the currently logged in	users name will	be used.

	   Password of the test	user, defaults to empty.

	   Host	name or	IP number of the test database;	defaults to localhost.

	   Port	number of the test database

       ps-protcol=1 or 0
	   Whether to run the test suite using server prepared statements or
	   driver emulated prepared statements.	ps-protocol=1 means use	server
	   prepare, ps-protocol=0 means	driver emulated.

	   This	is a list of flags that	you want to give to the	C compiler.
	   The most important flag is the location of the MySQL	header files.
	   For example,	on Red Hat Linux the header files are in
	   /usr/include/mysql and you might try


	   On Windows the header files may be in C:\mysql\include and you
	   might try


	   The default flags are determined by running

	     mysql_config --cflags

	   More	details	on the C compiler flags	can be found in	the following
	   section. "Compiler flags".

	   This	is a list of flags that	you want to give to the	linker or
	   loader. The most important flags are	the locations and names	of
	   additional libraries. For example, on Red Hat Linux your MySQL
	   client libraries are	in /usr/lib/mysql and you might	try

	     -L/usr/lib/mysql -lmysqlclient -lz

	   On Windows the libraries may	be in C:\mysql\lib and

	     -LC:\mysql\lib -lmysqlclient

	   might be a good choice. The default flags are determined by running

	     mysql_config --libs

	   More	details	on the linker flags can	be found in a separate
	   section.  "Linker flags".

       If a switch is not present on the command line, then the	script
       "mysql_config" will be executed.	This script comes as part of the MySQL
       distribution. For example, to determine the C compiler flags, we	are

	 mysql_config --cflags
	 mysql_config --libs

       If you want to configure	your own settings for database name, database
       user and	so on, then you	have to	create a script	with the same name,
       that replies

   Compiler flags
       Note: the following info	about compiler and linker flags, you shouldn't
       have to use these options because Makefile.PL is	pretty good at
       utilizing mysql_config to get the flags that you	need for a successful

       It is typically not so difficult	to determine the appropriate flags for
       the C compiler. The linker flags, which you find	in the next section,
       are another story.

       The determination of the	C compiler flags is usually left to a
       configuration script called mysql_config, which can be invoked with

	 mysql_config --cflags

       When doing so, it will emit a line with suggested C compiler flags, for
       example like this:


       The C compiler must find	some header files. Header files	have the
       extension ".h". MySQL header files are, for example, mysql.h and
       mysql_version.h.	In most	cases the header files are not installed by
       default.	For example, on	Windows	it is an installation option of	the
       MySQL setup program (Custom installation), whether the header files are
       installed or not. On Red	Hat Linux, you need to install an RPM archive
       mysql-devel or MySQL-devel.

       If you know the location	of the header files, then you will need	to add
       an option

	 -L<header directory>

       to the C	compiler flags,	for example "-L/usr/include/mysql".

   Linker flags
       Appropriate linker flags	are the	most common source of problems while
       installing DBD::mysql. I	will only give a rough overview, you'll	find
       more details in the troubleshooting section.  "KNOWN PROBLEMS"

       The determination of the	C compiler flags is usually left to a
       configuration script called mysql_config, which can be invoked with

	 mysql_config --libs

       When doing so, it will emit a line with suggested C compiler flags, for
       example like this:

	  -L'/usr/lib/mysql' -lmysqlclient -lnsl -lm -lz -lcrypt

       The following items typically need to be	configured for the linker:

       The mysqlclient library
	   The MySQL client library comes as part of the MySQL distribution.
	   Depending on	your system it may be a	file called

	     F<libmysqlclient.a>   statically linked library, Unix
	     F<>  dynamically linked library, Unix
	     F<mysqlclient.lib>	   statically linked library, Windows
	     F<mysqlclient.dll>	   dynamically linked library, Windows

	   or something	similar.

	   As in the case of the header	files, the client library is typically
	   not installed by default. On	Windows	you will need to select	them
	   while running the MySQL setup program (Custom installation).	On Red
	   Hat Linux an	RPM archive mysql-devel	or MySQL-devel must be

	   The linker needs to know the	location and name of the mysqlclient
	   library. This can be	done by	adding the flags

	     -L<lib directory> -lmysqlclient

	   or by adding	the complete path name.	Examples:

	     -L/usr/lib/mysql -lmysqlclient
	     -LC:\mysql\lib -lmysqlclient

	   If you would	like to	use the	static libraries (and there are
	   excellent reasons to	do so),	you need to create a separate
	   directory, copy the static libraries	to that	place and use the -L
	   switch above	to point to your new directory.	For example:

	     mkdir /tmp/mysql-static
	     cp	/usr/lib/mysql/*.a /tmp/mysql-static
	     perl Makefile.PL --libs="-L/tmp/mysql-static -lmysqlclient"
	     make test
	     make install
	     rm	-rf /tmp/mysql-static

       The gzip	library
	   The MySQL client can	use compression	when talking to	the MySQL
	   server, a nice feature when sending or receiving large texts	over a
	   slow	network.

	   On Unix you typically find the appropriate file name	by running

	     ldconfig -p | grep	libz
	     ldconfig -p | grep	libgz

	   Once	you know the name (libz.a or libgz.a is	best), just add	it to
	   the list of linker flags. If	this seems to be causing problem you
	   may also try	to link	without	gzip libraries.

       Connecting to your servers over an encrypted connection (SSL) is	only
       possible	if you enabled this setting at build time. Since version
       4.034, this is the default.

       Attempting to connect to	a server that requires an encrypted connection
       without first having DBD::mysql compiled	with the "--ssl" option	will
       result in an error that makes things appear as if your password is

       If you want to compile DBD::mysql without SSL support, which you	might
       probably	only want if you for some reason can't install libssl headers,
       you can do this by passing the "--nossl"	option to Makefile.PL or by
       setting the DBD_MYSQL_NOSSL environment variable	to '1'.

       The MariaDB native client is another option for connecting to a MySQLA.
       database	licensed LGPL 2.1. To build DBD::mysql against this client,
       you will	first need to build the	client.	Generally, this	is done	with
       the following:

	 cd path/to/src/mariadb-native-client
	 cmake -G "Unix	Makefiles'
	 sudo make install

       Once the	client is built	and installed, you can build DBD::mysql
       against it:

	 perl Makefile.PL --testuser=xxx --testpassword=xxx --testsocket=/path/to//mysqld.sock --mysql_config=/usr/local/bin/mariadb_configA.
	 make test
	 make install

       Below you find information on particular	systems:

       For installing DBD::mysql you need to have the libssl header files and
       the mysql client	libs. The easiest way to install these is using
       Homebrew	(<>).

       Once you	have Homebrew set up, you can simply install the dependencies

	   brew	install	openssl	mysql-connector-c

       Then you	can install DBD::mysql using your cpan client.

       If you are a user of Cygwin you already know, it	contains a nicely
       running perl 5.6.1, installation	of additional modules usually works
       like a charm via	the standard procedure of

	   perl	makefile.PL
	   make	test
	   make	install

       The Windows binary distribution of MySQL	runs smoothly under Cygwin.
       You can start/stop the server and use all Windows clients without
       problem.	 But to	install	DBD::mysql you have to take a little special

       Don't attempt to	build DBD::mysql against either	the MySQL Windows or
       Linux/Unix BINARY distributions:	neither	will work!

       You MUST	compile	the MySQL clients yourself under Cygwin, to get	a
       'libmysqlclient.a' compiled under Cygwin. Really! You'll	only need that
       library and the header files, you don't need any	other client parts.
       Continue	to use the Windows binaries. And don't attempt (currently) to
       build the MySQL Server part, it is unnecessary, as MySQL	AB does	an
       excellent job to	deliver	optimized binaries for the mainstream
       operating systems, and it is told, that the server compiled under
       Cygwin is unstable.

       Install a MySQL server for testing against. You can install the regular
       Windows MySQL server package on your Windows machine, or	you can	also
       test against a MySQL server on a	remote host.

       Build MySQL clients under Cygwin:

       download	the MySQL LINUX	source from <>,
       unpack mysql-<version>.tar.gz into some tmp location and	from this
       directory run configure:

	 ./configure --prefix=/usr/local/mysql --without-server

       This prepares the Makefile with the installed Cygwin features. It takes
       some time, but should finish without error. The 'prefix', as given,
       installs	the whole Cygwin/MySQL thingy into a location not normally in
       your PATH, so that you continue to use already installed	Windows
       binaries. The --without-server parameter	tells configure	to only	build
       the clients.


       This builds all MySQL client parts ... be patient. It should finish
       finally without any error.

	 make install

       This installs the compiled client files under /usr/local/mysql/.
       Remember, you don't need	anything except	the library under
       /usr/local/mysql/lib and	the headers under /usr/local/mysql/include!

       Essentially you are now done with this part. If you want, you may try
       your compiled binaries shortly; for that, do:

	 cd /usr/local/mysql/bin
	 ./mysql -h

       The host	(-h) parameter targets the local host, but forces
       the mysql client	to use a TCP/IP	connection. The	default	would be a
       pipe/socket connection (even if you say '-h localhost') and this
       doesn't work between Cygwin and Windows (as far as I know).

       If you have your	MySQL server running on	some other box,	then please
       substitute '' with the name or IP-number of that box.

       Please note, in my environment the 'mysql' client did not accept	a
       simple RETURN, I	had to use CTRL-RETURN to send commands	... strange,
       but I didn't attempt to fix that, as we are only	interested in the
       built lib and headers.

       At the 'mysql>' prompt do a quick check:

	 mysql>	use mysql
	 mysql>	show tables;
	 mysql>	select * from db;
	 mysql>	exit

       You are now ready to build DBD::mysql!

       compile DBD::mysql

       download	and extract DBD-mysql-<version>.tar.gz from CPAN

       cd into unpacked	dir DBD-mysql-<version>	you probably did that already,
       if you are reading this!

	 cp /usr/local/mysql/bin/mysql_config .

       This copies the executable script mentioned in the DBD::mysql docs from
       your just built Cywin/MySQL client directory; it	knows about your
       Cygwin installation, especially about the right libraries to link with.

	 perl Makefile.PL --testhost=

       The --testhost=	parameter again	forces a TCP/IP	connection to
       the MySQL server	on the local host instead of a pipe/socket connection
       for the 'make test' phase.


       This should run without error

	 make test
	 make install

       This installs DBD::mysql	into the Perl hierarchy.

   no gzip on your system
       Some Linux distributions	don't come with	a gzip library by default.
       Running "make" terminates with an error message like

	 LD_RUN_PATH="/usr/lib/mysql:/lib:/usr/lib" gcc
	   -o blib/arch/auto/DBD/mysql/	 -shared
	   -L/usr/local/lib dbdimp.o mysql.o -L/usr/lib/mysql
	   -lmysqlclient -lm -L/usr/lib/gcc-lib/i386-redhat-linux/2.96
	   -lgcc -lz
	 /usr/bin/ld: cannot find -lz
	 collect2: ld returned 1 exit status
	 make: *** [blib/arch/auto/DBD/mysql/] Error 1

       If this is the case for you, install an RPM archive like	libz-devel,
       libgz-devel, zlib-devel or gzlib-devel or something similar.

   different compiler for mysql	and perl
       If Perl was compiled with gcc or	egcs, but MySQL	was compiled with
       another compiler	or on another system, an error message like this is
       very likely when	running	"Make test":

	 t/00base............install_driver(mysql) failed: Can't load
	 '../blib/arch/auto/DBD/mysql/'	for module DBD::mysql:
	 ../blib/arch/auto/DBD/mysql/ undefined symbol: _umoddi3
	 at /usr/local/perl-5.005/lib/5.005/i586-linux-thread/
	 line 168.

       This means, that	your linker doesn't include libgcc.a. You have the
       following options:

       The solution is telling the linker to use libgcc. Run

	 gcc --print-libgcc-file

       to determine the	exact location of libgcc.a or for older	versions of

	 gcc -v

       to determine the	directory. If you know the directory, add a

	 -L<directory> -lgcc

       to the list of C	compiler flags.	"Configuration". "Linker flags".

       Finally,	if everything else fails, you are not alone. First of all, for
       an immediate answer, you	should look into the archives of the dbi-users
       mailing list, which is available	at

       To subscribe to this list, send and email to

       If you don't find an appropriate	posting	and reply in the mailing list,
       please post a question. Typically a reply will be seen within one or
       two days.

perl v5.32.0			  2018-10-07		DBD::mysql::INSTALL(3)


Want to link to this manual page? Use this URL:

home | help