mysql 主从复制与读写分离

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41179401/article/details/86515378

一 主从复制

主从复制:如果仅仅从一台mysql数据库服务器进行数据的存取,如果网站用户多且数据量大时,无疑会对mysql数据库服务器造成巨大的压力,这是主从

复制的优势便体现出来了。

原理:

1:主服务器凡运行语句,都产生一个二进制日志 binlog
 
2:从服务器不断读取主服务器的binlog
 
3:从主服务读取到的binlog,转换为自身可执行的relaylog,
 
4:执行relaylog实现数据同步

实现步骤

1 主服务器 编辑mysql配置文件 vi /etc/my.cnf

log_bin = mysql-bin;   //开启二进制日志功能
 
binlog_format = mixed; //statement:磁盘变化是记录;row:sql语句时记录;mixed:自动判断
 
server_id = 1;           //给服务器一个id

2 从服务器 编辑mysql配置文件 

relay_log = relay-log;
 
server_id = 2

3 主服务器创建授权账号

GRANT REPLICATION CLIENT , GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.10.131' identified by ‘password’;

4 从服务器获取权限连接

change master to
 
master_host=’192.168.10.130’,  //主服务器的主机地址
 
master_user=’rep1’,            //主服务器配置的账号
  
master_password=’password’,    //主服务器配置的密码
 
master_log_file=’mysql-bin.000005’,  //这里及下面的值需要在主服务器里使用 show master status 查看
 
master_log_pos=261;

PS 后面的两项需要在主服务器使用命令 show master status查看

show master status

5 启动slave服务器

start slave

如果启动失败或配置写错,可以使用命令 restart slave重新配置

restart slave

PS : 可以使用show slave status查看从服务器

二 读写分离

如果只是单纯的一台master和一台slave:

在程序里所有的写操作(insert , update , delete)选择连接master,所有的读操作(select)选择连接slave,即可完成即可分离。

但是如果master和slave多了显然程序变得复杂了,可以采用 mysql-proxy 具体用法参照相关文档

三 主主复制

两台mysql服务器既是master又是slave,配置起来也很简单,及配置master有配置slave,互相配置授权账号,都开启log_bin和binlog_format和

relay_log (解决主键冲突的问题)

猜你喜欢

转载自blog.csdn.net/qq_41179401/article/details/86515378