Mysql Repliaction技术入门

Mysql Repliaction技术入门,第1张

概述介绍《Mysql Repliaction技术入门》开发教程,希望对您有用。

《MysqL Repliaction技术入门》要点:
本文介绍了MysqL Repliaction技术入门,希望对您有用。如果有疑问,可以联系我们。

什么是MysqL Replication?

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技术入门所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1158194.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存