zoukankan      html  css  js  c++  java
  • MySQL双主复制

    原文发表于cu2017-06-12

    本文简单介绍MySQL双主复制原理及1个简单是双主复制验证。

    一.MySQL双主复制原理

    1. 双主复制原理

    master-master复制的两台服务器,既是master,又是另一台服务器的slave本质上互为主从。

    二.验证环境

    1. 操作系统

    CentOS-6.7-x86_64

    2. MySQL版本

    MySQL版本是5.6.36:https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.36.tar.gz

    3. 拓扑图

    1. 采用VMware ESXi虚拟出的2台服务器master/backup,地址10.11.4.196/197;
    2. MySQL已安装并配置完成,可参考:http://www.cnblogs.com/netonline/p/7327409.html中的MySQL部分;

    三.master配置

    1. my.cnf配置

    #在主从复制配置文件的基础上增加3个参数项
    [root@master ~]# vim /etc/my.cnf
    [mysqld]
    server_id = 196
    log_bin = /mysql/mysql-bin
    max_binlog_size = 1G
    sync_binlog = 0
    binlog-format = mixed
    binlog-ignore-db = information_schema,mysql,performance_schema,test
    
    # 中继日志执行之后将变化写入自己的binlog文件,即从库从主库复制的文件默认不会写入自己的binlog文件,需要开启后才生效;
    # 通常此从库同时作为主库时,即链式复制时,需要开启此参数;
    # 默认参数为0,表示OFF, 设置为1表示ON,参数可直接带OFF或ON.
    log-slave-updates = 1
    
    # 做双主时,每台数据库都可能在同一个表中插入数据,如果表有一个自动增长的主键,那么就会在多服务器上出现主键冲突;解决方案是让每个数据库的自增主键不连续;
    # 参数auto_increment_increment表示自增值,一般有n台主库,自增值就采用n;
    # auto_increment_offset表示起始序号,一般offset不超过自增值,且各主库的自增值不一样.
    auto_increment_increment = 2
    auto_increment_offset = 1
    
    #使用--skip-slave-start启动,可以不立即启动从库的复制线程,方便后续配置操作
    [root@master ~]# service mysqld stop
    [root@master ~]# mysqld_safe --skip-slave-start & 

    2. 创建复制用户

    #在主库上10.11.4.0网段的主机授权,从库用户repl获得REPLICATION SLAVE权限      
    [root@master ~]# mysql -uroot -p
    Enter password:
    
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.11.4.%' IDENTIFIED  BY 'repl';
    mysql> flush privileges;

    3. 获取master binlog文件名与偏移量

    [root@master ~]# mysql -uroot -p
    Enter password:
    
    mysql> show master status;

    1. 获取到binlog文件名与偏移量,可为从库设定同步复制点。

    4. iptables

    [root@master ~]# vim /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
    [root@master
    ~]# service iptables restart

    四.backup配置

    1. my.cnf配置

    #将主库服务器上的my.cnf文件拷贝到从库服务器
    [root@master ~]# scp /usr/local/mysql/my.cnf backup:/usr/local/mysql/
    root@backup's password:
    
    #修改server id值与主库服务器不同;
    #auto_increment_offset参数,各服务器的offset值应不一样
    [root@backup ~]# vim /etc/my.cnf
    [mysqld]
    server_id = 197
    
    auto_increment_increment = 2
    auto_increment_offset = 2
    
    #使用--skip-slave-start启动,可以不立即启动从库的复制线程,方便后续配置操作
    [root@backup ~]# service mysqld stop
    [root@backup ~]# mysqld_safe --skip-slave-start &

    2. 创建复制用户

    #在主库上10.11.4.0网段的主机授权,从库用户repl获得REPLICATION SLAVE权限      
    [root@backup ~]# mysql -uroot -p
    Enter password:
    
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.11.4.%' IDENTIFIED  BY 'repl';
    mysql> flush privileges;

    3. 获取master(backup节点) binlog文件名与偏移量

    [root@backup ~]# mysql -uroot -p
    Enter password:
    
    mysql> show master status;

    1. 获取到binlog文件名与偏移量,可为从库设定同步复制点。

    4. iptables

    [root@backup ~]# vim /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
    
    [root@backup
    ~]# service iptables restart

    五.同步复制

    1. master配置同步复制

    #配置从库向主库提交的参数,如果参数有错误,可以重新配置;
    # master-host、master-user、master-password、master-port等也可在my.cnf文件中指定;
    #”start slave“启动复制
    [root@master ~]# mysql -uroot -p
    Enter password:
    
    mysql> change master to 
           master_host = '10.11.4.197', 
           master_user = 'repl', 
           master_password = 'repl', 
           master_log_file = 'mysql-bin.000009',
           master_log_pos = 1306;
    mysql> start slave;

    2. backup配置同步复制

    [root@backup ~]# mysql -uroot -p
    Enter password:
    
    mysql> change master to 
           master_host = '10.11.4.196', 
           master_user = 'repl', 
           master_password = 'repl', 
           master_log_file = 'mysql-bin.000003',
           master_log_pos = 2462;
    mysql> start slave;

    六.验证

    1. 查看线程 

    1)master服务器

    [root@master ~]# mysql -uroot -p
    Enter password:
    
    mysql> show processlist;

    1. master服务器做为主库的binlog dump线程已由backup服务器从库的repl用户启动;
    2. master服务器做为从库的I/0线程与SQL线程由系统用户启动。 

    2)backup服务器

    [root@backup ~]# mysql -uroot -p
    Enter password:
    
    mysql> show processlist;

    1. backup服务器做为主库的binlog dump线程已由master服务器从库的repl用户启动;
    2. backup服务器做为从库的I/0线程与SQL线程由系统用户启动。

    2. 查看从库状态 

    1)master服务器

    [root@master ~]# mysql -uroot -p
    Enter password:
    
    mysql> show slave statusG;

    1. 重点关注Slave_IO_Running与Slave_SQL_Running,状态均为YES时正常。 

    2)backup服务器

    [root@backup ~]# mysql -uroot -p
    Enter password:
    
    mysql> show slave statusG;

    3. 查看新建数据数据库同步情况

    1)在master服务器新建数据库与表

    [root@master ~]# mysql -uroot -p
    Enter password:
    
    mysql> create database dbtest2;
    mysql> use dbtest2;
    mysql> create table tabtest2(id int);
    mysql> insert into tabtest2() values(1),(2);

    2)在backup服务器查看数据库与表 

    [root@backup ~]# mysql -uroot -p
    Enter password:

    (1)查看数据库

    mysql> show databases;

    (2)查询表

    mysql> select * from dbtest2.tabtest2;

    3)在backup服务器修改数据表 

    [root@backup ~]# mysql -uroot -p
    Enter password:
    
    mysql> use dbtest2;
    mysql> insert into tabtest2() values(3),(4);

    4)在master服务器查看修改后的数据表 

    [root@master ~]# mysql -uroot -p
    Enter password:
    
    mysql> select * from dbtest2.tabtest2;

  • 相关阅读:
    Unity3D实践系列08, MonoBehaviour类的各种触发事件
    Unity3D实践系列07,组件的启用或禁用开关,物体的的可见或不可见开关,以及相应事件
    Unity3D实践系列06,球体撞击物体游戏
    Linux tee的花式用法和pee
    bash内置命令mapfile:读取文件内容到数组
    Perl正则表达式引用
    Perl文件句柄引用
    透明代理、正向代理、反向代理的区别说明
    Perl回调函数和闭包
    一文搞懂:词法作用域、动态作用域、回调函数、闭包
  • 原文地址:https://www.cnblogs.com/netonline/p/7606704.html
Copyright © 2011-2022 走看看