mysql - Replication
一种比较简单的架构 Master/Slave
slave会从master读取binlog 来进行数据同步
一、典型的Replication复制架构
1.master-slaves
大部分是这样的应用,特别适合读多写少的场景,一些互联网的应用都这样搭建。
一个master多个slave,配置类似。master不知道有多少个slave,只做连接认证,
根据slave的IO线程信息返回给slave io线程
2.DualMaster(用的比较少)
互为Master/Slave
3. master-slave-slave-slave
二、master/slave的一个搭建
搭建的时候两台机器(最好是真实两台机器,环境类似)
master而言
----->server-id = 1;
----->logbin打开
-------------------其它一些细致的参数根据具体情况而定--------------
----->binlog-ignore-db=mysql不要复制的数据库
----->binlog-do-db=test要复制的数据库等等
这些参数一定要放在[mysqld]结点下,都是小写
reset master;
show variables like '%server%';
授权 远程的访问---> 虚拟机下可以访问
GRANT REPLICATION SLAVE ON *.* TO ' zhangsan'@'192.168.154.128' IDENTIFIED BY 'zhangsan';
slave 端,在虚拟机中配置的
关闭虚拟机linux防火墙 service iptables stop
my.cnf
server-id = 2;
master-host=192.168.1.101
master-user=zhangsan
master-password=zhangsan
replication-do-db=test
master-port=3306
关闭服务 service mysql stop;
service mysql start;
如果启动不了有错误可以通过mysql_install_db --user=mysql
可能有版本报master-host变量不认识
mysql有些版本不识别master-host参数,如果识别不用管。
如果不识别解决方案
只配置server-id
和replication-do-db 及其它跟复制内容相关的参数。
重启启动service mysql start
mysql -uroot -proot
slave stop;
change master to master_host='192.168.1.101', master_user='zhangsan', master_password='zhangsan', master_log_file='mysqlbin.000001', master_log_pos=0;
slave start;
三、复制的缺陷
slave端异步线程完成logbin读取数据同步操作
会有延迟,数据并不是实时同步的。
四、读写分离
master进行写操作,slave进行读操作
slave不能进行写操作,否则master/slave不同步
slave未必直接能读到最新的数据
----->权衡CAP原理三者只能选其二
如果做读写分离,程序员控制哪个数据源读,那个数据源写,风险比较大
将来会有数据切分及整合的中间件来处理这个事。