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等   

      

  • 相关阅读:
    ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 17 电话号码的字母组合
  • 原文地址:https://www.cnblogs.com/dangjingwei/p/11480010.html
Copyright © 2011-2022 走看看