Mysql主从复制

£可爱£侵袭症+ 提交于 2020-02-02 04:47:52

1. 复制原理

  1. master将改变记录到二进制日志(binary log),这个记录过程叫二进制日志事件(binary log events)。
  2. slave将master的binary log events拷贝到它的中继日志(relay log)。
  3. slave重做中继日志中的事件,将改变应用到自己的数据库中,Mysql复制是异步且串行化的。

2. 配置(基于mysql 8.x)

2.1 master配置文件修改

[mysqld]
# 设置主机Id
server-id=1
# 启用二进制日志
log-bin=E:\\Software\\mysql-8.0.19\\data\\logbin

2.2 slave配置文件修改

[mysqld]
# 设置从机Id
server-id=2
# 启用二进制日志
log-bin=/var/run/mysqld/logbin

2.3 具体操作

主机IP:192.168.1.104
从机IP:192.168.25.103

  1. 主节点创建用户并授权
create user 'repl'@'192.168.1.104' identified with mysql_native_password by '123456';
grant replication slave on *.* to 'repl'@'192.168.1.104';
  1. 查询主节点状态
-- 刷新
flush privileges;
-- 查询主节点状态
show master status;

参数解释:

  • File:二进制日志文件
  • Position:开始抄数据的位置
  • Binlog_Do_DB:需要复制的数据库,空表示都要复制
  • Binlog_Ignore_DB:忽略的数据库,空表示没有
    在这里插入图片描述
  1. 在从节点上设置主节点参数
change master to master_host = '192.168.1.104',
master_user = 'repl',
master_password = '123456',
master_log_file = 'binlog.000017', master_log_pos = 5934;
  1. 开启主从同步
start slave;
  1. 查看主从同步状态
show slave status;
  1. 测试
create database dbtest;
use dbtest;
drop table if exists dog;
create table dog(
	id int primary key not null auto_increment,
    dog_name varchar(20)
);
insert into dog (dog_name) values ('旺财');
insert into dog (dog_name) values ('大白');
insert into dog (dog_name) values ('汪汪');

主机从机同步,测试成功。

3. 番外之常用命令

# 获取binlog文件列表
show binary logs;

# 查看指定binlog文件的内容
show binlog events in 'binlog.000017';

# 停止同步
stop slave;

# 查询用户
select * from mysql.user;

# 删除用户
DELETE FROM `mysql`.`user` WHERE (`Host` = '192.168.25.103') and (`User` = 'rep1');

# 修改用户密码
alter user 'repl'@'192.168.1.104' identified with mysql_native_password by '654321';

# 授予用户权限
grant replication slave on *.* to 'repl'@'192.168.1.104';
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!