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

[经验分享] MySQL 的主从复制

[复制链接]

尚未签到

发表于 2018-10-4 10:33:51 | 显示全部楼层 |阅读模式
  1、复制概述
  1.1、复制解决的问题
  数据复制技术有以下一些特点:
  (1) 数据分布
  (2) 负载平衡(load balancing)
  (3) 备份
  (4) 高可用性(high availability)和容错
  1.2、复制如何工作
  从sql layer中逻辑模块上来看
  复制模块分为master模块和slave模块两部分,master模块主要负责在replication环境中读取master端的binary日志,以及与slave端的I/O thread交互等工作。slave模块比master模块所要做的事情稍多一些,在系统中主要体现在两个线程上面。一个是负责从master请求和接受binary日志,并写入本地relay_log的I/O thread。另外一个是负责从relay_log中读取相关的日志事件的SQLthread,然后解析成可以在slave端正确执行并得到和master端完全相同的结果的命令并再交给slave执行的过程。
  过程如下:
DSC0000.jpg

  注:上图中同一种颜色的箭头表示一步,自左向右。
  1.3实验环境
  系统:centos6.4 x86_64
  数据库:mysql 5.6.13(源码安装)
  Master端
  IP:200.168.10.209
  源码安装详见http://essun.blog.51cto.com/721033/1288442中间部分。
  在Master上操作:
  1)、确保/etc/my.cnf中有如下参数,没有的话需手工添加,并重启mysql服务。
  [root@localhost ~]# vim/etc/my.cnf
  [mysqld]
  log-bin=mysql-bin 启动二进制文件
  server-id=1 服务器ID
  2)、登录mysql,在mysql中添加一个puck的账号,并授权给从服务器。        [root@localhost ~]# mysql -uroot -p

  mysql> create user puck@200.168.10.200>
  mysql> grant replication client,replication slave on *.* to puck@200.168.10.200>  3)、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。
  mysql> show master status\G
  *************************** 1. row ***************************
  File: mysql-bin.000005
  Position: 120
  Binlog_Do_DB:
  Binlog_Ignore_DB:
  Executed_Gtid_Set:
  1 row in set (0.00 sec)
  Slave端
  IP:200.168.10.200
  源码安装详见http://essun.blog.51cto.com/721033/1288442中间部分。
在Slave上操作:  1)、确保/etc/my.cnf中有log-bin=mysql-bin和server-id=1参数,并把server-id=1修改为server-id=10。修改之后如下所示:  [mysqld]  log-bin=mysql-bin 启动二进制文件  server-id=10 服务器ID  2)、重启mysql服务。  [root@localhost ~]#/etc/init.d/mysql restart  3)、登录mysql,执行如下语句  [root@localhost ~]# mysql –u root –p  mysql> change master to master_host='200.168.10.209',master_user='puck',master_password='password',master_log_file='mysql-bin.000005',master_log_pos=120;
  4)、启动slave同步。
mysql> start slave;  5)、检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常。  mysql> show slave status\G
*************************** 1. row ***************************  Slave_IO_State: Waiting for master to send event
  Master_Host: 200.168.10.209 #主服务器的地址
  Master_User: puck           #主服务器允许复制的用户
  Master_Port: 3306           #通信端口
  Connect_Retry: 60             #重新连接的时间
  Master_Log_File: mysql-bin.000005#当前主服务器的日志文件
  Read_Master_Log_Pos: 120            #binary_log日志起始点
  Relay_Log_File: slave-relay-bin.000005#Slave端当前日志文件
  Relay_Log_Pos: 283        #Relay_log日志起始点
  Relay_Master_Log_File: mysql-bin.000005
  Slave_IO_Running: Yes        #I/Othread 用于复制master的Binary log到Relay_log中,当前状态运行中
  Slave_SQL_Running: Yes        #将Relay_log中语句解析并应用于Slave端数据库中
  Replicate_Do_DB:
  Replicate_Ignore_DB:
  Replicate_Do_Table:
  Replicate_Ignore_Table:
  Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
  Last_Errno: 0
  Last_Error:
  Skip_Counter: 0
  Exec_Master_Log_Pos: 120
  Relay_Log_Space: 619
  Until_Condition: None
  Until_Log_File:
  Until_Log_Pos: 0
  Master_SSL_Allowed: No
  Master_SSL_CA_File:
  Master_SSL_CA_Path:
  Master_SSL_Cert:
  Master_SSL_Cipher:
  Master_SSL_Key:
  Seconds_Behind_Master: 0
  
Master_SSL_Verify_Server_Cert: No
  Last_IO_Errno: 0
  Last_IO_Error:
  Last_SQL_Errno: 0
  Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
  Master_Server_Id: 1
  Master_UUID: f9ba5511-0fbe-11e3-a989-000c29f64ea5
  Master_Info_File: /data/mysql/master.info
  SQL_Delay: 0
  SQL_Remaining_Delay: NULL

  Slave_SQL_Running_State: Slave has read all>  Master_Retry_Count: 86400
  Master_Bind:
  Last_IO_Error_Timestamp:
  Last_SQL_Error_Timestamp:
  Master_SSL_Crl:
  Master_SSL_Crlpath:
  Retrieved_Gtid_Set:
  Executed_Gtid_Set:
  Auto_Position: 0
  
1 row in set (0.00 sec)
  验证配置是否正常,mysql主从能否正常复制。 1.4、测试主从复制  在主数据库上新建一个库,并且在库中写一个表和一些数据。  [root@localhost ~]# mysql –u root –p  mysql> create database mydatabase;  mysql> use mydatabase;  mysql> create table jin (id int(5),name char(10));  mysql> insert into jin values (2,'puck');  在从数据库中验证一下,是否正常复制到数据。  [root@localhost ~]# mysql -uroot –p123456  mysql> show databases;  mysql> select * from mydatabase.jin;


运维网声明 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-611765-1-1.html 上篇帖子: centos安装mysql5.6.16 下篇帖子: Mysql数据库的备份
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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