mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-20 19:08:54 +00:00

git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@310363 c90b9560-bf6c-de11-be94-00142212c4b1
379 lines
15 KiB
XML
Executable file
379 lines
15 KiB
XML
Executable file
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
|
|
<chapter xml:id="mysqlnd-ms.setup" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
&reftitle.setup;
|
|
|
|
<section xml:id="mysqlnd-ms.requirements">
|
|
&reftitle.required;
|
|
<para>
|
|
<literal>PHP 5.3.6</literal> or newer.
|
|
</para>
|
|
<para>
|
|
The <literal>mysqlnd_ms</literal> replication and load balancing
|
|
plugin supports all PHP applications and all availablePHP MySQL extensions
|
|
(<link linkend="ref.mysqli">mysqli</link>,
|
|
<link linkend="ref.mysql">mysql</link>,
|
|
<link linkend="ref.pdo-mysql">PDO_MYSQL</link>).
|
|
The PHP MySQL extension must be configured to use
|
|
<link linkend="book.mysqlnd">mysqlnd</link> in order to be able
|
|
to use the <literal>mysqlnd_ms</literal> plugin for
|
|
<link linkend="book.mysqlnd">mysqlnd</link>.
|
|
</para>
|
|
</section>
|
|
|
|
&reference.mysqlnd-ms.configure;
|
|
&reference.mysqlnd-ms.ini;
|
|
|
|
<section xml:id="mysqlnd-ms.plugin-ini">
|
|
<title xmlns="http://docbook.org/ns/docbook">Plugin configuration file</title>
|
|
<para>
|
|
The plugin is using its own configuration file. The configuration file
|
|
holds information on the MySQL replication master server,
|
|
the MySQL replication slave servers, the server pick (load balancing) policy,
|
|
the failover strategy and the use of lazy connections.
|
|
</para>
|
|
<para>
|
|
The PHP configuration directive
|
|
<link linkend="ini.mysqlnd-ms.ini-file"><literal>mysqlnd_ms.ini_file</literal></link>
|
|
is used to set the plugins configuration file.
|
|
</para>
|
|
<para>
|
|
The configuration file minics standard <literal>php.ini</literal> format.
|
|
It consists of one or more sections. Every section defines its own unit
|
|
of settings. There is no global section for setting defaults.
|
|
</para>
|
|
<para>
|
|
Applications reference sections by their name. Applications use section names
|
|
as the host (server) parameter to the various connect methods of the
|
|
<link linkend="ref.mysqli">mysqli</link>,
|
|
<link linkend="ref.mysql">mysql</link> and
|
|
<link linkend="ref.pdo-mysql">PDO_MYSQL</link> extensions. Upon connect
|
|
the <link linkend="book.mysqlnd">mysqlnd</link> plugin compares the hostname
|
|
with all section names from the plugin configuration file. If hostname and
|
|
section name match, the plugin will load the sections settings.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Using section names example</title>
|
|
<programlisting role="ini">
|
|
<![CDATA[
|
|
[myapp]
|
|
master[] = localhost
|
|
slave[] = 192.168.2.27
|
|
slave[] = 192.168.2.28:3306
|
|
[localhost]
|
|
master[] = localhost:/tmp/mysql/mysql.sock
|
|
slave[] = 192.168.3.24:3305
|
|
slave[] = 192.168.3.65:3309
|
|
]]>
|
|
</programlisting>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/* All of the following connections will be load balanced */
|
|
$mysqli = new mysqli("myapp", "username", "password", "database");
|
|
$pdo = new PDO('mysql:host=myapp;dbname=database', 'username', 'password');
|
|
$mysql = mysql_connect("myapp", "username", "password");
|
|
|
|
$mysqli = new mysqli("localhost", "username", "password", "database");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Section names are strings. It is valid to use a section name such as
|
|
<literal>192.168.2.1</literal>, <literal>127.0.0.1</literal> or
|
|
<literal>localhost</literal>. If, for example, an application
|
|
connects to <literal>localhost</literal> and a plugin
|
|
configuration section <literal>[localhost]</literal> exists, the
|
|
semantics of the connect operation are changed. The application will
|
|
no longer only use the MySQL server running on the host
|
|
<literal>localhost</literal> but the plugin will start to load balance
|
|
MySQL queries following the rules from the <literal>[localhost]</literal>
|
|
configuration section. This way you can load balance queries from
|
|
an application without changing the applications source code.
|
|
</para>
|
|
<para>
|
|
The <literal>master[]</literal>, <literal>slave[]</literal>
|
|
and <literal>pick[]</literal> configuration directives use a list-like syntax.
|
|
Configuration directives supporting list-like syntax may appear multiple
|
|
times in a configuration section. The plugin maintains the order in
|
|
which entries appear when interpreting them. For example,
|
|
the below example shows two <literal>slave[]</literal> configuration
|
|
directives in the configuration section <literal>[myapp]</literal>.
|
|
If doing round-robin load balancing for read-only queries, the plugin
|
|
will send the first read-only query to the MySQL server
|
|
<literal>mysql_slave_1</literal> because it is the first in the list.
|
|
The second read-only query will be send to the MySQL server
|
|
<literal>mysql_slave_2</literal> because it is the second in the list.
|
|
Configuration directives supporting list-like syntax result are ordered
|
|
from top to bottom in accordance to their appearance within a configuration
|
|
section.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>List-like syntax</title>
|
|
<programlisting role="ini">
|
|
<![CDATA[
|
|
[myapp]
|
|
master[] = mysql_master_server
|
|
slave[] = mysql_slave_1
|
|
slave[] = mysql_slave_2
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Here is a short explanation of the configuration directives that can be used.
|
|
</para>
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry xml:id="ini.mysqlnd-ms-plugin-config.master">
|
|
<term>
|
|
<parameter>master[]</parameter>
|
|
<type>string</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
URI of a MySQL replication master server. The URI follows the syntax
|
|
<literal>hostname[:port|unix_domain_socket]</literal>.
|
|
</para>
|
|
<para>
|
|
The plugin supports using only one master server.
|
|
</para>
|
|
<para>
|
|
Setting a master server is mandatory. The plugin will report a
|
|
warning upon connect if the user has failed to provide a master
|
|
server for a configuration section.
|
|
The warning may read
|
|
<literal>(mysqlnd_ms) Cannot find master section in config</literal>.
|
|
Furthermore the plugin may set an error code for the connection handle such as
|
|
<literal>HY000/2000 (CR_UNKNOWN_ERROR)</literal>. The corresponding error
|
|
message depends on your language settings.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.mysqlnd-ms-plugin-config.slave">
|
|
<term>
|
|
<parameter>slave[]</parameter>
|
|
<type>string</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
URI of one or more MySQL replication slave servers. The URI follows the syntax
|
|
<literal>hostname[:port|unix_domain_socket]</literal>.
|
|
</para>
|
|
<para>
|
|
The plugin supports using one or more slave servers.
|
|
</para>
|
|
<para>
|
|
Setting a slave server is mandatory. The plugin will report a
|
|
warning upon connect if the user has failed to provide at least one slave
|
|
server for a configuration section. The warning may read
|
|
<literal>(mysqlnd_ms) Cannot find slaves section in config</literal>.
|
|
Furthermore the plugin may set an error code for the connection handle such as
|
|
<literal>HY000/2000 (CR_UNKNOWN_ERROR)</literal>. The corresponding error
|
|
message depends on your language settings.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.mysqlnd-ms-plugin-config.pick">
|
|
<term>
|
|
<parameter>pick[]</parameter>
|
|
<type>string</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Load balancing (server picking) policy. Supported policies:
|
|
<literal>random</literal>, <literal>random_once</literal> (default),
|
|
<literal>roundrobin</literal>, <literal>user</literal>.
|
|
</para>
|
|
<para>
|
|
If no load balancing policy is set, the plugin will default to
|
|
<literal>random_once</literal>. The <literal>random_once</literal>
|
|
policy picks a random slave server when running the first read-only
|
|
statement. The slave server will be used for all read-only
|
|
statements until the PHP script execution ends.
|
|
</para>
|
|
<para>
|
|
The <literal>random</literal> policy will pick a random server whenever
|
|
a read-only statement is to be executed.
|
|
</para>
|
|
<para>
|
|
If using
|
|
<literal>roundrobin</literal> the plugin iterates over the list of
|
|
configured slave servers to pick a server for statement execution.
|
|
If the plugin reaches the end of the list, it wraps around to the beginning
|
|
of the list and picks the first configured slave server.
|
|
</para>
|
|
<para>
|
|
Setting more than one load balancing policy for a configuration
|
|
section makes only sense in conjunction with <literal>user</literal>
|
|
and <function>mysqlnd_ms_set_user_pick_server</function>. If the
|
|
user defined callback fails to pick a server, the plugin falls
|
|
back to the second configured load balancing policy.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.mysqlnd-ms-plugin-config.failover">
|
|
<term>
|
|
<parameter>failover</parameter>
|
|
<type>string</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Failover policy. Supported policies:
|
|
<literal>disabled</literal> (default), <literal>master</literal>.
|
|
</para>
|
|
<para>
|
|
If no failover policy is set, the plugin will not do any
|
|
automatic failover (<literal>failover=disabled</literal>). Whenever
|
|
the plugin fails to connect a server it will emit a warning and
|
|
set the connections error code and message. Thereafter it is up to
|
|
the application to handle the error and, for example, resent the
|
|
last statement to trigger the selection of another server.
|
|
</para>
|
|
<para>
|
|
If using <literal>failover=master</literal> the plugin will implicitly
|
|
failover to a slave, if available. Please check the
|
|
concepts documentation to learn about potential
|
|
pitfalls and risks of using <literal>failover=master</literal>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.mysqlnd-ms-plugin-config.lazy_connections">
|
|
<term>
|
|
<parameter>lazy_connections</parameter>
|
|
<type>bool</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Controls the use of lazy connections. Lazy connections
|
|
are connections which are not opened before the client sends the first
|
|
connection.
|
|
</para>
|
|
<para>
|
|
It is strongly recommended to use lazy connections.
|
|
Lazy connections help to keep the the number of open connections low.
|
|
If you disable lazy connections and, for example, configure one MySQL
|
|
replication master server and two MySQL replication slaves, the
|
|
plugin will open three connections upon the first call to a
|
|
connect function although the application might use the master
|
|
connection only.
|
|
</para>
|
|
<para>
|
|
Lazy connections bare a risk if you make heavy use of actions
|
|
which change the state of a connection. The plugin does not dispatch
|
|
all state changing actions to all connections from the connection pool.
|
|
The few dispatched actions are applied to already opened connections
|
|
only. Lazy connections opened in the future are not affected.
|
|
If, for example, the connection character set is changed using a
|
|
PHP MySQL API call, the plugin will change the character set of all
|
|
currently opened connection. It will not remeber the character set
|
|
change to apply it on lazy connections opened in the future. As a
|
|
result the internal connection pool would hold connections using
|
|
different character sets. This is not desired. Remember that character
|
|
sets are taken into account for escaping.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.mysqlnd-ms-plugin-config.master_on_write">
|
|
<term>
|
|
<parameter>master_on_write</parameter>
|
|
<type>bool</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
If set, the plugin will use the master server only after the
|
|
first statement has been executed on the master. Applications
|
|
can still send statements to the slaves using SQL hints to
|
|
overrule the automatic decision.
|
|
</para>
|
|
<para>
|
|
The setting may help with replication lag. If an application runs
|
|
an <literal>INSERT</literal> the plugin will, by default, use the
|
|
master to execute all following statements, including
|
|
<literal>SELECT</literal> statements. This helps to avoid problems
|
|
with reads from slaves which have not replicated the
|
|
<literal>INSERT</literal> yet.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.mysqlnd-ms-plugin-config.trx_stickiness">
|
|
<term>
|
|
<parameter>trx_stickiness</parameter>
|
|
<type>string</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Transaction stickiness policy. Supported policies:
|
|
<literal>disabled</literal> (default), <literal>master</literal>.
|
|
</para>
|
|
<para>
|
|
Experimental feature.
|
|
</para>
|
|
<para>
|
|
The setting requires 5.3.99 or newer. If used with PHP older than 5.3.99,
|
|
the plugin will emit a warning like
|
|
<literal>(mysqlnd_ms) trx_stickiness strategy is not supported before PHP 5.3.99</literal>.
|
|
</para>
|
|
<para>
|
|
If no transaction stickiness policy is set or,
|
|
if setting <literal>trx_stickiness=disabled</literal>,
|
|
the plugin is not transaction aware. Thus, the plugin may load balance
|
|
connections and switch connections in the middle of a transaction.
|
|
The plugin is not transaction safe. SQL hints must be used
|
|
avoid connection switches during a transaction.
|
|
</para>
|
|
<para>
|
|
As of PHP 5.3.99 the mysqlnd library allows the plugin to monitor
|
|
the <literal>autocommit</literal> mode set by calls to the
|
|
libraries <literal>trx_autocommit()</literal> function.
|
|
If setting <literal>trx_stickiness=master</literal> and
|
|
<literal>autocommit</literal> gets disabled by a PHP MySQL extension
|
|
invoking the <literal>mysqlnd</literal> library internal
|
|
function call <literal>trx_autocommit()</literal>, the plugin is made
|
|
aware of the begin of a transaction. Then, the plugin stops load balancing
|
|
and directs all statements to the master server until
|
|
<literal>autocommit</literal> is enabled. Thus, no SQL hints are required.
|
|
</para>
|
|
<para>
|
|
An example of a PHP MySQL API function calling the <literal>mysqlnd</literal>
|
|
library internal function call <literal>trx_autocommit()</literal> is
|
|
<function>mysqli_autocommit</function>.
|
|
</para>
|
|
<para>
|
|
Although setting <literal>trx_stickiness=master</literal>, the plugin
|
|
cannot be made aware of <literal>autocommit</literal> mode changes caused
|
|
by SQL statements such as <literal>SET AUTOCOMMIT=0</literal>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</section>
|
|
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|