在Node.js项目中实现读写MySQL副本的DB查询,通常涉及到数据库的主从复制架构。以下是实现这一目标的正确方法:
以下是一个使用mysql2
库在Node.js中实现读写分离的基本示例:
const mysql = require('mysql2/promise');
// 创建主库连接池
const masterPool = mysql.createPool({
host: 'master_host',
user: 'master_user',
password: 'master_password',
database: 'your_database',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
// 创建从库连接池
const slavePools = [
mysql.createPool({
host: 'slave1_host',
user: 'slave_user',
password: 'slave_password',
database: 'your_database',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
}),
mysql.createPool({
host: 'slave2_host',
user: 'slave_user',
password: 'slave_password',
database: 'your_database',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
})
];
async function query(sql, values) {
if (sql.trim().toLowerCase().startsWith('select')) {
// 随机选择一个从库进行查询
const pool = slavePools[Math.floor(Math.random() * slavePools.length)];
return await pool.execute(sql, values);
} else {
// 写操作使用主库
return await masterPool.execute(sql, values);
}
}
// 使用示例
(async () => {
try {
const [results] = await query('SELECT * FROM users WHERE id = ?', [1]);
console.log(results);
await query('UPDATE users SET name = ? WHERE id = ?', ['newName', 1]);
console.log('Update successful');
} catch (error) {
console.error('Database error:', error);
}
})();
通过上述方法,可以在Node.js项目中有效地实现MySQL的读写分离,提升系统的性能和可靠性。
领取专属 10元无门槛券
手把手带您无忧上云