1.什么是主从复制
*主从复制是指将主数据库的DDL和 DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制,从库也可以作为其他从服务器的主库,实现链状复制。
MySQL复制的有点主要包含以下三个方面
(1)主库出现问题,可以快速切换到从库提供服务。
(2)实现读写分离,降低主库的访问压力。
(3)可以在从库中执行备份,以避免备份期间影响主库服务
2.主从复制原理
从库使用IOthread进程读取主库binlog,并存储为本地的relay log,然后从库再通过SQLthread进程读取本地relay log,以达到与主库同步
3.主从复制配置过程
3.1环境准备
(1)准备2台安装了相同版本mysql的服务器。我这里是2台centos7.6,安装了mysql8.3.0
(2)关闭两台服务器的防火墙,或者是开放2台服务器的3306端口
3.2主库配置
3.2.1修改主库配置文件/etc/my.cnf
在文件添加下面的内容:
server-id=1
#mysql服务ID,保证整个集群环境中唯一。
read-only=0
#是否只读。1 代表只读,0代表读写
#binlog-ignore-db=xxx
#指定不需要同步的数据库,可以不配置
#binlog-do-db=xxx
#指定同步的数据库编辑,可以不配置
#不配置的情况下,就是复制所有数据库
修改后重启mysqld
3.2.2登录mysql,创建远程连接的账号,并赋予其主从复制权限
create user '用户名'@'%' identified with mysql_native_password by '密码';
#创建一个用于远程连接的用户
grant replication slave on *.* to '用户名'@'%';
#赋予该用户主从复制权限
这个账户是让从库来主库用的
3.2.3查看二进制日志坐标
show master status;
file:推送日志文件的起始文件
position:从日志文件的哪个位置开始推送
这个信息会在之后从库的配置中用到
3.3从库配置
3.3.1修改从库配置文件/etc/my.cnf
在文件添加下面的内容:
server-id=2
#标号数字与主库不一样即可
read-only=1
配置完同样需要重启mysqld。
read-only=1不能限制超级用户的写操作,如果想限制超级用户,可以在文件中加上下面的语句:
super-read-only=1
3.3.2登录从库mysql,建立主从库连接
change replication source to source_host='主库ip',
source_user='连接主库的远程用户名',
source_password='用户密码',
source_log_file='binlog文件名',
source_log_pos=binlog文件位置;
命令中的binlog文件名、binlog文件位置就是在主库中用show master status;查出来的信息
除了最后的binlog文件位置不需要单引号,其他的信息都需要加上单引号
上面的命令是在mysql8.0.23及之后的版本中使用的。如果是8.0.23之前的版本,可以使用下面的语句:
change master to master_host='主库ip',
master_user='连接主库的远程用户名',
master_password='用户密码',
master_log_file='binlog文件名',
master_log_pos=binlog文件位置;
3.3.3开启同步
start replica;
#mysql8.0.23及之后的版本使用这条命令
start slave;
#mysql8.0.23之前的版本使用这条命令
3.3.4查看主从同步状态
show replica status\G;
#mysql8.0.23及之后的版本使用这条命令
show slave status\G;
#mysql8.0.23之前的版本使用这条命令
看到结果中的两个进程都为yes,说明配置成功
开启同步后,主库进行的DDL、DML都会同步到从库上,从库的操作则不会同步到主库上。
开启同步之前的从库与主库的配置不会同步