MySQL5.7主从复制

MySQL主从复制

前言:

A、全年无故障率(非计划内故障停机)

99.9%                 ----> 0.001*365*24*60=525.6  min
99.99%                ----> 0.0001*365*24*60=52.56 min
99.999%               ----> 0.0001*365*24*60=5.256 min

B、高可用架构方案

负载均衡:有一定的高可用性 
LVS  Nginx
主备系统:有高可用性,但是需要切换,是单活的架构
KA ,   MHA, MMM
真正高可用(多活系统): 
NDB Cluster  Oracle RAC  Sysbase cluster   , InnoDB Cluster(MGR),PXC , MGC

一、主从复制介绍

1.1. 基于二进制日志复制的
1.2. 主库的修改操作会记录二进制日志
1.3. 从库会请求新的二进制日志并回放,最终达到主从数据同步
1.4. 主从复制核心功能:
辅助备份,处理物理损坏                   
扩展新型的架构:高可用,高性能,分布式架构等

二、主从复制搭建(基于binlog)

搭建环境:

  • 主库:192.168.1.111
  • 从库:192.168.1.112

前提条件:

1、两台以上的Mysql实例(独立的主机或者多实例),保证server_id(>0)、server_uuid不同

2、主库开启二进制日志(binlog)、(主从服务器同步时间)

3、主库要开启一个专业的复制用户(给replication slave权限)

4、“补课的操作”,如果要新加一个从库,那么要把主库的数据备份,然后恢复到从库。

5、通知从库可以进行自动复制,确认复制的起点(使用命令change master to 主库ip port user password 起点)

6、在从库启动专用的复制线程(start slave)

2.1、配置文件查看

2.1.1、主库配置文件查看

[root@master ~]# cat  /etc/my.cnf
[mysqld]
user=mysql
basedir=/app/mysql
datadir=/data/mysql
server_id=6		#多台MySQL中,server_id必须是唯一的
port=3306
socket=/tmp/mysql.sock
innodb_data_file_path=ibdata1:12M;ibdata2:512M:autoextend
autocommit=0
server_id=6
log_bin=/data/mysql/binlog/mysql-bin  #开启binlog日志
sync_binlog=1
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
slow_query_log=1 
slow_query_log_file=/data/mysql/slow.log 
long_query_time=0.1  
log_queries_not_using_indexes
[mysql]
socket=/tmp/mysql.sock
prompt=tzh>

2.1.2、从库配置文件查看

[mysqld]
user=mysql
basedir=/app/mysql
datadir=/data/mysql
server_id=7		#多台MySQL中,server_id必须是唯一的
port=3306
socket=/tmp/mysql.sock
innodb_data_file_path=ibdata1:12M;ibdata2:512M:autoextend
autocommit=0
server_id=6
log_bin=/data/mysql/binlog/mysql-bin  #开启binlog日志
sync_binlog=1
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
slow_query_log=1 
slow_query_log_file=/data/mysql/slow.log 
long_query_time=0.1  
log_queries_not_using_indexes
[mysql]
socket=/tmp/mysql.sock
prompt=tzh>

2.2、补课操控省略,因为此处两台MySQL都是新部署的

2.3、查看server_id、server_uuid

主库:

[root@master ~]# mysql -p123  -e "select @@server_id"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+
| @@server_id |
+-------------+
|           6 |
+-------------+
[root@master ~]# mysql -p123  -e "select @@server_uuid"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------------------------+
| @@server_uuid                        |
+--------------------------------------+
| d6caac23-2863-11eb-9bba-000c29af70c3 |
+--------------------------------------+
[root@master ~]# mysql -p123  -e "select @@log_bin"; #1表示开启
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------+
| @@log_bin |
+-----------+
|         1 |
+-----------+

从库:

[root@slave1 ~]# mysql -p123  -e "select @@server_id"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+
| @@server_id |
+-------------+
|           7 |
+-------------+
[root@slave1 ~]# mysql -p123  -e "select @@server_uuid"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------------------------+
| @@server_uuid                        |
+--------------------------------------+
| 49fea94e-2917-11eb-9da2-000c291cb61f |
+--------------------------------------+
[root@slave1 ~]# mysql -p123  -e "select @@log_bin"; #1表示开启
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------+
| @@log_bin |
+-----------+
|         1 |
+-----------+

2.4、开启一个专用的复制用户(主库)

[root@master ~]# mysql -p123 -e "grant replication slave on *.* to tzh@'%' identified by '123'";

# 查看当前在使用的binlog文件
[root@master ~]#  mysql -p123 -e "SHOW MASTER STATUSG";
mysql: [Warning] Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
             File: mysql-bin.000004   #关注这个
         Position: 678932			  #关注这个
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: d6caac23-2863-11eb-9bba-000c29af70c3:1-1846,
f9511c39-1e28-11eb-8a8e-000c29af70c3:1-16

2.5、告知从库关键复制信息(从库)

mysql -p123 -e "CHANGE MASTER TO
  MASTER_HOST='192.168.1.111',   #主库ip
  MASTER_USER='tzh',			 #刚刚创建的用户
  MASTER_PASSWORD='123',		 #密码
  MASTER_PORT=3306,				 #主库端口
  MASTER_LOG_FILE='mysql-bin.000004', #主库在使用的binlog二进制文件
  MASTER_LOG_POS=678932,			  #主库对应的POS
  MASTER_CONNECT_RETRY=10";			  # 尝试重连次数

# 开启主从专用线程
mysql -p123 -e "start slave";

#查看状态,Slave_IO_Running、Slave_SQL_Running都是yes 说明主从部署成功!
[root@slave1 ~]# mysql -p123 -e "show slave  status G" | grep Running
mysql: [Warning] Using a password on the command line interface can be insecure.
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
  
# 如果不成功执行以下命令重新开始部署
mysql -p123 -e "stop slave;reset slave all";
原文地址:https://www.cnblogs.com/hsyw/p/13997559.html