Mysqlnd replication and load balancing plugin (
mysqlnd_ms
)
2646
Find whether to send the query to the master, the slave or the last used MySQL server
Description
int mysqlnd_ms_query_is_select(
string query);
Finds whether to send the query to the master, the slave or the last used MySQL server.
The plugins built-in read/write split mechanism will be used to analyze the query string to make a
recommendation where to send the query. The built-in read/write split mechanism is very basic and
simple. The plugin will recommend sending all queries to the MySQL replication master server but
those which begin with
SELECT
, or begin with a SQL hint which enforces sending the query to a slave
server. Due to the basic but fast algorithm the plugin may propose to run some read-only statements
such as
SHOW TABLES
on the replication master.
Parameters
query
Query string to test.
Return Values
A return value of
MYSQLND_MS_QUERY_USE_MASTER
indicates that the query should be send to the
MySQL replication master server. The function returns a value of
MYSQLND_MS_QUERY_USE_SLAVE
if the query can be run on a slave because it is considered read-only. A value of
MYSQLND_MS_QUERY_USE_LAST_USED
is returned to recommend running the query on the last used
server. This can either be a MySQL replication master server or a MySQL replication slave server.
If read write splitting has been disabled by setting
mysqlnd_ms.disable_rw_split
, the function will
always return
MYSQLND_MS_QUERY_USE_MASTER
or
MYSQLND_MS_QUERY_USE_LAST_USED
.
Examples
Example 20.301.
mysqlnd_ms_query_is_select
example
<?php
function is_select($query)
{
switch (mysqlnd_ms_query_is_select($query))
{
case MYSQLND_MS_QUERY_USE_MASTER:
printf("'%s' should be run on the master.\n", $query);
break;
case MYSQLND_MS_QUERY_USE_SLAVE:
printf("'%s' should be run on a slave.\n", $query);
break;
case MYSQLND_MS_QUERY_USE_LAST_USED:
printf("'%s' should be run on the server that has run the previous query\n", $query);
break;
default:
printf("No suggestion where to run the '%s', fallback to master recommended\n", $query);
break;
}
}
is_select("INSERT INTO test(id) VALUES (1)");
is_select("SELECT 1 FROM DUAL");
is_select("/*" . MYSQLND_MS_LAST_USED_SWITCH . "*/SELECT 2 FROM DUAL");
?>
The above example will output:
INSERT INTO test(id) VALUES (1) should be run on the master.
Summary of Contents for 5.0
Page 1: ...MySQL 5 0 Reference Manual ...
Page 18: ...xviii ...
Page 60: ...40 ...
Page 396: ...376 ...
Page 578: ...558 ...
Page 636: ...616 ...
Page 844: ...824 ...
Page 1234: ...1214 ...
Page 1427: ...MySQL Proxy Scripting 1407 ...
Page 1734: ...1714 ...
Page 1752: ...1732 ...
Page 1783: ...Configuring Connector ODBC 1763 ...
Page 1793: ...Connector ODBC Examples 1773 ...
Page 1839: ...Connector Net Installation 1819 2 You must choose the type of installation to perform ...
Page 2850: ...2830 ...
Page 2854: ...2834 ...
Page 2928: ...2908 ...
Page 3000: ...2980 ...
Page 3122: ...3102 ...
Page 3126: ...3106 ...
Page 3174: ...3154 ...
Page 3232: ...3212 ...