asp网站数据库扫描,网站seo外链怎么做,房地产企业网站模板免费下载,网站建设中什么意思bitsCN.com原理#xff1a;MySQL的Replication是一种多个MySQL的数据库做主从同步的方案#xff0c;特点是异步#xff0c;广泛用在各种对MySQL有更高性能#xff0c;更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster#xff0c;但因为比较复杂#xff…bitsCN.com原理MySQL的Replication是一种多个MySQL的数据库做主从同步的方案特点是异步广泛用在各种对MySQL有更高性能更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster但因为比较复杂使用者较少。下图是MySQL官方给出了使用Replication的场景Replication原理Mysql 的 Replication 是一个异步的复制过程从一个MySQL节点(称之为Master)复制到另一个MySQL节点(称之Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成其中两个线程(SQL 线程和 I/O 线程)在 Slave 端另外一个线程(I/O 线程)在 Master 端。要实现 MySQL 的 Replication 首先必须打开 Master 端的 Binary Log因为整个复制过程实际上就是 Slave 从 Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。看上去MySQL的Replication原理非常简单总结一下* 每个从仅可以设置一个主。* 主在执行sql之后记录二进制log文件(bin-log)。* 从连接主并从主获取binlog存于本地relay-log并从上次记住的位置起执行sql一旦遇到错误则停止同步。从这几条Replication原理来看可以有这些推论* 主从间的数据库不是实时同步就算网络连接正常也存在瞬间主从数据不一致。* 如果主从的网络断开从会在网络正常后批量同步。* 如果对从进行修改数据那么很可能从在执行主的bin-log时出现错误而停止同步这个是很危险的操作。所以一般情况下非常小心的修改从上的数据。* 一个衍生的配置是双主互为主从配置只要双方的修改不冲突可以工作良好。* 如果需要多主的话可以用环形配置这样任意一个节点的修改都可以同步到所有节点。主从设置因为原理比较简单所以Replication从MySQL 3就支持并在所有平台下可以工作多个MySQL节点甚至可以不同平台不同版本不同局域网。做Replication配置包括用户和my.ini(linux下为my.cnf)两处设置。首先在主MySQL节点上为slave创建一个用户GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave192.168.1.10 IDENTIFIED BY slave;实际上为支持主从动态同步或者手动切换一般都是在所有主从节点上创建好这个用户。然后就是MySQL本身的配置了这需要修改my.cnf或者my.ini文件。在mysqld这一节下面增加server-id1auto-increment-increment2auto-increment-offset1log-binbinlog-do-dbmstestbinlog_formatmixedmaster-host192.168.1.62master-userslavemaster-passwordslavereplicate-do-dbmstest上面这两段设置前一段是为主而设置后一段是为从设置的。也就是说在两个MySQL节点上各加一段就好。binlog-do-db和 replicate-do-db就是设置相应的需要做同步的数据库了auto-increment-increment和auto- increment-offset是为了支持双主而设置的(参考下一节)在只做主从的时候也可以不设置。双主的设置从原理论来看MySQL也支持双主的设置即两个MySQL节点互为主备不过虽然理论上双主只要数据不冲突就可以工作的很好但实际情况中还是很容发生数据冲突的比如在同步完成之前双方都修改同一条记录。因此在实际中最好不要让两边同时修改。即逻辑上仍按照主从的方式工作。但双主的设置仍然是有意义的因为这样做之后切换主备会变的很简单。因为在出现故障后如果之前配置了双主则直接切换主备会很容易。双主在设置时只需将上面的一段设置复制一份分别写入两个MySQL节点的配置文件但要修改相应的server-idauto- increment-offset和master-host。auto-increment-offset就是为了让双主同时在一张表中进行添加操作时不会出现id冲突所以在两个节点上auto-increment-offset设置为不同的值就好。 另不要忘了在两个节点上都为对方创建用户。 应用层的负载均衡 本文只介绍了MySQL自身的Repilication配置在上面的图中也可以看出有了Replication还需要应用层(或者中间件)做一个负载均衡这样才能最大程度发挥MySQL Replication的优势这些将在以后探讨。环形解决多台写服务器主自增长ID重复问题二台Mysql服务器他们的IP地址分别为A192.168.0.97B192.168.0.98数据库都是 test_3306首先我给两台服务器的my.ini 贴出来Amy.iniserver-id2master-host192.168.0.98master-usermydbmaster-password123master-port3306master-connect-retry1replicate-do-dbtbqulog-binlog-slave-updatesbinlog-ignore-dbmysqlslave-skip-errorsallB:my.iniserver-id1master-host192.168.0.97master-usermydbmaster-password123master-port3306master-connect-retry1replicate-do-dbtbqulog-binlog-slave-updatesbinlog-ignore-dbmysqlslave-skip-errorsall在这里配置文件和主从配置方法基本上一样log-slave-updates 这个参数一定要加上否则不会给更新的记录些到二进制文件里slave-skip-errors 是跳过错误继续执行复制操作其他参数请参照 http://www.tbqu.com/post/15.html多主互备和主从复制有一些区别因为多主中 都可以对服务器有写权限所以设计到自增长重复问题出现的问题(多主自增长ID重复)1:首先我们通过A,B的test表结构2:掉A在B上对数据表test(存在自增长ID)执行插入操作返回插入ID为13:后停掉B在A上对数据表test(存在自增长ID)执行插入操作返回的插入ID也是14:然后 我们同时启动A,B就会出现主键ID重复解决方法我们只要保证两台服务器上插入的自增长数据不同就可以了如A查奇数IDB插偶数ID当然如果服务器多的话你可以定义算法只要不同就可以了在这里我们在A,B上加入参数以实现奇偶插入Amy.ini上加入参数auto_increment_offset 1auto_increment_increment 2这样A的auto_increment字段产生的数值是1, 3, 5, 7, …等奇数ID了Bmy.ini上加入参数auto_increment_offset 2auto_increment_increment 2这样B的auto_increment字段产生的数值是2, 4, 6, 8, …等偶数ID了可以看出你的auto_increment字段在不同的服务器之间绝对不会重复所以Master-Master结构就没有任何问题了。当然你还可以使用3台4台或者N台服务器只要保证auto_increment_increment N 再设置一下auto_increment_offset为适当的初始值就可以了那样我们的MySQL可以同时有几十台主服务器而不会出现自增长ID 重复。在这里我们说的是2台MYSQL服务器你也可以扩展到多台实现方法类似A - B - C- D -A这样一个环形的备份结构就形成了最后可要记住 自增长ID(主键)要设计好哦否则会出错的。————————————————————————————————————————–假定有三台Mysql服务器他们的IP地址分别为192.168.1.8192.168.1.88192.168.1.188在192.168.1.8的安装目录下找到my.ini文件在该文件的最后加上server-id1log-bin#asyntest1是我用来试验的数据库名称到时候要换成你的数据库名字binlog-do-dbasyntest1#下面这句话很重要只有加上它从前一台机器上同步过来的数据才能同步到下一台机器log-slave-updatesmaster-host192.168.1.188master-userroot#在此处填入192.168.1.188的root密码master-passwordXXXXX#asyntest1是我用来试验的数据库名称到时候要换成你的数据库名字replicate-do-dbasyntest1master-connect-retry10#出现错误后忽略如果不加这个出现任何错误同步进程会终止slave-skip-errorsall在192.168.1.88的安装目录下找到my.ini文件在该文件的最后加上server-id2log-bin#asyntest1是我用来试验的数据库名称到时候要换成你的数据库名字binlog-do-dbasyntest1#下面这句话很重要只有加上它从前一台机器上同步过来的数据才能同步到下一台机器log-slave-updatesmaster-host192.168.1.8master-userroot#在此处填入192.168.1.8的root密码master-passwordXXXXX#asyntest1是我用来试验的数据库名称到时候要换成你的数据库名字replicate-do-dbasyntest1master-connect-retry10#出现错误后忽略如果不加这个出现任何错误同步进程会终止slave-skip-errorsall在192.168.1.188的安装目录下找到my.ini文件在该文件的最后加上server-id3log-bin#asyntest1是我用来试验的数据库名称到时候要换成你的数据库名字binlog-do-dbasyntest1#下面这句话很重要只有加上它从前一台机器上同步过来的数据才能同步到下一台机器log-slave-updatesmaster-host192.168.1.88master-userroot#在此处填入192.168.1.88的root密码master-passwordXXXXX#asyntest1是我用来试验的数据库名称到时候要换成你的数据库名字replicate-do-dbasyntest1master-connect-retry10#出现错误后忽略如果不加这个出现任何错误同步进程会终止slave-skip-errorsall在192.168.1.8, 192.168.1.88, 192.168.1.188上建立完全一样的数据库asyntest1,重启这三台数据库然后在任何一台机器上进行的更新操作都会同步到另外的两台机 器上这是一种环形同步在192.168.1.8有任何修改会首先同步到192.168.1.88的机器上88的机器再将同步的数据同步到 192.168.1.188的机器上。同样如果在192.168.1.88上有任何更新首先会同步到192.168.1.188的机器上然后再同步 到192.168.1.8的机器上而在192.168.1.188的机器上有任何更新首先会同步到192.168.1.8的机器上然后在同步到 192.168.1.88的机器上。利用这种原理可以解决任意多台机器的互相同步问题。如果出现问题首先请在每一台服务器上用命令行通过telnet命令检查其他机器3306端口的连通情况。另外请检查各机器的防火墙设置和杀毒软件的配置。可将这些软件暂停后进行试验。bitsCN.com本条技术文章来源于互联网如果无意侵犯您的权益请点击此处反馈版权投诉本文系统来源php中文网TAG标签mysql多