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 ~]#
原文地址:https://www.cnblogs.com/yinzhengjie/p/11824071.html