1.什么是主从复制
主从复制是指主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行,从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他服务器的主库,实现链状复制。
作用:
①主库出现问题,可以快速切换到从库提供服务;
②实现读写分离,降低主库的访问压力;
③可以在从库中执行备份,以避免备份期间影响主库服务。
2.主从复制的原理
主从复制是基于二进制日志binlog。主库的binlog日志会记录主库的所有DML和DDL操作,从库中的IOthread会来读取主库中的binlog日志,并将binlog日志写入自身(从库)的relay log(中继日志),接着从库中的SQLthread会来读取relay log(中继日志),并将当中的SQL语句写入自身的数据库,实现主从同步。
3.主从复制结构的搭建
主库配置:
①修改配置文件/etc/my.cnf
server-id=1 MySQL的服务ID,保证整个集群环境中唯一,默认为1
read-only=0 是否只读,1只读,0读写
(binlog-ignore-db-mysql 忽略的数据,指不需要同步的数据库;binlog-do-db=db01指同步的数据库)
②重启MySQL
systemctl restart mysqld
③登录mysql,创建远程连接的账号,并授予主从复制权限
#创建mur用户,并设置密码,该用户可以在任意主机连接该MySQL服务
create user 'mur'@'%' identified with mysql_native_password by 'Root@123456';
#为'mur'@'%'用户分配主从复制权限
grant replication slave on *.* to 'mur'@'%';
④通过指令,查看二进制日志坐标
show master status;
字段含义:
file:从哪个日志文件开始推送日志文件
position:从哪个位置开始推送日志
binlog_ignore_db:指定不需要同步的数据库
从库配置:
①修改配置文件/etc/my.cnf
server-id=2 服务ID,设置唯一
read-only=1 1:只读,0读写
(super-read-only=1 超级管理员也是只读的)
②重启MySQL
③登录mysql,设置主库配置
change replication source to source_host='xxx.xxx',source_user='xxx',
source_password='xxx',source_log_file='xxx',source_log_pos=xxx;
--8.0.23中的语法;如果是8.0.23之前的版本,执行下面的SQL
change master to master_host='xxx.xxx.xxx.xxx',master_user='xxx',master_password='xxx',
master_log_file='xxx',master_log_pos=xxx;
④开启同步操作
8.0.22之后执行start replica;
8.0.22之前执行start slave;
⑤查看主从同步状态
8.0.22之后执行 show replica status;
8.0.22之前执行 show slave status;
4.主从关系是否搭建成功
执行show replica status,查看参数Replica_IO_Running和Replica_SQL_Running,都为YES即主从复制搭建成功。