美文网首页学习空间
MySql高可用学习(二):linux下mysql主主(双主)配

MySql高可用学习(二):linux下mysql主主(双主)配

作者: 超凡陆战队 | 来源:发表于2017-09-13 14:50 被阅读220次

    在上一篇MySql高可用学习(一):linux下mysql主从配置的基础上我们继续来学习主主双向同步。

    mysql主主同步和主从同步的原理是一样,两台mysql互为主从就可以了。

    1. 修改my.cnf
      主从库都加上主键自增规则,避免主从同步ID重复的问题,不过主库从1开始单数,从库从2开始双数
    [client]  
    port=3306  
    socket=/test/mysql/mysql/mysql1.sock  
     
    [mysqld]
    user=mysql
    basedir =/test/mysql
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    datadir=/test/mysql/data
    port=3306
    #服务器唯一标识,注意不要重复了
    server_id=mysql1
    socket=/test/mysql/mysql.sock
    log-output=file
    slow_query_log = 1
    long_query_time = 1
    slow_query_log_file = /test/mysql/log/slow.log
    log-error = /test/mysql/log/error.log
    # 复制过滤:不需要备份的数据库(MySQL库一般不同步)
    #binlog-ignore-db=mysql
    # 主从复制的格式(mixed,statement,row,默认格式是 statement)
    binlog_format=mixed
    # 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
    expire_logs_days=7 
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。 
    ## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    # log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
    log_slave_updates=1
    #启用二进制日志
    log-bin=mysql-bin
    # 主键自增规则,避免主从同步ID重复的问题
    auto_increment_increment=2  
    auto_increment_offset=1    
    # 作为从服务器时的中继日志
    relay_log=mysql-relay-bin
    
    

    ps:一定要注意设置主键自增偏移量的问题,避免id重复!!!

    1. 重启mysql
    2. mysql1配置同步mysql2
      首先连接mysql2查看主库信息
    [root@localhost mysql]# mysql -u root -p -S mysql1.sock
    Enter password: 
    
    mysql> show master status;
    +-------------------+----------+--------------+------------------+-------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-------------------+----------+--------------+------------------+-------------------+
    | mysql2-bin.000001 |      154 |              | mysql            |                   |
    +-------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    

    接着连接mysql2,配置同步信息

    mysql> change master to master_host='127.0.0.1',master_user='repl_user', master_password='123456', master_port=3307, master_log_file='mysql2-bin.000001', master_log_pos=154, master_connect_retry=30;
    

    启动同步

    mysql> start slave;
    

    查看从库信息

    mysql> show slave status \G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 127.0.0.1
                      Master_User: mysql
                      Master_Port: 3307
                    Connect_Retry: 30
                  Master_Log_File: mysql2-bin.000001
              Read_Master_Log_Pos: 154
                   Relay_Log_File: mysql1-relay-bin.000014
                    Relay_Log_Pos: 369
            Relay_Master_Log_File: mysql2-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
    
    

    可以看到IO读写线程Slave_IO_Running 和 SQL重做线程Slave_SQL_Running 都为 yes,表示已经正常执行了!

    1. 测试同步情况
    mysql> use test;
    
    #mysql2创建测试表
    mysql> CREATE TABLE `t_test2` (
        -> `id`  int NOT NULL AUTO_INCREMENT ,
        -> `content`  varchar(20) NULL ,
        -> PRIMARY KEY (`id`)
        -> ); 
    Query OK, 0 rows affected (0.11 sec)
    
    mysql> INSERT INTO `t_test2` (`content`) VALUES ('test21'),('test22'),('test23'),('test24');
    Query OK, 4 rows affected (0.01 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> select * from t_test2;
    +----+---------+
    | id | content |
    +----+---------+
    |  1 | test21  |
    |  3 | test22  |
    |  5 | test23  |
    |  7 | test24  |
    +----+---------+
    4 rows in set (0.02 sec)
    
    #下面登陆mysql1查询
    mysql> select * from t_test2;
    +----+---------+
    | id | content |
    +----+---------+
    |  1 | test21  |
    |  3 | test22  |
    |  5 | test23  |
    |  7 | test24  |
    +----+---------+
    4 rows in set (0.02 sec)
    
    数据已经同步过来了!
    
    

    接下来可以再切换到mysql1新增数据,然后在mysql2上查询,数据也同步过来了,ok,简单的双主同步就搞定了。

    相关文章

      网友评论

        本文标题:MySql高可用学习(二):linux下mysql主主(双主)配

        本文链接:https://www.haomeiwen.com/subject/biaksxtx.html