《MysqL Repliaction技术入门》要点:
本文介绍了MysqL Repliaction技术入门,希望对您有用。如果有疑问,可以联系我们。
1、Replication可以实现将数据从一台数据库服务器(master)复制到一台到多台数据库服务器上(slave);
2、默认情况下,属于异步复制,所以无需维持长连接.
MysqL Replication的原理:简单来说,master将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志进行数据重演 *** 作,实现数据异步同步.
MysqL Replication的用途:
1、Fail Over 故障切换;
2、Backup 在线热备份(机械故障);
3、High Performance 高性能.
MysqL Replication的架构:
master ---> slave (双机热备).
默认情况下,master接受读写哀求,slave只接受读哀求以减轻master的压力.
复制过程如下:
1、slave端的IO线程连上master端,执行哀求;
2、master端返回给slave端,bin log文件名和位置信息;
3、IO线程把master端的bin log内容依次写到slave端relay bin log里,并把master端的bin-log文件名和位置记录到master.info里;
4、salve端的sql线程,检测到relay bin log中内容更新,就会解析relay log里更新的内容,并执行这些 *** 作.
复制流程
master ---> slave1 -----> slave2 (级联架构)
优点: 进一步分担读压力;
缺点: slave1 出现故障,后面的所有级联slave服务器都会同步失败.
slave1 <----/master (并联架构)\----> slave2
优点:办理上面的slave1的单点故障,同时也分担读压力;
缺点:间接增加master的压力(传输二进制日志压力).
master1 <------> master2 (互为主从).
优点:
从命名来看,两台master好像都能接受读、写哀求,但实际上,往往运作的过程中,同一时刻只有其中一台master会接受写哀求,另外一台接受读哀求.
实例:M—S架构:实现双机热备(AB复制)目标:
1、可以降低master读压力;
2、可以对数据库做“热备”,热备只能办理硬件master硬件故障,软件故障等重大故障问题,但无法办理人为误 *** 作导致的逻辑故障(例如输入错误的SQL语句把重要的记录删除了),所以常规的备份是必须.
环境准备及要求:
1、关闭防火墙和selinux;
2、hosts文件中两台服务器主机名和ip地址一一对应起来;
3、系统时间必要同步;
4、master和slave的数据库版本坚持一致(系统版本坚持一致);
5、master:10.1.1.1 slave:10.1.1.2;
6、此处说明,我本机master端是通过源码包安装的MysqL5.6.25版本,安装目录和数据目录都是自定义的,basedir=/MysqL25,datadir=/data/MysqL25.slave是直接从我本机master同步过去再初始化的,所以我当前环境是两台机上面版本一致的,数据库里面库和表也是一致的.
思路:
1、master必需开启二进制日志;
2、slave必需开启中继日志;
3、master和slave的server-ID必需不一致 2^23-1;
4、master和slave的初始数据一致.
具体步骤:
1、修改配置文件(master和slave);
master:
[MysqLd]
basedir=/MysqL25
datadir=/data/MysqL25
port=3307
socket=/MysqL25/MysqL.sock
log-bin=/var/lib/MysqL/MysqLd-bin --master必需开启二进制日志
server-ID=100 --MysqL数据库的编号,master和slave必需不一样
slave:
[MysqLd]
basedir=/MysqL25
datadir=/data/MysqL25
port=3307
socket=/MysqL25/MysqL.sock
log-bin=/MysqL56/MysqLd-bin --slave上的二进制日志可以开启也可以不开启,看具体情况
server-ID=200 --MysqL数据库的编号
relay-log=/MysqL56/relay-log --主从复制日志必要开启
2、初始化数据,使两边数据一致(以master为主);
此处省略,因为上面环境介绍那里已经说明了我的数据是一致的.
3、master端创建授权用户;
MysqL> grant replication slave on *.* to 'slave'@'10.1.1.%' IDentifIEd by '123';
MysqL> flush privileges;
4、查看master的正在写的二进制文件名和位置;
MysqL> flush tables with read lock; --先加锁,防止两边数据不一致;如果业务还未上线,这个就没有需要了
query OK,0 rows affected (0.00 sec)
MysqL> show master status; --只有打开二进制日志,这句命令才有结果,表现当前数据库的二进制日志写到什么位置
+------------------+----------+--------------+------------------+
| file | position | binlog_Do_DB | binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| MysqL-bin.000001 | 331 | | | --二进制文件名 正在写入的位置
+------------------+----------+--------------+------------------+
5、slave端设定复制信息;
MysqL> change master to
-> master_host='10.1.1.20',--master ip
-> master_user='slave',--同步用户(这里都是上面第三步创建的用户和授权暗码)
-> master_password='123',--暗码
-> master_port=3306,--端口
-> master_log_file='MysqLd-bin.000001',--master主上面查到到二进制日志名
-> master_log_pos=331; --主上面查到的位置号
6、启动复制线程,开始同步;
MysqL> start slave;
MysqL> show slave status G;
Slave_IO_Running: Yes --代表成功连接到master而且下载日志
Slave_sql_Running: Yes --代表成功执行日志中的SQL语句
--回到master端解锁:
MysqL> unlock tables;
query OK,0 rows affected (0.00 sec)
7、测试验证;
master写——>slave可以看到
slave写——>master看不到
在上述架构下实现故障迁移和恢复
故障迁移:
1、模拟master出现故障;
2、查看slave同步状态并停止向master同步数据:
slave > show slave status G;
Slave_IO_Running: Connecting
Slave_sql_Running: Yes
Last_IO_Error: error reconnecting to master 'slave@10.1.1.2:3307' - retry-time: 60 retrIEs: 1
MysqL> stop slave; --停止
3、master故障之后,前端的应用应该把读写哀求都调度给slave:
r/w
X |
master slave
直接用客户端登录slave,对数据进行修改,模拟写 *** 作:
MysqL> use db2;
MysqL> insert into t1 set ID=2;
MysqL> insert into t1 set ID=3;
MysqL> use db1;
MysqL> update t1 set @R_502_6889@='test' where ID=3;
故障修复:
可以肯定的是,在这个架构下,master要上线,肯定只有一个选择,便是作为原有slave的从,重新上线;
主 从
slave ---> master
情况:
假设数据已经损害了、丢失了,那么最简单的办法就是重装master数据库,把master作为slave的从,原来的slave就变成新架构的master.
注意:
确保新的架构复制成功之后,回到slave服务器,把数据目录下的master.info文件删除,不然的话,下次如果slave重启数据库服务,会自动连接master:slave IO线程把master端的bin log内容依次写到slave端relay bin log里,并把master端的bin-log文件名和位置记录到master.info里.
《MysqL Repliaction技术入门》是否对您有启发,欢迎查看更多与《MysqL Repliaction技术入门》相关教程,学精学透。内存溢出PHP学院为您提供精彩教程。
总结以上是内存溢出为你收集整理的Mysql Repliaction技术入门全部内容,希望文章能够帮你解决Mysql Repliaction技术入门所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)