MySQL读写分离有好几种方式 MySQL中间件 MySQL驱动层 代码控制
关于 中间件 和 驱动层的方式这里不做深究 暂且简单介绍下 如何通过PHP代码来控制MySQL读写分离
我们都知道 “读” 在SQL语句里是 “SELECT”, ”写” 是 “INSERT”
那么我们第一时间就应该想到 字符串截取 substr() 这个函数
首先我们通过substr()函数来获取到 sql语句的前6个字符是否为 “SELECT” 如果是我们连接读服务器进行处理 如果不是 我们连接写服务器进行处理
思路有了 那么就是代码了
1 $querystr = strtolower(trim(substr($sql,0,6))); //截取SQL语句字符串 2 3 //如果是select,就连接slave(从)服务器 4 if($querystr == 'select') 5 { 6 $slave_server='192.168.80.3::3306'; 7 $dsn="mysql:host=$slave_server;dbname=3d"; 8 $user='root'; 9 $pass='root'; 10 $dbh=new PDO($dsn, $user, $pass); 11 $res=$dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC); 12 } 13 //如果不是select,就连接master(主)服务器 14 else 15 { 16 $master_server='192.168.33.22::3306'; 17 $dsn="mysql:host=$master_server;dbname=3dprintsys"; 18 $user='root'; 19 $pass='123456'; 20 $dbh=new PDO($dsn, $user, $pass); 21 $res=$dbh->exec($sql); 22 }