Write By CS 逍遥剑仙
我的主页: http://www.csxiaoyao.com/
- GitHub: https://GitHub.com/csxiaoyaojianxian
- Email: sunjianfeng@csxiaoyao.com
- QQ: 1724338257
架构层的优化大致有: 分布式部署 (集群)(主从复制, 读写分离)
1. 主从复制
1.1 概述
数据库服务器压力增大, 增加多台 MySQL 数据库服务器, 需要建立主从复制机制保证数据一致同步.
主服务器写, 从服务器读, 从服务器去主服务器复制 / 同步数据
主从复制适用范围:
(1) 主从复制后, 可以用作后面业务的一个读写分离需求
(2) 从服务器作为主服务器的备份服务器
PHP 业务实现读写分离
写读比例 1/7, 一般一个写服务器, 多个读从服务器
1.2 主服务器配置
主服务器 server-id:1
Step1: 修改配置文件
主从复制会根据日志记录的位置来进行同步, my-bin.log
- $ VIM /etc/my.conf
- log-bin=MySQL-bin #开启二进制日志文件
- binlog_format=mixed #日志文件存储方式
- server-id=1 #服务器识别 id
- # 启动 MySQL 服务
- $ /usr/local/MySQL/bin/mysqld_safe -user=MySQL &
Step2: 创建同步账号
- # 登录
- $ /usr/local/MySQL/bin/MySQL -uroot -p
- # 在主服务器创建同步账号 slave(123456) 以便从服务器同步主服务器数据
- MySQL> grant replication slave on *.* to 'slave'@'%' identified by '123456';
- MySQL> flush privileges;
Step3: 创建远程登录账号
一般 root 用户权限太高, 只设置为允许本地登录, 所以再创建一个用户进行远程登录
- MySQL> grant all on *.* to 'API'@'%' identified by '123456';
- MySQL> flush privileges;
Step4: 在主服务器查看日志文件名称和记录位置
用于从服务器配置
MySQL> show master status;
1.3 从服务器配置
从服务器 server-id:2
Step1: 修改配置文件
- $ VIM /etc/my.conf
- log-bin=MySQL-bin #开启二进制日志文件
- binlog_format=mixed #日志文件存储方式
- server-id=2 #服务器识别 id
- # 启动 MySQL 服务
- $ /usr/local/MySQL/bin/mysqld_safe -user=MySQL &
Step2: 创建用户
- # 登录
- $ /usr/local/MySQL/bin/MySQL -uroot -p
- MySQL> grant all on *.* to 'API'@'%' identified by '123456';
- MySQL> flush privileges;
Step3: 配置 slave 服务
master_log_file 和 master_log_pos 在主服务器通过 show master status 查看
- # 在从服务器将 slave 同步服务关闭
- MySQL> slave stop;
- # 配置
- MySQL> change master to master_host="192.168.0.1", master_user="slave", master_password="123456", master_log_file="MySQL-bin.000001", master_log_pos=100;
- # 启动
- MySQL> slave start;
Step4: 在从服务器查看当前从服务器状态
MySQL> show slave status\G;
如果看到 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 说明配置成功
在主服务器进行写操作, 查看从服务器是否更新数据判断实际是否配置成功
2. 读写分离
- $con_write = mysql_connect('192.168.0.1','API','123456');
- $con_read = mysql_connect('192.168.0.2','API','123456');
然后在 SQL 中判断读写即可.
来源: https://www.qcloud.com/developer/article/1352201