设为首页 收藏本站
查看: 536|回复: 0

[经验分享] Mysql的ab复制

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-6-28 08:58:34 | 显示全部楼层 |阅读模式
    mysql复制在业界里有叫:mysql同步,ab复制等。专业名称就是叫:复制。复制是单向的异步复制,从一个Mysql(Master)复制到另一个Mysql(Slave)。实现整个主从复制,需要由Master服务器上的IO进程,和Salve服务器上的Sql进程和IO进程共同完成。

        要实现主从复制,首先必须打开Master端的二进制日志(bin-log)功能,因为整个Mysql复制过程实际上就是Slave从Master端获取相应的二进制日志文件,然后在根据相应的Position号在自己Slave端完全的执行日志中所记录的各种操作,(二进制日志文件是用sql语句写成的所以可以直接在Slave机上直接执行)。

        主从复制的基本过程如下:

        1、Mysql Slave端的IO进程链接上Master,向Master请求指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

        2、Master接受来自Slave的IO进程的请求后,负责复制的IO进程根据Slave的请求信息,读取相应日志内容,返回给Slave 的IO进程。并将本次请求读取的bin-log文件名及位置一起返回给Slave端。

        3、Slave的IO进程接受到信息后,将接受到的日志内容写入relay-log文件中,并将读取到的Master端的二进制日志文件名后Position号记录在Master-info文件中,下次根据记录的日志文件名和Position号从Master上继续复制。以确保数据的一致性。

        4、Slave的Sql进程检测到relay-log中新增加的内容后,会马上解析relay-log的内容,并在自身执行。

        这种传统的复制方法由于在Master端是多线程写入的,而在Slave端是单线程的复制,往往会造成很高的延迟,同时在配置的时候需要找到binlog和pos点,然后change master to指向,不是很有经验的运维,往往会找错,造成主从同步复制报错。而从Mysql5.6开始支持的gtid模式的主从复制从而很大程度上解决了这些问题。

        TID:Transaction ID,事务的ID号:也就是说在mysql复制中每一个事务都有自己的ID号(随机数)

        GTID:Global Transaction ID,全局事务ID,在整个事务架构中每一个事务ID号是全局唯一的,不止是在一个节点上而是整个主从复制架构中每任何两个事务的ID号都不会相同。是mysql对写入二进制日志的每个事务所作的标记。由server_uuid和事务id组成。

        简单来讲GTID能够保证让一个从服务器到其他的从服务器那里实现数据复制而且能够实现数据整合的。一个事务对应一个唯一ID,一个GTID在一个服务器上只会执行一次,相对于行复制来讲数据安全性更高,故障切换更简单。

        GTID也有它的限制,不支持非事务引擎;不支持create table … select 语句复制;不允许在一个SQL同时更新一个事务引擎和非事务引擎的表; 在一个复制组中,必须要求统一开启CTID或是关闭GTID,开启DTID后,就不在使用原来的传统的复制方式,对于createtemporary table 和drop temporary table语句不支持,不支持sqlslaveskip_counter。

        Mysql是默认是异步复制、Master在将事件写入binlon时不知道Slave是否已经接受,此时Master宕机的,Slave可能会丢失事务。在这中情况下我们可以采用半同步复制,即一个线程在Master上提交事务将受到阻塞,直到得知一个已开启半同步复制功能的Slave已收到此事务的所有事件,或等待超时。

        以下是mysql主从复制的一些简单配置

        传统ab复制(mysql版本为rhel6.5自带的mysql):

在master主机上:

vim /etc/my.cnf
  server-id=1
  log-bin=mysql-bin #启动二进制日志系统
/etc/init.d/mysqld restart
cd /var/lib/mysql

可以通过mysqlbinlog指令来插看二进制日志文件
QQ截图20160628085609.png
创建同步帐户,并给予权限

mysql -p
mysql> GRANT REPLICATION SLAVE ON *.* TO example@'172.25.254.3' IDENTIFIED BY 'Westos+123' ;

查看master状态

show master status;
QQ截图20160628085626.png
记录File和Position的值,在slave配置时会用到。
在slave主机上
查看能否远程登陆master主机的mysql
mysql -h 172.25.254.2 -uexample -pWestos+123
QQ截图20160628085644.png
vim /etc/my.cnf
  server-id=2 #从服务器ID号,不要和主ID相同也不要与其他从服务器相同
/etc/init.d/mysqld restart
mysql -p

mysql> change master to
    -> master_host='172.25.254.2', #指定主服务器ip地址
    -> master_user='example',      #指定在主服务器上可以进行同步的用户名
    -> master_password='Westos+123', #同步用户的密码
    -> master_log_file='mysql-bin.000003', #上面看到的master的日志文件
    -> master_log_pos=1007;          #master机的position值
mysql> start slave;   #开启同步
mysql> show slave status\G #查看slave状态
QQ截图20160628085703.png
看到以下两个yes就表示同步开启成功

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

我们可以通过slave状态中的延迟时间是否为0和pos号是否与master主机一致来查看同步是否完成。

。。。
Seconds_Behind_Master: 0
Exec_Master_Log_Pos: 1007
。。。

Mysql的GTID复制:(mysql为5.7社区版)

在Master主机上:

vim /etc/my.cnf
  server-id=1
  log-bin=mysql-bin
  gtid-mode=on   #开启gtid
  enforce-gtid-consistency=on #强制GTID的一致性
/etc/init.d/mysqld restart
mysql -p
mysql> GRANT REPLICATION SLAVE ON *.* TO example@'172.25.254.3' IDENTIFIED BY 'Westos+123' ;

在slave主机上

vim /etc/my.cnf
  server-id=2
  log-slave-updates #更新是否记入日志,当slave主机作为master主机是必须要有
  gtid-mode=on
  enforce-gtid-consistency=on
  slave-parallel-type=LOGICAL_CLOCK #MySQL 5.6的多线程同步仅在有多个数据库时才有明显的性能提升,MySQL 5.7.2之后,可以通过配置slave-parallel-type为LOGICAL_CLOCK来避开这个限制.
  slave-parallel-workers=16 #从服务器的SQL线程数,一个数据库同一时间只能有一个worker线程来进行工作。master_info_repository=TABLE #主服信息记录库=表/文件relay_log_info_repository=TABLE #中继日志信息记录库relay_log_recovery=ON   #在CRASH后自动放弃所有未执行的relay-log,并且重新从MASTER获取日志;保证relay-log的完整
/etc/init.d/mysqld restart
mysql -p
mysql> change master to
    -> master_host='172.25.254.2',
    -> master_user='example',
    -> master_password='Westos+123',
    -> master_auto_position=1;
mysql> start slave;
mysql> show processlist; #可以看到开启了多个线程
QQ截图20160628085720.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-236222-1-1.html 上篇帖子: 关系型数据库之MariDB 10.0.10多主一从的架构及多线程复制架构 下篇帖子: mysql: error while loading shared libraries: libmysqlclient
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表