zoukankan      html  css  js  c++  java
  • mysql5.6做单向主从复制Replication

    原理场景:MySQL从3.23版本开始提供复制功能。指的是将主数据库的DDL和DML操作通过二进制日志传到从服务器(也叫从库),然后在从库上对这些日志重新执行,

         从而使得从库和主库的数据保持同步。

         优点:如果主库出现问题,可以快速切换到从库提供服务;

            可以在从库上执行查询操作,降低主库的访问压力;

            可以在从库上执行备份,以免备份期间影响主库的服务;

    测试环境 2台最小化安装的centos7.2

          

    具体操作

      1. 安装相同版本的mysql

        可参考之前的文章:http://www.cnblogs.com/ding2016/p/6756941.html

      2. 主(master)服务器配置

        ① 在my.cnf中的[mysqld]下新增如下项目:

          
          server_id=200                # 设置server_id,一般设置为IP;

          
          binlog-do-db=cnblogs              # 复制过滤:需要备份的数据库,输出binlog(这里我假设值备份cnblogs这个数据库);

          #binlog-do-db=db2           #如果要同步多个,另起一行,再加一条

          #binlog-do-db=db3           #同上

          
          binlog-ignore-db=mysql         # 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步);
        

          log-bin=master-bin            # 开启二进制日志功能,可以随便取,最好有含义;

          binlog_cache_size=1M          # 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存;


          binlog_format=mixed           # 主从复制的格式(mixed,statement,row,默认格式是statement);

          expire_logs_days=7            # 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除;

          slave_skip_errors=1062           # 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
                                如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致; 

          log_bin_trust_function_creators=true    # 如果需要同步函数或者存储过程;  

         

         保存,退出;

        

         补充说明:主从复制格式

            (1) 基于语句的复制:在Master上执行的SQL语句,在Slave上执行同样的语句,MySQL默认采用基于语句的复制,效率比较高,

                      一旦发现没法精确复制时,会自动选着基于行的复制;           

            (2) 基于行的复制:把改变的内容复制到Slave,而不是把命令在Slave上执行一遍。从MySQL5.0开始支持;

            (3) 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制;  

         ② 重启数据库

          ~]#systemctl restart mysql

         ③ 重新登入mysql并做相关授权

          ~]#mysql -uroot -p

          mysql>create user mysql@'%' identified by 'mysql';  

          mysql>grant all  on *.* to mysql@'%';      这里可根据自己的数据库和权限进行设置;   

          mysql>grant replication slave, replication client on *.* to 'mysql'@'158.158.41.201' identified by 'mysql';

          mysql>flush privileges;

          mysql>show master status;

            

            注意记住上图蓝框标出的两个数值,因为在配置slave时会用到,每次重新配置都会改变。  

      3. 从(slave)服务器配置

        ① 在my.cnf中的[mysqld]下新增如下项目:

          server_id=201          slave的ip做id;

          binlog-do-db=cnblogs      与master相对应(换成自己的需求定义);

          binlog-ignore-db=mysql     与master相对应;

          #log-bin=slave1-bin       先注释掉,可以先不加;

          binlog_cache_size=1M      

          binlog_format=mixed       
     
          expire_logs_days=7       
          
          slave_skip_errors=1062     

          relay_log=mysql-relay-bin    配置中继日志;

          log_slave_updates=1

          read_only=1 

        

        保存,退出;

        补充说明:

            (1)如果Slave为其它Slave的Master时,必须设置bin_log;

            (2)log_slave_updates表示slave将复制事件写进自己的二进制日志;

            (3)当设置log_slave_updates时,你可以让slave扮演其它slave的master;

               此时,slave把SQL线程执行的事件写进行自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它;

        ② 重启从服务器mysql

          ~]#systemctl restart mysql

        ③ 重新登录mysql

          ~]#mysql -uroot -p

          mysql> change master to master_host='158.158.41.200',master_user='mysql',master_password='mysql',

              master_port=3306,master_log_file='master-bin.000001',master_log_pos=708,master_connect_retry=30;

          

          上图蓝色标志处就是之前再主上“show master status;”后得到的重要数据,写进去即可。

        ④ 开启主从同步

          mysql>start slave; 

        ⑤ 重看主从状态

          mysql>show slave status G

          

          一切正常,一切就绪。

      4测试主从同步

        在master上新增cnblogs,查看slave上是否同步新增:

          

      结束.

  • 相关阅读:
    [LeetCode]Subsets II
    [LeetCode]Subsets
    [LeetCode]Combinations
    [LeetCode]Minimum Window Substring
    [LeetCode]Search a 2D Matrix
    [LeetCode]Edit Distance
    [LeetCode]Simplify Path
    Adaboost算法
    [LeetCode]Text Justification
    31、剑指offer--从1到n整数中1出现次数
  • 原文地址:https://www.cnblogs.com/ding2016/p/6762061.html
Copyright © 2011-2022 走看看