• 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上是否同步新增:

          

      结束.

  • 相关阅读:
    牛客IOI周赛17-提高组 卷积 生成函数 多项式求逆 数列通项公式
    6.3 省选模拟赛 Decompose 动态dp 树链剖分 set
    AtCoder Grand Contest 044 A Pay to Win 贪心
    5.29 省选模拟赛 树的染色 dp 最优性优化
    luogu P6097 子集卷积 FST FWT
    CF724C Ray Tracing 扩展欧几里得 平面展开
    5.30 省选模拟赛 方格操作 扫描线 特殊性质
    5.29 省选模拟赛 波波老师 SAM 线段树 单调队列 并查集
    Spring main方法中怎么调用Dao层和Service层的方法
    Bug -- WebService报错(两个类具有相同的 XML 类型名称 "{http://webService.com/}getPriceResponse"。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。)
  • 原文地址:https://www.cnblogs.com/ding2016/p/6762061.html
Copyright © 2020-2023  润新知