This error will occur when you try to install mysqlnd_ms using pecl on PHP v5.6 and above. This is because the pecl package manager hasn’t been updated yet, thats why the extension for mysqlnd_ms is available only for PHP v5.3 to PHP v5.5 ( correct me if I’m wrong 😛 ).
What is mysqlnd_ms?
If you are reading this post, then you probably know what is mysqlnd_ms and what it is for. So if you want to go ahead and skip to the solution part, click here. But if you don’t know what is mysqlnd_ms, continue reading…
Mysqlnd_ms is an extension under MySQL Native Driver (mysqlnd) that promotes High Availability for Mysql Connection.
Here are the Key Features of mysqlnd_ms:
Transparent and therefore easy to use.
- Supports all of the PHP MySQL extensions.
- SSL support.
- A consistent API.
- Little to no application changes required, dependent on the required usage scenario.
- Lazy connections: connections to master and slave servers are not opened before a SQL statement is executed.
- Optional: automatic use of master after the first write in a web request, to lower the possible impact of replication lag.
Can be used with any MySQL clustering solution.
- MySQL Replication: Read-write splitting is done by the plugin. Primary focus of the plugin.
- MySQL Cluster: Read-write splitting can be disabled. Configuration of multiple masters possible
- Third-party solutions: the plugin is optimized for MySQL Replication but can be used with any other kind of MySQL clustering solution.
Featured read-write split strategies
- Automatic detection of SELECT.
- Supports SQL hints to overrule automatism.
- User-defined.
- Can be disabled for, for example, when using synchronous clusters such as MySQL Cluster.
Featured load balancing strategies
- Round Robin: choose a different slave in round-robin fashion for every slave request.
- Random: choose a random slave for every slave request.
- Random once (sticky): choose a random slave once to run all slave requests for the duration of a web request.
- User-defined. The application can register callbacks with mysqlnd_ms.
- PHP 5.4.0 or newer: transaction aware when using API calls only to control transactions.
- Weighted load balancing: servers can be assigned different priorities, for example, to direct more requests to a powerful machine than to another less powerful machine. Or, to prefer nearby machines to reduce latency.
Global transaction ID
- Client-side emulation. Makes manual master server failover and slave promotion easier with asynchronous clusters, such as MySQL Replication.
- Support for built-in global transaction identifier feature of MySQL 5.6.5 or newer.
- Supports using transaction ids to identify up-to-date asynchronous slaves for reading when session consistency is required. Please, note the restrictions mentioned in the manual.
- Throttling: optionally, the plugin can wait for a slave to become “synchronous” before continuing.
Service and consistency levels
- Applications can request eventual, session and strong consistency service levels for connections. Appropriate cluster nodes will be searched automatically.
- Eventual consistent MySQL Replication slave accesses can be replaced with fast local cache accesses transparently to reduce server load.
Partitioning and sharding
- Servers of a replication cluster can be organized into groups. SQL hints can be used to manually direct queries to a specific group. Grouping can be used to partition (shard) the data, or to cure the issue of hotspots with updates.
- MySQL Replication filters are supported through the table filter.
Check mysqlnd_ms documentation for more info.
Now back to the real topic. 😀
How to install mysqlnd_ms in PHP v5.6 and above
First you need to install the dependencies.
If you are using php-mysql, then you should remove it and replace it with php-mysqlnd and restart your apache. Please see commands below:
CentOS, Fedora, etc.
yum remove -y php-mysql yum install -y php-mysqlnd service httpd restart
Ubuntu, Debian, etc
apt-get remove -y php-mysql apt-get install -y php-mysqlnd apachectl restart
Now check if mysqlnd module is already loaded by typing this command
php -m
or
php -m | grep mysqlnd
mysqlnd should appear when you enter this command if mysqlnd is loaded.
Now let’s install other dependencies by typing the command below:
CentOS, Fedora, etc.
sudo yum install -y php-pear php-devel
Ubuntu, Debian, etc
sudo apt-get install -y php-pear php-dev
Now let’s install mysqlnd_ms:
svn checkout http://svn.php.net/repository/pecl/mysqlnd_ms/trunk/ && cd trunk && phpize && ./configure --with-php-config=/usr/bin/php-config && make sudo make install sudo echo "extension=mysqlnd_ms.so" >> /etc/php.ini
Then verify if mysqlnd_ms is properly installed by entering this command.
php -m | grep mysqlnd_ms
NOTE: Package names maybe different on some repos. Please modify the commands according to your needs. 😀
Please comment your questions, or if you encounter a problem during the installation. Have fun!!!!