Skip to content

PHP Mysql support: mysql or mysqlnd?

So you are installing a modern version of php using one of the alternative repositories, and suddenly you are confronted with a confusing choice. You want support for mysql (mysqli or PDO-mysql) in your php program. But which one to choose?

First off, you should probably be using PDO. It's just a cleaner database interface when compared to mysqli, and also tends to be the supported option if you're using an ORM like Doctrine2.

But you probably have found that installing the PDO package doesn't get you support for MySQL.

So what are these 2 packages? Well let's see what yum under Centos shows us, once we've setup webtatic as a repo:

 * webtatic:
php56w-mysql.x86_64 : A module for PHP applications that use MySQL databases
php56w-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases

In short, the mysql extension aka the mysql library is to quote Oracle/mysql
... a general-purpose client library
named libmysql.

This was the original php approach to supporting mysql. MySQL provided a client api library, and using that c library, a php extension was created that depends upon libmysql implementing the famous mysql_ functions that allowed php to talk to mysql.

The mysqlnd package (where nd stands for "native driver") is the fruit of a project to make mysql work optimally in the php language. Again to quote the mysql site:

The mysqlnd library is highly optimized for and tightly integrated into PHP. The MySQL Client Library cannot offer the same optimizations because it is a general-purpose client library.

The mysqlnd library is using PHP internal C infrastructure for seamless integration into PHP. In addition, it is using PHP memory management, PHP Streams (I/O abstraction) and PHP string handling routines. The use of PHP memory management by mysqlnd allows, for example, memory savings by using read-only variables (copy on write) and makes mysqlnd apply to PHP memory limits.

On top of these benefits are a number of interesting enhancements and support for plugins that might be of specific interest to you as a developer or sysadmin.

In general nothing should break in your code as the api should work the same under mysqlnd as it did with the old mysql library.


In summary, you want to use mysqlnd now and in the future.

Defined tags for this entry: , , , , ,

Centos, Amazon Linux, NFS and the dreaded "nobody" problem

I have been fighting a problem with mounting volumes from an NFS Server in AWS for a few days. With more pressing issues at hand, I had to try and google for solutions for an hour or so before bed, and nothing I was doing was having any effect. Curiously, an Ubuntu based machine that was mounting the drive using NFS3 was not having the same problem. Only the Amazon Linux servers that were using NFS4 were having the issue, and were showing all files and directories as being owned by nobody:nobody.

drwxr-xr-x    2 nobody nobody   22 Jan  9 19:58 installervc
drwxr-xr-x    2 nobody nobody 4.0K Jan  9 19:56 avatar
drwxr-xr-x    2 nobody nobody 4.0K Jan  9 19:56 accessories

I had previously insured that the user UID and group GID for the user that would be writing files (in my case "apache" was the same (with the same UID and GID) on the NFS server and the servers mounting the nfs volume.

As it turned out the problem was with the configuration (or lack thereof) of the rpcidmapd service. NFS4 relies on this service to map users between machines. The "idmapd" requires that the domain of both the client and server should match for the UID/GID mapping to work, and in my case it wasn't. Probably many people with proper DNS configuration don't hit this problem, but we did not have a proper DNS setup, as these machines are part of a growing cluster. Compounding the problem I had set the configuration files to have meaningless host names rather than a domain.

You can tweak this setup by editing the: /etc/idmapd.conf file, and find the "Domain" variable:

Domain =

Set these to be the same for the server and all the clients.

The last problem was that I had to restart the idmapd process, which has an /etc/init.d control script named /etc/rpcidmapd

[root@web1 init.d]# ls -lath | grep rpcid
-rwxr-xr-x  1 root root 2.7K Jul 28  2011 rpcidmapd

Restart the process on both the nfs server and any nfs clients. If the source of your problem is the same as mine, your user & group mapping problems should be solved:

sudo /etc/inti.d/rpcidmapd restart


drwxr-xr-x    2 apache apache   22 Jan  9 19:58 installervc
drwxr-xr-x    2 apache apache 4.0K Jan  9 19:56 avatar
drwxr-xr-x    2 apache apache 4.0K Jan  9 19:56 accessories

Defined tags for this entry: , , , , , , , ,

Run a Centos Lamp development server on XP, Vista or Win 7 using VirtualBox

If you use a Windows based workstation or notebook computer virtualization offers a way for you to run a linux server environment using the same linux distribution and configuration you'll use in production. Virtualization allows you to explore clustering and network setups that can't be tested on your workstation alone and simplifies your development environment by keeping the LAMP environment contained inside a VM.

While VMWare offers these capabilities with their VMWare workstation product, Sun has created a free alternative called VirtualBox, with many of the same capabilities in VMWare workstation. VirtualBox runs on a variety of intel chip based operating systems including OS/X, Windows XP & Vista, Linux and Solaris, and supports the installation of many different "Guest" operating systems. In this article, I'll detail the installation and configuration of Centos. Centos is a great choice for a Linux server operating system, as it is widely used by hosting companies due to its Redhat Enterprise Linux (RHEL) core.

Our goals in this setup will be:

• Centos server running the LAMP stack
• XP can be used to develop code using the IDE of your choice.
• The XP Workstation can communicate with the linux server using standard tools: putty, winscp, firefox
• The setup works even when no other networking is available. When a network is available, no network reconfiguration is required.
• Use XP to setup private domain resolution so apache vhost configurations can be tested.

Let's get started.

Continue reading "Run a Centos Lamp development server on XP, Vista or Win 7 using VirtualBox"

Xen 3.0 Fedora Core, RHEL, Centos 4.x How-to

I gave a talk on the use of Xen for web developers at Lampsig. It took me a while to get my notes transcribed, but here at last they are. This prescription has been used by me to install Xen successfully on a Fedora core 4 box, Centos 4.3 and 4.4 boxes, and should probably work on RHEL, assuming you can figure out how to get the packages you need.

I cover use of file backed file systems, and how to mount and edit them, as well as expanding a file based filesystem.

I have run gentoo and Centos guests I got from and have found them to be very stable. I even was able to use this on a 64 bit server, although I did have to build my own guest. Many people who have had trouble getting Xen to work reliably when using the packaged (rpm) versions of Xen may find this prescription fixes their problems.

Xen 3.0 Centos How-to
Defined tags for this entry: , , , , ,

Install Xwindows and Gnome on Centos with Yum

I recently had need to add XWindows to a Centos 4.x install that didn't have X or Gnome. I was doing this under VMware which added slightly to the degree of difficulty. As it turns out, using Yum makes this a very easy process, although you probably end up with some bloated packageware.

# yum groupinstall "X Window System" "GNOME Desktop Environment"

Pay close attention to the capitalization -- Yum is picky. "Gnome desktop environment" won't work, for example.
Defined tags for this entry: , , , , ,