?
?
?
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原理三者只能选其二
????? 如果做读写分离,程序员控制哪个数据源读,那个数据源写,风险比较大
????? 将来会有数据切分及整合的中间件来处理这个事。
?
?
?
?
?