• MySQL主从复制+过滤复制+GTID


    MySQL主从复制+过滤复制+GTID

    1.修改主库从库配置文件

    主库:

    vim /etc/my.cnf
    [mysqld]
    server_id=1
    log-bin=mysql-bin
    

    从库:

    vim /etc/my.cnf
    [mysqld]
    server_id=1
    

    注意:
    1)主库server_id为1,从库server_id不等于1即可,从库之间可以相同.
    2)主库需要开启binlog,从库可以不开启binlog,就算开启,也不会写入数据.

    主从库server-id一定要彼此独立,不能重复,否则会出现如下错误:
    
    Slave: received end packet FROM server, apparent master shutdown
    
    **主库:
    Binlog_Do_DB  #在主库上设置白名单:只记录白名单设置的库或者表,相关的SQL语句到binlog中
    **生产中不能设置,否则不记录其他库的binlog,数据一旦丢失找不回来**
    
    Binlog_Ignore_DB   #在主库上设置黑名单:不记录黑名单设置的库或者表,相关的SQL语句到binlog中
    
    **从库:
    replicate-do-db=test  #从库白名单,只同步某个库
    replicate-do-table=test.t1  #从库白名单,只同步某个库中的某个表
    replicate-wild-do-table=test.t*  #从库白名单,只同步某个库中的以t开头的所有表
    Replicate_Ignore_DB=test2  #在从库上设置黑名单:IO线程会拿所有的binlog,但是SQL线程不执行黑名单设置的库或者表相关的SQL语句
    
    实现过程
    
    命令行:
    
    mysqldump -uroot -p -B test --master-data=2 --single-transaction >/tmp/test.sql
    
    scp /tmp/test.sql 192.168.1.1:/tmp
    
    mysql -uroot -p123 </tmp/test.sql
    
    head -22  /backup/full.sql
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
    
    [root@db01 ~]# mysql -uroot -p
    输入密码
    mysql> source /tmp/test.sql
    
    从库:
    mysql > CHANGE MASTER TO
    		MASTER_HOST='10.0.0.51',
    		MASTER_USER='repl',
    		MASTER_PASSWORD='123',
    		MASTER_PORT=3307,
    		MASTER_LOG_FILE='mysql-bin.000002',
    		MASTER_LOG_POS=154,
    		MASTER_CONNECT_RETRY=10;
    		start  slave;
    [root@db01 ~]# vim /etc/my.cnf 
    replicate_do_db=ppt
    replicate_do_db=word    #从库只同步ppt和word的数据库
    
    [root@db01 ~]# /etc/init.d/mysqld restart
    
    基于GTID的主从:
    主库:
    主库配置:
    [root@db-01 ~]# vim /etc/my.cnf
    [mysqld]
    server_id=1
    log-bin=mysql-bin
    binlog_format=row
    gtid_mode=on
    enforce_gtid_consistency=on
    log-slave-updates
    
    从库:
    从库01:
    [root@db-02 data]# vim /etc/my.cnf
    [mysqld]
    gtid_mode=on
    enforce_gtid_consistency=on
    log-bin=mysql-bin
    #更新从库的binlog
    log-slave-updates
    
    

    2.重启数据库(重新加载配置文件)

    /etc/init.d/mysqld restart
    systemctl restart mysqld
    

    3.创建主从复制用户(主库)

    grant replication slave on *.* to rep@'172.16.1.5%' identified by '123';
    

    4.备份MySQL数据库(全备,打点)

    [root@db01 tmp]# mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction > /tmp/full.sql
    Warning: Using a password on the command line interface can be insecure.
    
    

    5.将全备发送到从库

    [root@db01 tmp]# scp ./full.sql root@172.16.1.53:/tmp
    root@172.16.1.53's password: 
    full.sql                                                        100% 6869KB  91.1MB/s   00:00    
    

    6.在从库执行sql文件

    [root@db04 tmp]# mysql -uroot -p123 < ./full.sql 
    Warning: Using a password on the command line interface can be insecure.
    

    7.查看sql文件中的位置点

    [root@db04 tmp]# head -30 /tmp/full.sql |grep 'MASTER_LOG_POS'
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=574;
    

    8.在从库上执行change master

    mysql> change master to
        -> master_host='172.16.1.50',
        -> master_user='rep',
        -> master_password='123',
        -> master_log_file='mysql-bin.000005',
        -> master_log_pos=574;
    Query OK, 0 rows affected, 2 warnings (0.04 sec)
    

    9.开启SQL线程和IO线程

    start slave;
    

    10.查看主从复制的状态

    show slave statusG
    
    下面的两个必须都为yes才是成功。
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
    

    可自行测试,在主库增删改,查看从库变化。

    2.SQL线程是NO
    Slave_IO_Running: YES
    Slave_SQL_Running: NO

    数据不一致:
    1)主库有该数据,从库没有,操作对象不存在(insert update delete drop truncate alter)
    	主库:a库
    	从库:没有a库
    
    2)从库有该数据,主库要创建,操作对象已存在(create)
    	从库:a库
    	主库:要创建a库
    

    处理方法一:(生产环境不建议使用)
    #临时停止同步
    mysql> stop slave;
    #将同步指针向下移动一个(可重复操作)
    mysql> set global sql_slave_skip_counter=1;
    #开启同步
    mysql> start slave;

    处理方法二:(生产环境不建议使用)
    #编辑配置文件
    [root@db01 ~]# vim /etc/my.cnf
    #在[mysqld]标签下添加以下参数
    slave-skip-errors=1032,1062,1007

    处理方法三:
    1.要求,主从复制之前,主库和从库的数据保证一致.
    2.在从库上设置 只读:set read-only=1;

  • 相关阅读:
    C#,调用Process解压文件
    使用Jquery的treeview
    利用VS2010的项目生成事件属性进行生成文件的复制与打包
    简单理解laravel框架中的服务容器,服务提供者以及怎样调用服务
    详解PHP实现定时任务的五种方法
    php 回调函数和匿名函数
    mongodb的连接和开启安全验证
    关于版本号:alpha、beta、rc、stable
    php7 mongodb 扩展windows 安装
    终端提交代码到码云
  • 原文地址:https://www.cnblogs.com/longren/p/11929483.html
Copyright © 2020-2023  润新知