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 STATUS\G";
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";