原理:
实现整个主从复制,需要由sever服务器上的IO进程和Sql进程共同完成.
要实现主从复制,首先必须打开Master端的binary log(bin-log)功能,因为MySQL主从复制过程实际上就是Slave从Master端获取相应的二进制日志,然后再在自己slave端完全按照顺序执行日志中所记录的各种操作。
===========================================
1. 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。
2. 从库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。
3. 从库SQL线程读取中继日志中的事件,将其执行到从数据库之上。
===========================================
master 负责写 -----A
slave relay-log -----B
I/O 负责通信读取binlog日志
SQL 负责写数据
主机器
进入MySQL配文件开log日志文件
vim /etc/my.cnf
[mysqld] #在这个标签添加如下代码
server-id=1 #设置一个ID主从不能相同
log-bin = mylog #开启日志文件
主数据库创一个用户允许所有用户允许其他人登录:
grant replication slave,reload,super on *.* to 'tom'@'%' identified by 'Tom@1234';
flush privileges; #刷新配置
show master status\G #查看bin-log信息
从机器
vim /etc/my.cnf
[mysqld] #在这个标签添加如下代码
server-id=1 #设置一个ID主从不能相同
master-info-repository=TABLE
relay-log-info-repository=TABLE
进入MySQL执行sql语句:
\e #进入编辑器在里面可以些入长命令
chnage master to
master_hosts='master', #要写域名 要提前配置解析 不然无法使用域名
master_user='tom', #通过指定用户连接进入数据库
master_password='Tom@1234', #连接用户的密码
master_log_file='mylog.000001', #bin-log日志
master_log_pos=154; #连接起始位置
;
start slave; #启动slave进程
show slave status\G #查看I/o进程和SQL进程是否显示yes
主机器
vim /etc/my.cnf
[mysqld]
server-id=1
log-bin=mylog
gtid_mode = ON
enforce_gtid_consistency=1
systemctl ratart mysqld #重启MySQL
进入数据库创建连接用户:
grant replication slave,reload,super on *.* to 'tom'@'%' identified by 'Tom@1234';
从机器
vim /etc/my.cnf
server-id=2
gtid_mode = ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
systemctl restart mysqld #重启mysql
进入MySQL数据库:
\e
change master to
master_hosts='192.168.118.211',
master_user='tom',
master_password='Tom@1234',
master_auto_position=1;
;
成功后执行启动slave进程
start slave; #启动所有slave进程
show slave status; #查看所有进程
------------------------------------------------------------------
下面配置适用多slave进程使用:
start slave for change 'master1'; #启动指定一个信道使用
reset slave; #重置全部slave
reset slave for change 'master1' #重置指定一个
stop slave; #停止全部slave