下面讲讲关于什么是MYSQL的AB复制原理,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完什么是MysqL的AB复制原理这篇文章你一定会有所受益。
Myslq AB复制
做AB复制之前前提时两边的数据必须一样,MysqL复制默认的是异步复制,master将事物事件写入binlog,但不知道slave何时接受且已接受,在异步复制的机制的情况下,如果master宕机,事务在master上已提交,但很可能这些事物没有传到任何slave上。此时salve有可能丢失事务。
官方半同步的复制的概念:
1 当slave主机连接到master时。能够查看是否处于半同步复制的机制。
2 当master上开启半同步复制的功能时,至少应该有一个slave开启其功能。
3 .当一个事务的事件都已写入其relay-log中且已刷新到磁盘上,Slave才会告知已收到
同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕。缺点:完成一个事务可能会有很大的延迟。
异步复制:当Slave准备好才会向Master请求binlog。缺点:不能保证一些事件都能够被所有的Slave所接收。
半同步复制:半同步复制工作的机制处于同步和异步之间,Master的事务提交阻塞,只要一个Slave已收到该事务的事件且已记录。它不会等待所有的Slave都告知已收到,且它只是接收,并不用等其完全执行且提交
实验 server2 :master
Server3 :slave
MysqL-5.1.71版本
[root@server2 ~]# yum install MysqL-server -y
[root@server3~]# yum install MysqL-server -y
[root@server2 ~]# /etc/init.d/MysqLd start
[root@server2 ~]# vim /etc/my.cnf
8 log-bin=MysqL-bin 启动二进制日志
9 binlog-do-db=westos 二进制日志同步的数据库名称
10 server-id=1 必须是1到2^32-1之间的一个正整数数
[root@server2 ~]# /etc/init.d/MysqLd restart 在重启服务的过程中如果失败,要去/var/log/MysqL.log查看原因,一般来说都是上面修改的配置文件错了,如果不是在看其他原因,时在不行据删除/var/lib/MysqL 里面的文件,然后初始化重启。
[root@server2 MysqL]# MysqL_secure_installation 修改密码
[root@server2 MysqL]# MysqL -pwestos
Welcome to the MysqL monitor. Commands end with ; or \g.
Your MysqL connection id is 11
Server version: 5.1.71-log Source distribution
copyright (c) 2000, 2013, Oracle and/or its affiliates. Allrights reserved.
Oracle is a registered Trademark of Oracle Corporation and/orits
affiliates. Other names may be Trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.
MysqL> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MysqL |
+--------------------+
2 rows in set (0.00 sec)
MysqL> create database weCtrl-C -- exit!
Aborted
[root@server2 MysqL]# MysqL -pwestos
Welcome to the MysqL monitor. Commands end with ; or \g.
Your MysqL connection id is 12
Server version: 5.1.71-log Source distribution
copyright (c) 2000, 2013, Oracle and/or its affiliates. Allrights reserved.
Oracle is a registered Trademark of Oracle Corporation and/orits
affiliates. Other names may be Trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.
MysqL> show master status; 查看master状态
+------------------+----------+--------------+------------------+
| File |Position | binlog_Do_DB | binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| MysqL-bin.000001 | 737 | westos | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
MysqL> create database westos; 创建一个共享的库
Query OK, 1 row affected (0.00 sec)
MysqL> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MysqL |
| westos |
+--------------------+
3 rows in set (0.00 sec)
MysqL> grant replication slave on *.* tolinux@'172.25.137.3'identified by 'redhat';
Query OK, 0 rows affected (0.00 sec) 授权个slave
MysqL> Bye
里面有MysqL-bin.00000x二进制文件,记录的是堆数据库所有的操作,在对数据库进行备份的时候要用到这个文件。
[root@server2 MysqL]# MysqLbinlog MysqL-bin.000001 通过MysqLbinglog 来查看里面的内容。
[root@server3 ~]# vim /etc/my.cnf
8 server-id=2
[root@server3 ~]# /etc/init.d/MysqLd restart
[root@server3 ~]# MysqL
Welcome to the MysqL monitor. Commands end with ; or \g.
Your MysqL connection id is 2
Server version: 5.1.71 Source distribution
copyright (c) 2000, 2013, Oracle and/or its affiliates. Allrights reserved.
Oracle is a registered Trademark of Oracle Corporation and/orits
affiliates. Other names may be Trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.
MysqL> show
-> ;
ERROR 1064 (42000): You have an error in your sql Syntax; checkthe manual that corresponds to your MysqL server version for the right Syntaxto use near '' at line 1
MysqL> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MysqL |
| test |
+--------------------+
3 rows in set (0.00 sec)
MysqL> create database westos;
Query OK, 1 row affected (0.00 sec)
MysqL> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MysqL |
| test |
| westos |
+--------------------+
4 rows in set (0.00 sec)
MysqL> show slave stauts;
ERROR 1064 (42000): You have an error in your sql Syntax; checkthe manual that corresponds to your MysqL server version for the right Syntaxto use near 'stauts' at line 1
MysqL> show slave status;
Empty set (0.00 sec)
MysqL> change master tomaster_host='172.25.137.2',master_user='linux',master_password='redhat',master_log_file='MysqL-bin.000001',master_log_pos=975;
Query OK, 0 rows affected (0.81 sec)
MysqL> start slave;
Query OK, 0 rows affected (0.00 sec)
MysqL> show slave status\G; Slave_IO_Running,Slave_sql_Running: 这两个的状态都是yes说明状态良好。Slave_IO_Running如果这个是no可能是写有问题,一般看看防火墙是否关闭,selinux是否为disabled
在master端加入表信息:
MysqL> createtable student(username varchar(12) not null, number varchar(12) not null);
MysqL> insertinto values('dog','111');
MysqL> select *from student;
+----------+--------+
| username | number|
+----------+--------+
| dog | 111 |
+----------+--------+
1 row in set (0.00sec)
在slave端
MysqL> usewestos;
MysqL> select *from student;
+----------+--------+
| username | number|
+----------+--------+
| dog | 111 |
+----------+--------+
1 row in set (0.00sec)
这里面记录了master端的信息
MysqL-bin.000001 slave端的复制二进制文件就来自master的这个文件。
[root@server2MysqL]# MysqLbinlog MysqL-bin.000001 查看对数据库的操作。
MysqLABC 复制
A B C
Mastermaster slave slave
B的数据来自master,C的数据来自B所以对B而言既是master又是slave,但是BC只做读操作,不执行写,只有A执行写。
实验 server2 :master
Server3 :slave
Server4:slave
[root@server4 ~]#yum install MysqL-server -y
[root@server3MysqL]# /etc/init.d/MysqLd stop
[root@server3MysqL]# vim /etc/my.cnf
[root@server3 MysqL]# /etc/init.d/MysqLd restart
[root@server4 ~]# vim /etc/my.cnf
在MysqLd里加
[root@server4 ~]#/etc/init.d/MysqLd start
Server3:
MysqL> grantreplication slave on *.* to linux@'172.25.137.4' identified by 'redhat';
Query OK, 0 rowsaffected (0.00 sec) 给server4授权
[root@server4 ~]#MysqL -h 172.25.137.3 -u linux -predhat 测试是否能连通server3
Server4 要向数据能同时存在,就必须给的环境一样,在实验中同一个westos的库里的数据一致就必须现有这个库。
change master tomaster_host='172.25.137.3',master_user='linux',master_password='redhat',master_log_file='MysqL-bin.000005',master_log_pos=106; 与server3同步。
[root@server2MysqL]# MysqLbinlog MysqL-bin.000001 在这个文件里找到在westos数据库建表的那个命令,
975是指开始建表的数值,1120是这条命令结束的数值
还有一种是用时间找
[root@server2MysqL]# MysqLbinlog --start-position=975 --stop-position=1224 MysqL-bin.000001|less 这是通过数值查找master的wesos数据库相关操作
[root@server2MysqL]# MysqLbinlog--start-datetime='2016-07-30 13:53:26' --stop-datetime='2016-07-30 13:55:10'MysqL-bin.000001 |less 这是通过时间来查找master的wesos数据库相关操作。
[root@server2MysqL]#scp MysqL-bin.000001 172.25.137.4:/mnt 把master这个二进制文件发送给slave。
[root@server2MysqL]# MysqLdump -pwestos westos > backup.sql 把westos这个库备份到backup.sql文件。
[root@server4 mnt]#ls
MysqL-bin.000001
[root@server4 mnt]#MysqLbinlog --start-position=975 --stop-position=1224 MysqL-bin.000001|MysqL 把这个二进制文件倒入到westos这个库,使三个westos数据库在一个环境下。
在master的westos数据库上操作。
MysqL备份方式:
冷备:需要关闭服务,且读写请求不允许。
热备:服务正常,备份不影响。
-
温备:服务正常,但是只允许读不允许写。
:MysqLdump 单线程,缓慢
-
:mydumpe 多线程,最小限度每张表可以绑多个线程
对于以上什么是MysqL的AB复制原理相关内容,大家还有什么不明白的地方吗?或者想要了解更多相关,可以继续关注我们的行业资讯板块。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。