zoukankan      html  css  js  c++  java
  • 九、linux-msyql下的mysql主从复制深度实战

    1.上节基本诉说了mysql主从同步,这里想说明的是,其一从库在请求主库进行同步的时候,是主库的主线程进行用户名、密码的验证,在验证通过后,将请求转交给I/O线程负责同步;其二从库sql线程在读取中继日志relay.log写入数据库后,也会在relay.info中记录自己写入的位置

    2.在部署实验时,有一个锁表的语句:flush table with read lock ; 这个锁表的时间,在不同的引擎的情况下,会受参数的控制,如果超过时间,会自动解锁。另外,当前窗口如果关闭,也会解锁。

      查看时间参数:show variables like '%timeout%'

     修改锁表时间:修改的是内存中的参数,因为没有在配置文件中修改,所以关闭此次修改,退出数据库后,会失效。

                      set global wait_timeout=10;

                      set global  interactive_timeout=10;

    3.mysqldump -uroot -p'oldboy124' -S /data/3306/mysql.sock  -F -B  oldboy >/dangjingwei/t.sql

       上述命令中,-F标识自动刷新bin_log日志,因为如果不是操作数据库,一般binlog的日志位置是不会变得,所以这里加入-F后,操作日志会发生变化,但是实际数据库是没有变化的。

    4.如果从库还想级联从库,需要打开log-bin和log-slave-updates参数。

    5.怎样做从库?

        1)申请设备

         2)编写文档和实施方案

         3)告知项目经理,然后进行实施就可以了

    6.查看线程的同步状态:这只是其中的一种状态,剩下的可以百度

       show processlist;(主库)

      show processlist;(从库)

     7.生产场景mysql主从复制读写分离授权方案与实战

            当配置好mysql主从复制以后,所有对数据库内容的更新就必须在主服务器上进行,原因在于数据复制是单向的,只有在主库上更新,才能主从一致

            授权分离,让连接主库不连接从库,防止连接从库的3个方法:

      方案1:

          主库:web oldboy 192.168.0.104  3306 (select,insert,delete,update)

          从库:主库的web用户同步到从库,然后回收insert,delete,update权限。

          不回收从库权限,设置read-only参数确保从库只读。可以不回收了。

      方案2:

          主库:web_w oldboy 192.168.0.104  3306 (select,insert,delete,update)

          从库:web_r oldboy 192.168.0.104  3306 (select)

          风险:web_w连接从库,设置read-only参数确保从库只读。

          开发:多套用户密码不专业。

      方案3:

          不同步mysql库:主从库分别进行如下授权

          主库:web oldboy 192.168.0.104  3306 (select,insert,delete,update)

          从库:web oldboy 192.168.0.104  3306 (select)

          缺陷:从库切换主库时候,连接用户授权问题,保留一个从库专门准备接替主。

    8.可以看出,一般情况下,我们的主从同步是进行全部库都的同步。如果想要同步某些库的时候,修改配置文件my.cnf: master端:--binlog-ignore-db=库名:二进制忽略的数据库,多个库用,分隔;--binlig-do-db :二进制日志记录数据库,多个库用,分隔;还有很多情况,不常用,需要的可以百度网上

    9.read-only参数防止数据写从库的方法:
          除了给从库仅作selectd的授权外,还可以在slave服务器启动选项增加参数或者在my.cnf配置文件中加入read-only确保从库只读,值得注意的是,read-only参数对于具有super权限的用户是没有效果的,换句话说对不是super的用户是有效果的。

    10.重现故障是运维最重要的一个能力。
       例如,如果从库有一个库test,但是这时如果主库创建test,在同步到从库的时候就会报错,通过在从库添加如下命令,让指针向下走一格,忽略此报错:
            stop  slave
            set global  sql slave_skip_counter=1
            start slave
      1)   对于普通的互联网业务,忽略问题不是很大。要确保业务不影响
      2)企业场景解决主从同步,比主从不一致对当前更重要,然后如果主从数据一致也很重要,在找个时间恢复下这个从库
      主从数据不一致更重要还是保持主从同步持续状态更重要,这个我们要根据业务进行选择;当然,我们还可以在参数中配置,也可以忽略此错误,slave-skip-errors=1032,10062,1007

    11.忽略解析的参数是在my.cnf中的 skip-name-resolve

    12.mysql的slave从库记录binlog方法
         需要记录binlog的情况:
      1)当前从库还要作为其他从库的主库,也就是级联同步
      2)把从库作为备份服务器时需要开启binlog

    操作方式:

    my.cnf下log-bin打开
    log-slave-updates
    expire_logs_days=7(linlog自动保存多少天,之后的删除)

     13.方案:一主多从,主库宕机切换从库方案

    1.)登陆从库show  processlistG,查看两个线程的状态
    2.)看从库哪个的master.info更靠前,作为主库
     cat  /data/3307/data/master.info
    3.)切换:登陆从库
      stop slave
      retest master
      quit
    4.)进入数据库数据目录,删除master.info relay-log.info
    检查授权表,类似read-only
    5.)提升主库 :/data/3306/restart
    6.)如果主库服务器没宕,需要去主库提取binlog日志补全提升主库的从库
      授权同步用户和主库一样
    7.)其他从库 stop  slave
      change master to master-host='ip'
       start slave
       show  slave  status G
    8.)修改程序配置文件,切换主库
    9.)修复损坏的主库,完成后作为从库使用或者切换
     
    14.主主互备
    Master1:
    auto_increment_increment     =2#自增ID的间隔,如1 3 5间隔2
    auto_increment_offset        =1#ID的初始位置
    Master2:
    auto_increment_increment     =2#自增ID的间隔,如2,4,6间隔2
    auto_increment_offset        =2#ID的初始位置

    my.cnf下log-bin打开
    log-slave-updates

    然后change slave进行配置即可;主键的增长不是有规律的,但是不影响业务,如上,可以是1,3,5,6,8等   

      

  • 相关阅读:
    Selenium系列(十五)
    Selenium系列(十四)
    Selenium系列(十三)
    Selenium系列(十二)
    Linux常用命令
    Linux
    Linux常用命令
    Linux常用命令
    Mysql常用sql语句(2)- 操作数据表
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/dangjingwei/p/11480010.html
Copyright © 2011-2022 走看看