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 ~]#
[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 ~]#
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 ~]# 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 ~]# 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 ~]#
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)]>
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 ~]# 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 ~]#
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 ~]#
[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 ~]#
[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 ~]#
[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 ~]#
[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 ~]#
[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 ~]#
[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 ~]#
[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 ~]#
[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 ~]#
[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 ~]#
三.主主复制在生产环境中容易出现的问题刨析
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 ~]#