zoukankan      html  css  js  c++  java
  • MySQL/MariaDB数据库的主主复制

           MySQL/MariaDB数据库的主主复制

                           作者:尹正杰 

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.主主复制概述

    1>.什么是主主复制

      所谓的主主复制,说白了就是两台节点互为主从关系。

    2>.主主复制考虑要点

      由于主主复制,2个MySQL实例均可以进行写操作,需要考虑客户端在Innodb存储引擎中对同一行的操作,以及自动增长id的关系。

    3>.主主复制的缺点

      由于2个节点都可以进行写操作,很容易产生数据不一致的问题,因此生产环境中咱们得慎用呀!
      一般情况下主从复制就够用了,考虑到可用性的话可以对master节点使用keepalived做一个高可用即可~

    二.主主复制实战

    1>.试验环境说明

    [root@node102.yinzhengjie.org.cn ~]# cat /etc/redhat-release 
    CentOS Linux release 7.6.1810 (Core) 
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# uname -r
    3.10.0-957.el7.x86_64
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# uname -m
    x86_64
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           3.7G        239M        3.0G         24M        446M        3.2G
    Swap:          3.9G          0B        3.9G
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# mysql --version
    mysql  Ver 15.1 Distrib 5.5.64-MariaDB, for Linux (x86_64) using readline 5.1
    [root@node102.yinzhengjie.org.cn ~]# 
    node102.yinzhengjie.org.cn节点信息
    [root@node103.yinzhengjie.org.cn ~]# cat /etc/redhat-release 
    CentOS Linux release 7.6.1810 (Core) 
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# uname -r
    3.10.0-957.el7.x86_64
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# uname -m
    x86_64
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           3.7G        245M        2.9G        8.6M        552M        3.2G
    Swap:          3.9G          0B        3.9G
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# mysql --verwsion
    mysql: unknown option '--verwsion'
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# mysql --version
    mysql  Ver 15.1 Distrib 5.5.64-MariaDB, for Linux (x86_64) using readline 5.1
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# 
    node103.yinzhengjie.org.cn节点信息

    2>.编辑node102.yinzhengjie.org.cn节点的my.cnf配置文件

    [root@node102.yinzhengjie.org.cn ~]# cat /etc/my.cnf
    [mysqld]
    server-id                = 102                      #为当前节点设置一个全局惟一的ID号,用于标识当前MySQL实例
    binlog_format            = row                     #推荐使用基于行数据的复制
    log_bin                  = /data/mysql/logbin/master-102     #需要启用二进制日志,生产环境建议和数据文件分开放存放
    relay_log                = relay-log-102              #relay log的文件路径,默认值hostname-relay-bin
    relay_log_index          = relay-log-102.index           #默认值hostname-relay-bin.index
    auto_increment_offset    = 1                          #指定当前实例自动增长的开始数字
    auto_increment_increment = 2                        #指定当前实例自动增长的幅度
    character-set-server     = utf8mb4  
    default_storage_engine   = InnoDB
    datadir                  = /var/lib/mysql
    socket                   = /var/lib/mysql/mysql.sock
    
    [mysqld_safe]
    log-error                = /var/log/mariadb/mariadb.log
    pid-file                 = /var/run/mariadb/mariadb.pid
    
    !includedir /etc/my.cnf.d
    
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# 

    3>.启动node102.yinzhengjie.org.cn节点的MySQL实例

    [root@node102.yinzhengjie.org.cn ~]# mkdir -pv /data/mysql/logbin/      #创建二进制日志存放目录
    mkdir: created directory ‘/data’
    mkdir: created directory ‘/data/mysql’
    mkdir: created directory ‘/data/mysql/logbin/’
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# ll /data/mysql/logbin/
    total 0
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# mkdir -pv /data/mysql/logbin/     #创建二进制日志存放目录
    [root@node102.yinzhengjie.org.cn ~]# ll -d /data/mysql/logbin/
    drwxr-xr-x 2 root root 6 Nov  9 06:46 /data/mysql/logbin/
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# chown -R mysql:mysql /data/mysql/logbin/  #切记要授权!
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# ll -d /data/mysql/logbin/
    drwxr-xr-x 2 mysql mysql 6 Nov  9 06:46 /data/mysql/logbin/
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# chown -R mysql:mysql /data/mysql/logbin/  #切记要授权!
    [root@node102.yinzhengjie.org.cn ~]# ll /data/mysql/logbin/
    total 0
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# ll /var/lib/mysql/
    total 0
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# systemctl start mariadb      #启动数据库
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# ll /data/mysql/logbin/
    total 960
    -rw-rw---- 1 mysql mysql  27093 Nov  9 07:11 master-102.000001
    -rw-rw---- 1 mysql mysql 942126 Nov  9 07:11 master-102.000002
    -rw-rw---- 1 mysql mysql    245 Nov  9 07:11 master-102.000003
    -rw-rw---- 1 mysql mysql    111 Nov  9 07:11 master-102.index
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# ll /var/lib/mysql/
    total 37852
    -rw-rw---- 1 mysql mysql    16384 Nov  9 07:11 aria_log.00000001
    -rw-rw---- 1 mysql mysql       52 Nov  9 07:11 aria_log_control
    -rw-rw---- 1 mysql mysql 18874368 Nov  9 07:11 ibdata1
    -rw-rw---- 1 mysql mysql  5242880 Nov  9 07:11 ib_logfile0
    -rw-rw---- 1 mysql mysql  5242880 Nov  9 07:11 ib_logfile1
    drwx------ 2 mysql mysql     4096 Nov  9 07:11 mysql
    srwxrwxrwx 1 mysql mysql        0 Nov  9 07:11 mysql.sock
    drwx------ 2 mysql mysql     4096 Nov  9 07:11 performance_schema
    drwx------ 2 mysql mysql        6 Nov  9 07:11 test
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]#
    [root@node102.yinzhengjie.org.cn ~]# systemctl start mariadb      #启动数据库

    4>.在node102.yinzhengjie.org.cn节点上创建有复制权限的用户账号

    [root@node102.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 42
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW MASTER LOGS;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-102.000001 |     27093 |
    | master-102.000002 |    942126 |
    | master-102.000003 |       245 |
    +-------------------+-----------+
    rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'copy'@'172.30.1.10%' IDENTIFIED BY 'yinzhengjie';
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW MASTER LOGS;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-102.000001 |     27093 |
    | master-102.000002 |    942126 |
    | master-102.000003 |       408 |
    +-------------------+-----------+
    rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SELECT user,host,password FROM mysql.user;
    +------+----------------------------+-------------------------------------------+
    | user | host                       | password                                  |
    +------+----------------------------+-------------------------------------------+
    | root | localhost                  |                                           |
    | root | node102.yinzhengjie.org.cn |                                           |
    | root | 127.0.0.1                  |                                           |
    | root | ::1                        |                                           |
    |      | localhost                  |                                           |
    |      | node102.yinzhengjie.org.cn |                                           |
    | copy | 172.30.1.10%               | *BD0B1F48FDC55BD27555FC2F22FF29A68A25A1D7 |
    +------+----------------------------+-------------------------------------------+
    7 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> 
    MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'copy'@'172.30.1.10%' IDENTIFIED BY 'yinzhengjie';

    5>.编辑node103.yinzhengjie.org.cn节点的my.cnf配置文件

    [root@node103.yinzhengjie.org.cn ~]# cat /etc/my.cnf
    [mysqld]
    server-id                = 103
    binlog_format            = row
    log_bin                  = /data/mysql/logbin/master-103
    relay_log                = relay-log-103
    relay_log_index          = relay-log-103.index
    auto_increment_offset    = 2        #注意这个起始位置不要和node102.yinzhengjie.org.cn配置一样哟
    auto_increment_increment = 2
    character-set-server     = utf8mb4
    default_storage_engine   = InnoDB
    datadir                  = /var/lib/mysql
    socket                   = /var/lib/mysql/mysql.sock
    
    [mysqld_safe]
    log-error                = /var/log/mariadb/mariadb.log
    pid-file                 = /var/run/mariadb/mariadb.pid
    
    !includedir /etc/my.cnf.d
    [root@node103.yinzhengjie.org.cn ~]# 

    6>.启动node103.yinzhengjie.org.cn节点的MySQL实例

    [root@node103.yinzhengjie.org.cn ~]# install -d /data/mysql/logbin -o mysql -g mysql    #创建存放的二进制目录
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# ll -d /data/mysql/logbin/
    drwxr-xr-x 2 mysql mysql 6 Nov  9 07:24 /data/mysql/logbin/
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# ll /data/mysql/logbin/
    total 0
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# install -d /data/mysql/logbin -o mysql -g mysql    #创建存放的二进制目录
    [root@node103.yinzhengjie.org.cn ~]# ll /var/lib/mysql/
    total 0
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# ll /data/mysql/logbin/
    total 0
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# systemctl start mariadb
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# ll /var/lib/mysql/
    total 37852
    -rw-rw---- 1 mysql mysql    16384 Nov  9 07:30 aria_log.00000001
    -rw-rw---- 1 mysql mysql       52 Nov  9 07:30 aria_log_control
    -rw-rw---- 1 mysql mysql 18874368 Nov  9 07:30 ibdata1
    -rw-rw---- 1 mysql mysql  5242880 Nov  9 07:30 ib_logfile0
    -rw-rw---- 1 mysql mysql  5242880 Nov  9 07:30 ib_logfile1
    drwx------ 2 mysql mysql     4096 Nov  9 07:30 mysql
    srwxrwxrwx 1 mysql mysql        0 Nov  9 07:30 mysql.sock
    drwx------ 2 mysql mysql     4096 Nov  9 07:30 performance_schema
    drwx------ 2 mysql mysql        6 Nov  9 07:30 test
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# ll /data/mysql/logbin/
    total 960
    -rw-rw---- 1 mysql mysql  27093 Nov  9 07:30 master-103.000001
    -rw-rw---- 1 mysql mysql 942126 Nov  9 07:30 master-103.000002
    -rw-rw---- 1 mysql mysql    245 Nov  9 07:30 master-103.000003
    -rw-rw---- 1 mysql mysql    111 Nov  9 07:30 master-103.index
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# systemctl start mariadb

    7>.配置两节点互为主主节点并验证

    [root@node103.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 23
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> CHANGE MASTER TO 
        -> MASTER_HOST='172.30.1.102', 
        -> MASTER_USER='copy', 
        -> MASTER_PASSWORD='yinzhengjie', 
        -> MASTER_PORT=3306,
        -> MASTER_LOG_FILE='master-102.000003', 
        -> MASTER_LOG_POS=245,
        -> MASTER_CONNECT_RETRY=10;
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW PROCESSLIST;
    +----+------+-----------+------+---------+------+-------+------------------+----------+
    | Id | User | Host      | db   | Command | Time | State | Info             | Progress |
    +----+------+-----------+------+---------+------+-------+------------------+----------+
    | 23 | root | localhost | NULL | Query   |    0 | NULL  | SHOW PROCESSLIST |    0.000 |
    +----+------+-----------+------+---------+------+-------+------------------+----------+
    row in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> START SLAVE;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]>
    MariaDB [(none)]> SHOW PROCESSLISTG
    *************************** 1. row ***************************
          Id: 23
        User: root
        Host: localhost
          db: NULL
     Command: Query
        Time: 0
       State: NULL
        Info: SHOW PROCESSLIST
    Progress: 0.000
    *************************** 2. row ***************************
          Id: 56
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 9
       State: Waiting for master to send event
        Info: NULL
    Progress: 0.000
    *************************** 3. row ***************************
          Id: 57
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 1169
       State: Slave has read all relay log; waiting for the slave I/O thread to update it
        Info: NULL
    Progress: 0.000
    rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW SLAVE STATUSG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.30.1.102
                      Master_User: copy
                      Master_Port: 3306
                    Connect_Retry: 10
                  Master_Log_File: master-102.000003
              Read_Master_Log_Pos: 408
                   Relay_Log_File: relay-log-103.000002
                    Relay_Log_Pos: 693
            Relay_Master_Log_File: master-102.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 408
                  Relay_Log_Space: 985
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 102
    row in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SELECT user,host,password FROM mysql.user;
    +------+----------------------------+-------------------------------------------+
    | user | host                       | password                                  |
    +------+----------------------------+-------------------------------------------+
    | root | localhost                  |                                           |
    | root | node103.yinzhengjie.org.cn |                                           |
    | root | 127.0.0.1                  |                                           |
    | root | ::1                        |                                           |
    |      | localhost                  |                                           |
    |      | node103.yinzhengjie.org.cn |                                           |
    | copy | 172.30.1.10%               | *BD0B1F48FDC55BD27555FC2F22FF29A68A25A1D7 |
    +------+----------------------------+-------------------------------------------+
    rows in set (0.00 sec)
    
    MariaDB [(none)]> SHOW MASTER LOGS;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-103.000001 |     27093 |
    | master-103.000002 |    942126 |
    | master-103.000003 |       245 |
    +-------------------+-----------+
    rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> QUIT
    Bye
    [root@node103.yinzhengjie.org.cn ~]# 
    配置node103.yinzhengjie.org.cn为node102.yinzhengjie.org.cn从节点详细过程
    [root@node102.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 54
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW PROCESSLISTG
    *************************** 1. row ***************************
          Id: 54
        User: root
        Host: localhost
          db: NULL
     Command: Query
        Time: 0
       State: NULL
        Info: SHOW PROCESSLIST
    Progress: 0.000
    *************************** 2. row ***************************
          Id: 55
        User: copy
        Host: node103.yinzhengjie.org.cn:45912
          db: NULL
     Command: Binlog Dump
        Time: 22
       State: Master has sent all binlog to slave; waiting for binlog to be updated
        Info: NULL
    Progress: 0.000
    2 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW MASTER LOGS;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-102.000001 |     27093 |
    | master-102.000002 |    942126 |
    | master-102.000003 |       408 |
    +-------------------+-----------+
    3 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> QUIT
    Bye
    [root@node102.yinzhengjie.org.cn ~]# 
    查看node102.yinzhengjie.org.cn节点的线程数
    [root@node103.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 23
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW PROCESSLISTG
    *************************** 1. row ***************************
          Id: 23
        User: root
        Host: localhost
          db: NULL
     Command: Query
        Time: 0
       State: NULL
        Info: SHOW PROCESSLIST
    Progress: 0.000
    *************************** 2. row ***************************
          Id: 56
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 9
       State: Waiting for master to send event
        Info: NULL
    Progress: 0.000
    *************************** 3. row ***************************
          Id: 57
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 1169
       State: Slave has read all relay log; waiting for the slave I/O thread to update it
        Info: NULL
    Progress: 0.000
    3 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> QUIT
    Bye
    [root@node103.yinzhengjie.org.cn ~]#  
    查看node103.yinzhengjie.org.cn节点的线程数
    [root@node102.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 56
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    4 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> CREATE DATABASE devops;
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> USE devops
    Database changed
    MariaDB [devops]> 
    MariaDB [devops]> CREATE TABLE students(id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,name VARCHAR(30) NOT NULL,sex ENUM('boy','girl') DEFAULT 'boy',age TINYINT UNSIGNED,mobile CHAR(11),address VARCHAR(50));
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> DESC students;
    +---------+---------------------+------+-----+---------+----------------+
    | Field   | Type                | Null | Key | Default | Extra          |
    +---------+---------------------+------+-----+---------+----------------+
    | id      | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
    | name    | varchar(30)         | NO   |     | NULL    |                |
    | sex     | enum('boy','girl')  | YES  |     | boy     |                |
    | age     | tinyint(3) unsigned | YES  |     | NULL    |                |
    | mobile  | char(11)            | YES  |     | NULL    |                |
    | address | varchar(50)         | YES  |     | NULL    |                |
    +---------+---------------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)
    
    MariaDB [devops]> INSERT INTO students SET name='尹正杰',age=27,address='北京';
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> SELECT * FROM students;
    +----+-----------+------+------+--------+---------+
    | id | name      | sex  | age  | mobile | address |
    +----+-----------+------+------+--------+---------+
    |  1 | 尹正杰    | boy  |   27 | NULL   | 北京    |
    +----+-----------+------+------+--------+---------+
    1 row in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> SHOW MASTER LOGS;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-102.000001 |     27093 |
    | master-102.000002 |    942126 |
    | master-102.000003 |       972 |
    +-------------------+-----------+
    3 rows in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> SHOW MASTER STATUS;
    +-------------------+----------+--------------+------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    | master-102.000003 |      972 |              |                  |
    +-------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> QUIT
    Bye
    [root@node102.yinzhengjie.org.cn ~]# 
    [root@node102.yinzhengjie.org.cn ~]# 
    在node102.yinzhengjie.org.cn中创建测试数据
    [root@node103.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 62
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | devops             |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> USE devops
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [devops]> 
    MariaDB [devops]> SHOW TABLES;
    +------------------+
    | Tables_in_devops |
    +------------------+
    | students         |
    +------------------+
    1 row in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> SELECT * FROM students;
    +----+-----------+------+------+--------+---------+
    | id | name      | sex  | age  | mobile | address |
    +----+-----------+------+------+--------+---------+
    |  1 | 尹正杰    | boy  |   27 | NULL   | 北京    |
    +----+-----------+------+------+--------+---------+
    1 row in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> QUIT
    Bye
    [root@node103.yinzhengjie.org.cn ~]# 
    在node103.yinzhengjie.org.cn节点上可以看到和node102.yinzhengjie.org.cn节点一样的数据(配置成功)
    [root@node102.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 59
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW PROCESSLISTG
    *************************** 1. row ***************************
          Id: 55
        User: copy
        Host: node103.yinzhengjie.org.cn:45912
          db: NULL
     Command: Binlog Dump
        Time: 1176
       State: Master has sent all binlog to slave; waiting for binlog to be updated
        Info: NULL
    Progress: 0.000
    *************************** 2. row ***************************
          Id: 59
        User: root
        Host: localhost
          db: NULL
     Command: Query
        Time: 0
       State: NULL
        Info: SHOW PROCESSLIST
    Progress: 0.000
    2 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> CHANGE MASTER TO 
        -> MASTER_HOST='172.30.1.103', 
        -> MASTER_USER='copy', 
        -> MASTER_PASSWORD='yinzhengjie', 
        -> MASTER_PORT=3306,
        -> MASTER_LOG_FILE='master-103.000003', 
        -> MASTER_LOG_POS=245,
        -> MASTER_CONNECT_RETRY=10;
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> START SLAVE;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW PROCESSLISTG
    *************************** 1. row ***************************
          Id: 55
        User: copy
        Host: node103.yinzhengjie.org.cn:45912
          db: NULL
     Command: Binlog Dump
        Time: 1224
       State: Master has sent all binlog to slave; waiting for binlog to be updated
        Info: NULL
    Progress: 0.000
    *************************** 2. row ***************************
          Id: 59
        User: root
        Host: localhost
          db: NULL
     Command: Query
        Time: 0
       State: NULL
        Info: SHOW PROCESSLIST
    Progress: 0.000
    *************************** 3. row ***************************
          Id: 60
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 7
       State: Waiting for master to send event
        Info: NULL
    Progress: 0.000
    *************************** 4. row ***************************
          Id: 61
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 7
       State: Slave has read all relay log; waiting for the slave I/O thread to update it
        Info: NULL
    Progress: 0.000
    4 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW SLAVE STATUSG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.30.1.103
                      Master_User: copy
                      Master_Port: 3306
                    Connect_Retry: 10
                  Master_Log_File: master-103.000003
              Read_Master_Log_Pos: 245
                   Relay_Log_File: relay-log-102.000002
                    Relay_Log_Pos: 530
            Relay_Master_Log_File: master-103.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 245
                  Relay_Log_Space: 822
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 103
    1 row in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> QUIT
    Bye
    [root@node102.yinzhengjie.org.cn ~]# 
    配置node102.yinzhengjie.org.cn为node103.yinzhengjie.org.cn从节点详细过程
    [root@node102.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 62
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW PROCESSLISTG
    *************************** 1. row ***************************
          Id: 55
        User: copy
        Host: node103.yinzhengjie.org.cn:45912
          db: NULL
     Command: Binlog Dump
        Time: 1316
       State: Master has sent all binlog to slave; waiting for binlog to be updated
        Info: NULL
    Progress: 0.000
    *************************** 2. row ***************************
          Id: 60
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 99
       State: Waiting for master to send event
        Info: NULL
    Progress: 0.000
    *************************** 3. row ***************************
          Id: 61
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 99
       State: Slave has read all relay log; waiting for the slave I/O thread to update it
        Info: NULL
    Progress: 0.000
    *************************** 4. row ***************************
          Id: 62
        User: root
        Host: localhost
          db: NULL
     Command: Query
        Time: 0
       State: NULL
        Info: SHOW PROCESSLIST
    Progress: 0.000
    4 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW MASTER LOGS;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-102.000001 |     27093 |
    | master-102.000002 |    942126 |
    | master-102.000003 |       972 |
    +-------------------+-----------+
    3 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> QUIT
    Bye
    [root@node102.yinzhengjie.org.cn ~]# 
    查看node102.yinzhengjie.org.cn节点的线程数
    [root@node103.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 65
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW PROCESSLISTG
    *************************** 1. row ***************************
          Id: 56
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 1377
       State: Waiting for master to send event
        Info: NULL
    Progress: 0.000
    *************************** 2. row ***************************
          Id: 57
        User: system user
        Host: 
          db: NULL
     Command: Connect
        Time: 803
       State: Slave has read all relay log; waiting for the slave I/O thread to update it
        Info: NULL
    Progress: 0.000
    *************************** 3. row ***************************
          Id: 64
        User: copy
        Host: node102.yinzhengjie.org.cn:43768
          db: NULL
     Command: Binlog Dump
        Time: 160
       State: Master has sent all binlog to slave; waiting for binlog to be updated
        Info: NULL
    Progress: 0.000
    *************************** 4. row ***************************
          Id: 65
        User: root
        Host: localhost
          db: NULL
     Command: Query
        Time: 0
       State: NULL
        Info: SHOW PROCESSLIST
    Progress: 0.000
    4 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> SHOW MASTER LOGS;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-103.000001 |     27093 |
    | master-103.000002 |    942126 |
    | master-103.000003 |       245 |
    +-------------------+-----------+
    3 rows in set (0.00 sec)
    
    MariaDB [(none)]> QUIT
    Bye
    [root@node103.yinzhengjie.org.cn ~]# 
    [root@node103.yinzhengjie.org.cn ~]# 
    查看node103.yinzhengjie.org.cn节点的线程数
    [root@node103.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 66
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> USE devops;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [devops]> 
    MariaDB [devops]> SHOW TABLES;
    +------------------+
    | Tables_in_devops |
    +------------------+
    | students         |
    +------------------+
    1 row in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> SELECT * FROM students;
    +----+-----------+------+------+--------+---------+
    | id | name      | sex  | age  | mobile | address |
    +----+-----------+------+------+--------+---------+
    |  1 | 尹正杰    | boy  |   27 | NULL   | 北京    |
    +----+-----------+------+------+--------+---------+
    1 row in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> INSERT INTO students SET name='yinzhengjie',age=27,address='shanxi';
    Query OK, 1 row affected (0.01 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> SELECT * FROM students;
    +----+-------------+------+------+--------+---------+
    | id | name        | sex  | age  | mobile | address |
    +----+-------------+------+------+--------+---------+
    |  1 | 尹正杰      | boy  |   27 | NULL   | 北京    |
    |  2 | yinzhengjie | boy  |   27 | NULL   | shanxi  |
    +----+-------------+------+------+--------+---------+
    2 rows in set (0.00 sec)
    
    MariaDB [devops]> QUIT
    Bye
    [root@node103.yinzhengjie.org.cn ~]# 
    在node103.yinzhengjie.org.cn中创建测试数据
    [root@node102.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 63
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> USE devops
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [devops]> 
    MariaDB [devops]> SHOW TABLES;
    +------------------+
    | Tables_in_devops |
    +------------------+
    | students         |
    +------------------+
    1 row in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> SELECT * FROM students;
    +----+-------------+------+------+--------+---------+
    | id | name        | sex  | age  | mobile | address |
    +----+-------------+------+------+--------+---------+
    |  1 | 尹正杰      | boy  |   27 | NULL   | 北京    |
    |  2 | yinzhengjie | boy  |   27 | NULL   | shanxi  |
    +----+-------------+------+------+--------+---------+
    2 rows in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> QUIT
    Bye
    [root@node102.yinzhengjie.org.cn ~]# 
    在node102.yinzhengjie.org.cn节点上可以看到和node103.yinzhengjie.org.cn节点一样的数据(配置成功)

     

    三.主主复制在生产环境中容易出现的问题刨析

    1>.在node102.yinzhengjie.org.cn节点的操作

    [root@node102.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 64
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> 
    MariaDB [(none)]> 
    MariaDB [(none)]> USE devops
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [devops]> 
    MariaDB [devops]> SELECT * FROM students;
    +----+-------------+------+------+--------+---------+
    | id | name        | sex  | age  | mobile | address |
    +----+-------------+------+------+--------+---------+
    |  1 | 尹正杰      | boy  |   27 | NULL   | 北京    |
    |  2 | yinzhengjie | boy  |   27 | NULL   | shanxi  |
    +----+-------------+------+------+--------+---------+
    2 rows in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> INSERT INTO students (name,age,mobile,address) VALUES ('Jason Yin',18,10000,'beijing'),('Jay','40',10086,'Taiwan');            #我们同时往表里插入2条记录
    Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 MariaDB [devops]> MariaDB [devops]> SELECT * FROM students;          #不难发现,node102.yinzhengjie.org.cn自动增长是基于奇数的 +----+-------------+------+------+--------+---------+ | id | name | sex | age | mobile | address | +----+-------------+------+------+--------+---------+ | 1 | 尹正杰 | boy | 27 | NULL | 北京 | | 2 | yinzhengjie | boy | 27 | NULL | shanxi | | 3 | Jason Yin | boy | 18 | 10000 | beijing | | 5 | Jay | boy | 40 | 10086 | Taiwan | +----+-------------+------+------+--------+---------+ 4 rows in set (0.00 sec) MariaDB [devops]> MariaDB [devops]> QUIT Bye [root@node102.yinzhengjie.org.cn ~]#

    2>.在node103.yinzhengjie.org.cn节点的操作

    [root@node103.yinzhengjie.org.cn ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 68
    Server version: 5.5.64-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> USE devops
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [devops]> 
    MariaDB [devops]> SELECT * FROM students;      #我们可以发现数据已经同步过来啦!
    +----+-------------+------+------+--------+---------+
    | id | name        | sex  | age  | mobile | address |
    +----+-------------+------+------+--------+---------+
    |  1 | 尹正杰      | boy  |   27 | NULL   | 北京    |
    |  2 | yinzhengjie | boy  |   27 | NULL   | shanxi  |
    |  3 | Jason Yin   | boy  |   18 | 10000  | beijing |
    |  5 | Jay         | boy  |   40 | 10086  | Taiwan  |
    +----+-------------+------+------+--------+---------+
    4 rows in set (0.00 sec)
    
    MariaDB [devops]> 
    MariaDB [devops]> INSERT students (age,sex,name,mobile,address) VALUES (28,'girl','Gloria Tang Tsz-Kei',null,'Hong Kong');      #我们再次插入一条记录
    Query OK,
    1 row affected (0.00 sec) MariaDB [devops]> MariaDB [devops]> SELECT * FROM students;        #我们发现新添加的记录自动增长ID竟然跳过了4,而是直接使用6,起始原因在于在添加记录之前就已经存在最大id数字5啦,虽说自动增长的id依旧是偶数,但这个问题我们得考虑一下哟~ +----+---------------------+------+------+--------+-----------+ | id | name | sex | age | mobile | address | +----+---------------------+------+------+--------+-----------+ | 1 | 尹正杰 | boy | 27 | NULL | 北京 | | 2 | yinzhengjie | boy | 27 | NULL | shanxi | | 3 | Jason Yin | boy | 18 | 10000 | beijing | | 5 | Jay | boy | 40 | 10086 | Taiwan | | 6 | Gloria Tang Tsz-Kei | girl | 28 | NULL | Hong Kong | +----+---------------------+------+------+--------+-----------+ 5 rows in set (0.00 sec) MariaDB [devops]> MariaDB [devops]> QUIT Bye [root@node103.yinzhengjie.org.cn ~]# [root@node103.yinzhengjie.org.cn ~]#
  • 相关阅读:
    一步步学敏捷开发:4、Scrum的3种角色
    一步步学敏捷开发:3、如何写用户故事
    一步步学敏捷开发:5. Scrum的4种会议
    一步步学敏捷开发:1、敏捷开发及Scrum介绍
    用户故事(User Story)
    对敏捷开发的一点理解
    Java学习之Iterator(迭代器)的一般用法 (转)
    希尔排序
    递归全排列字符串
    Java中equals和==的区别
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/11824071.html
Copyright © 2011-2022 走看看