-- 创建复制专用用户 CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Repl21..'; -- 赋予复制权限 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
SHOW DATABASES; -- 看看有没有 test_db USE test_db; SELECT * FROM user; -- 看看有没有 'polish'
四、读写分离
实现读写分离有多种方式,代码层、中间件层.
这里使用 ProxySQL
4.1 架构图
flowchart LR
subgraph Frontend [前端层]
A[Web/App Server 前端应用]
end
subgraph ProxyLayer [读写分离层]
B[ProxySQL / Mycat 云数据库代理]
end
subgraph DBLayer [MySQL数据库层]
C[(Master 主库-写)]
D[(Slave1 从库-读)]
E[(Slave2 从库-读)]
end
A --> B
B -->|写操作| C
B -->|读操作| D
B -->|读操作| E
C -->|主从复制| D
C -->|主从复制| E
mysql -u admin -padmin -h 127.0.0.1 -P 6032 --prompt='ProxySQLAdmin> '
4.4 环境准备
注意: mysql8需要注意,使用之前的密码方式。
**Master(mysql101)**上创建监控用户,业务数据库,业务数据库
1
mysql -uroot -p'Root21..'
创建监控用户(可根据业务需要最小授权)
1 2
CREATE USER 'monitor'@'%' IDENTIFIED WITH mysql_native_password BY 'Monitor21..'; GRANT REPLICATION CLIENT ON *.* TO 'monitor'@'%';
1
ALTER USER 'monitor'@'%' IDENTIFIED WITH mysql_native_password BY 'Monitor21..';
创建业务数据库,以 my_blog_db 为例
1
CREATE DATABASE my_blog_db;
创建业务用户并授权,以 blog 为例
1 2
CREATE USER 'blog'@'%' IDENTIFIED WITH mysql_native_password BY 'Blog21..'; GRANT ALL PRIVILEGES ON my_blog_db.* TO 'blog'@'%';
1
ALTER USER 'blog'@'%' IDENTIFIED WITH mysql_native_password BY 'Blog21..';
刷新权限
1
FLUSH PRIVILEGES;
4.5 配置 ProxySQL
需要管理口配置,6032
1
mysql -u admin -padmin -h 127.0.0.1 -P 6032 --prompt='ProxySQLAdmin> '
添加上游的数据库,读、写划分不同的组
1
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, '192.168.10.101', 3306);
1 2
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, '192.168.10.102', 3306); INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, '192.168.10.103', 3306);
1 2
LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;
修改监控用户密码(因为默认就存在,无需创建)
1 2 3 4 5
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username'; UPDATE global_variables SET variable_value='Monitor21..' WHERE variable_name='mysql-monitor_password';
LOAD MYSQL VARIABLES TO RUNTIME; SAVE MYSQL VARIABLES TO DISK;