您好,登錄后才能下訂單哦!
在 PHP 中實(shí)現(xiàn) MySQL 讀寫分離,可以采用以下幾種方法:
主從復(fù)制是一種通過將數(shù)據(jù)從一個(gè) MySQL 服務(wù)器(主服務(wù)器)復(fù)制到另一個(gè) MySQL 服務(wù)器(從服務(wù)器)的技術(shù)。你可以將讀操作分發(fā)到從服務(wù)器上,從而降低主服務(wù)器的負(fù)載。
步驟如下:
a. 配置主服務(wù)器(Master):
log-bin=mysql-bin
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
b. 配置從服務(wù)器(Slave):
server-id=1
relay-log=relay-bin
log-bin=mysql-bin
binlog-do-db=your_database_name
replicate-do-db=your_database_name
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
CHANGE MASTER TO
MASTER_HOST='master_ip_address',
MASTER_PORT=3306,
MASTER_USER='repl_user',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS= 107;
START SLAVE;
c. 在 PHP 代碼中實(shí)現(xiàn)讀寫分離:
$read_host = 'slave_ip_address';
$write_host = 'master_ip_address';
// 連接讀數(shù)據(jù)庫
$read_conn = new mysqli($read_host, 'username', 'password', 'database');
// 連接寫數(shù)據(jù)庫
$write_conn = new mysqli($write_host, 'username', 'password', 'database');
代理中間件如 ProxySQL 可以在應(yīng)用層實(shí)現(xiàn) MySQL 讀寫分離。它們通常提供負(fù)載均衡、故障轉(zhuǎn)移和連接池等功能。
a. 安裝并配置 ProxySQL:
b. 在 PHP 代碼中使用 ProxySQL 連接數(shù)據(jù)庫:
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=your_database_name;charset=utf8mb4";
$username = 'username';
$password = 'password';
$proxy = new ProxySQL();
$proxy->connect('localhost', 3306, $username, $password);
$proxy->set_read_timeout(5);
$proxy->set_write_timeout(5);
// 設(shè)置讀寫分離策略
$query_rules = [
['pattern' => '^SELECT', 'target' => 'read'],
['pattern' => '^INSERT|UPDATE|DELETE', 'target' => 'write'],
];
$proxy->add_query_rule($query_rules);
// 獲取連接
$conn = $proxy->get_connection();
這樣,你就可以在 PHP 代碼中使用配置好的主從服務(wù)器或代理中間件實(shí)現(xiàn) MySQL 讀寫分離了。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。