一 主从复制
主从复制:如果仅仅从一台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 (解决主键冲突的问题)