在CentOS上實現MySQL的讀寫分離,通常需要以下幾個步驟:
主從復制配置:
配置讀寫分離器:
應用層配置:
下面是一個簡單的示例,使用ProxySQL作為讀寫分離器:
編輯/etc/my.cnf或/etc/mysql/my.cnf文件,添加以下配置:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=your_database_name
重啟MySQL服務:
systemctl restart mysqld
創建一個用于復制的用戶:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
查看主服務器的狀態:
SHOW MASTER STATUS;
記下File和Position的值。
編輯/etc/my.cnf或/etc/mysql/my.cnf文件,添加以下配置:
[mysqld]
server-id=2
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1
binlog-do-db=your_database_name
重啟MySQL服務:
systemctl restart mysqld
配置從服務器連接到主服務器:
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=123;
START SLAVE;
查看從服務器的狀態:
SHOW SLAVE STATUS\G
確保Slave_IO_Running和Slave_SQL_Running都是Yes。
安裝ProxySQL:
yum install proxysql
啟動ProxySQL服務:
systemctl start proxysql
配置ProxySQL:
編輯/etc/proxysql.cnf文件,添加以下配置:
[mysql_servers]
master = {host = "master_ip", port = 3306}
slave = {host = "slave_ip", port = 3306}
[mysql_query_rules]
rule1 = {id = 1, active = 1, match_pattern = "^SELECT", destination_hostgroup = "slaves", apply = ""}
[mysql_users]
admin = {password = "admin_password"}
[mysql_hostgroups]
slaves = {hostname = "slave_ip", port = 3306}
重啟ProxySQL服務:
systemctl restart proxysql
修改應用程序的數據庫連接字符串,使其指向ProxySQL:
# 示例Python代碼
import pymysql
config = {
'user': 'admin',
'password': 'admin_password',
'host': '127.0.0.1',
'port': 6032,
'db': 'your_database_name',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor
}
connection = pymysql.connect(**config)
通過以上步驟,你就可以在CentOS上實現MySQL的讀寫分離。請根據實際情況調整配置文件中的IP地址、端口、用戶名和密碼等信息。