复制的原理图 : 
MySQL复制过程分成三步:
1 master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
2 slave将master的binary log events拷贝到它的中继日志(relay log);
3 slave重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL复制是异步的且串行化的
复制的原则
- 每个slave只能有一个master
- 每个slave只能有唯一的服务ID
- 每个master可以有多个slave
复制的最大文件,延时
**window没有my.ini文件 : 创建my.ini文件在安装目录 使用 mysqld —defaults-file=”E:\musql\my.ini” 命令然后重启服务
1.主机配置 : 找到my.ini文件(我的linux在 etc/my.ini文件下)
配置文件中添加以下配置:主从配置在mysqld节点下,都是小写
server-id=1 #服务器 id ,主从机器在同一局域网内必须全局唯一,不能相同
log-bin=mysql-bin #二进制文件存放路径,非必须,mysql8后默认存放/var/lib/mysql这里
binlog-do-db=db1 #待同步的数据库,如果有多个以空格隔开db1 db2 db3 ….,主从复制搭建成功在创建该表
binlog-ignore-db=mysql #不同步的数据 如果有多个以空格隔开db1 db2 db3 ….
重启主机 : systemctl restart mysql
检查服务的开启 : systemctl status mysql
2.从机的配置(配置其他mysql的my.cnf文件)
在配置文件中添加以下配置:
server-id=2 #设置server-id,必须唯一
relay-log=mysql-relay
3.关闭主机从机
systemctl stop firewalld ;
4.在主机创建用户,检查状态
连接上数据库 :
创建用户 :
CREATE USER ‘slave1’@’%’ IDENTIFIED WITH mysql_native_password BY ‘962464’;
GRANT ALL PRIVILEGES ON . TO ‘slave1’@’%’;
FLUSH PRIVILEGES;
查看状态 : show master status ;
5.从机操作:
change master to master_host=’192.168.31.239’,#登录之后,执行下面,ip地址是主库的ip
master_user=’slave1’, #上面配置的账号
master_password=’962464’, #后面为主机中创建用户的密码
master_log_file=’binlog.000002’,master_log_pos=107;
#log_flie主机配置中show master status中的file的字段值
#其中master_log_pos是status中的Position字段值
mysql> change master to master_host=’192.168.31.239’,
-> master_user=’slave1’,
-> master_password=’962464’,
-> master_log_file=’mysql-bin.000002’,master_log_pos=156;
如何重新设置主从复制:
stop slave;
reset master;
启动从机服务 : start slave ;
查看从机状态 : show slave status\G;
注意下面的字段 : 都为Yes搭建成功

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
要是不是有no,下面是解决办法
https://www.cnblogs.com/l-hh/p/9922548.html
现在主机创建库,表,添加数据,从机都能获取了
**如果误操作,导致主从同步异常,怎么办?
最重要的一步就是马上关闭主从同步:
stop slave;
再去查看一下状态
show master status;
接着马上做一步操作:
change master to master_host=’’, master_user=’repl’, master_password=’’, master_log_file=’’, master_log_pos=xx,
接着打开主从同步:
start slave;
然后查看是否恢复正常。
