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

[经验分享] MySQL主从配置步骤

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-10 10:13:09 | 显示全部楼层 |阅读模式
主从复制原理:

    适用于吞吐量大的企业环境,主从复制技术是建立一个和主数据库服务器一模一样的数据库,当主数据库故障的时候,可以切换到从数据库服务器继续工作。尽可能短的缩小故障期间造成的损失。在mysql主从复制的架构中,主服务器会在本地执行写操作的时候,将数据既保存在数据库中一份,还要写到二进制日志中一份,而后,在主服务器中为每一个从服务器启动一个mysql_dump线程,将二进制日志信息以明文的方式发给从服务器的I/O thread线程,(所以为了安全起见,主从同步应该只在内网进行,或者使用SSL加密传输数据)从服务器在收到了二进制日志后,将其保存在中继日志中,然后从服务器在本地启动一个SQL thread线程,该线程从中继日志中读取一个事件,应用一个事件。以此实现在本地应用这个数据更新。mysql5.6支持多线程复制,指的就是SQL thread可以启动多个,可以有多个线程同时从中继日志中读数据,同时并行应用,可以大大的提高从服务器的速度。但是多线程复制只支持一个库,如果有多个库,才能开启多个线程。如果主服务器的dump线程故障了,将导致从服务器的I/O thread线程不能工作。


建立主从复制的要求:
    数据库的版本要求要一致。(主版本号和次版本号)

    有需要同步的数据库

    同步需要数据库帐号

    给同步帐号授权

    主服务器可以有多个从服务器,但从服务器只能有一个主服务器


主从复制的基本操作步骤:

一、master配置

    1、启用二进制日志

    vim /etc/my.cnf
    log-bin = master-bin                #二进制日志选项要在[mysqld]段中添加。

    log-bin-index = master-bin.index


    2、启动同步二进制日志,启动后事件将不写入缓冲区,而直接写入二进制日志。

    sync-binlog = ON                    #要写在[mysqld]段中


    3、选择一个唯一的server-id号

    server-id = 1                        #主从服务器的server-id号不能相同。


    4、创建数据库同步帐号

    grant replication slave on *.* to 'repluser'@'从服务器的IP' identified by '123456';




二、slave配置
    1、启用中继日志

    vim /etc/my.cnf

    relay-log = relay-log                #中继日志也要在[mysqld]段中添加。

    relay-log-index = relay-log.index


    2、启用只读

    read-only = ON                       #对具有super权限的用户,依然能写


    3、选择一个唯一的server-id           #一定不能和主服务器的server-id相同

    server-id = 2


    4、连接至主服务器

     change master to master_host = '192.168.10.1' ,master_port = '3306' ,master_user = 'repluser' ,master_password = '123456' ,master_log_file = 'master-bin.0000019' , master_log_pos = 633;

     执行完毕后会在mysql的数据目录生成两个文件,一个是master.info,用来记录主服务器的二进制日志,position位置,主服务器IP、端口、同步用户、密码、超时时间等信息。一个是relay-log.info,用来记录当前中继日志和位置和正在读取的主服务器上的二进制日志和位置


    5、启动slave

      start salve;


    6、查看slave的同步状态

      show slave status;


*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.1            #主服务器的IP地址
                  Master_User: repl_user               #复制帐号
                  Master_Port: 3306                    #主服务器的mysqld端口号
                Connect_Retry: 60                      #超时重试时间
              Master_Log_File: master-bin.000019       #主服务器的当前二进制日志
          Read_Master_Log_Pos: 27472961                #已经读到的二进制日志位置
               Relay_Log_File: slave-relay-bin.000009  #从服务器所处的中继日志
                Relay_Log_Pos: 1531586                 #从服务器所处的中继日志位置
        Relay_Master_Log_File: master-bin.000019       #从服务器的中继日志
             Slave_IO_Running: Yes                     #I/Othread线程状态必须是YES(重要)
            Slave_SQL_Running: Yes                     #SQLthread线程状态必须是YES(重要)
              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: 27472961                 #已经执行到的二进制位置
              Relay_Log_Space: 1534068                  #中继日志的剩余空间
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No                       #是否允许SSL加密
           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
1 row in set (0.00 sec)

ERROR:


—————————————————————————————————————————————

三、实现半同步复制

    当主服务器超时,从服务器没有联系,主服务器会自动降级为半同步模式


    1、主服务器配置

        安装插件:

        INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

        SHOW GLOBAL VARIABLES LIKE 'rpl%'


        rpl_recovery_rank        0

        rpl_semi_sync_master_enabled        OFF        #半同步功能是否开启

        rpl_semi_sync_master_timeout        10000      #从服务器的超时时间,过了这个时间,主服务器将不再等待从服务器的响应,毫秒单位。
        rpl_semi_sync_trace_level           32         #追踪级别

        rpl_semi_sync_master_wait_no_slave  ON         #是否必须有一个可用的slave


        配置开启半同步:在主服务器中的配置文件[mysqld]段中增加(永久生效,需要重启mysqld)
        rpl_semi_sync_master_enabled = 1

        rpl_semi_sync_master_timeout = 3000  #1秒


        临时生效:在mysql命令行输入

        SET GLOBAL VARIABLES rpl_semi_sync_master_enabled = 1
        SET GLOBAL VARIABLES rpl_semi_sync_master_timeout = 3000
        SHOW GLOBAL VARIABLES LIKE 'rpl%';        #查看同步状态,命令行设置完后必须要重启从服务器的IO_THREAD线程。
        Rpl_semi_sync_master_clients    0

    2、从服务器配置
        安装插件:

        INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

        SHOW VARIABLES LIKE 'rpl%'


        rpl_recovery_rank        0
        rpl_semi_sync_slave_enabled         OFF         #是否启动

        rpl_semi_sync_slave_trace_lavel     32          #追踪级别


        配置开启半同步:在从服务器中的配置文件[mysqld]段中增加(永久生效,需要重启mysqld)
        rpl_semi_sync_slave_enabled = 1

        临时生效:在mysql命令行输入
        SET GLOBAL VARIABLES rpl_semi_sync_slave_enabled = 1
        STOP SLAVE IO_THREAD;START SLAVE IO_THREAD;

运维网声明 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.iyunv.com/thread-96850-1-1.html 上篇帖子: 数据库mysql 自动分库分表备份脚本 下篇帖子: MySQL之InnoDB引擎单表移植
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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