原理:
MySQL主从复制是指将一个MySQL数据库的数据实时复制到另一个MySQL数据库的过程。
-
主数据库(Master)记录所有的数据变更操作,包括插入、更新和删除操作。这些操作会被写入到二进制日志(Binary Log)中。
-
从数据库(Slave)连接到主数据库,并请求从主数据库获取二进制日志的内容。
-
主数据库将二进制日志的内容发送给从数据库。
-
从数据库将接收到的二进制日志内容应用到自己的数据库中,实现数据的复制。
-
从数据库会周期性地向主数据库发送心跳信号,以检测主数据库的状态。如果主数据库出现故障,从数据库可以自动切换为主数据库,继续提供服务。
主从复制的实现依赖于MySQL的二进制日志功能。主数据库将所有的数据变更操作写入到二进制日志中,从数据库通过读取二进制日志的内容来进行数据复制。由于二进制日志记录了所有的数据变更操作,因此可以确保从数据库与主数据库的数据保持一致。
主从复制可以提供数据的冗余备份,增加数据库的可用性和可靠性。同时,主从复制还可以用于读写分离,将读操作分发到从数据库,减轻主数据库的负载。
实操:
实验环境:两台CentOS7,MySQL5.7.43
主机配置:
1.开放3306号端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --list-ports
2.启动MySQL服务,登录查看
退出命令:exit;
3.修改数据库配置文件
vi /etc/my.cnf
4.重启MySQL服务
systemctl restart mysqld
5.创建用户,便于授权
查看密码校验策略等级:show variables like '%validate_password_policy%';
查看密码长度要求:show variables like '%validate_password_length%';
更改密码校验等级为0:set global validate_password_policy=0;
更改密码长度要求为1:set global validate_password_length=1;
创建用户并授予权限:GRANT REPLICATION SLAVE ON *.* to '用户名'@'%' identified by '密码';
GRANT REPLICATION SLAVE ON *.* to 'test'@'%' identified by 'Root@123456';
6.查看同步状态
show master status;
从机配置:
1.修改数据库配置文件
vi /etc/my.cnf
2.重启MySQL服务
systemctl restart mysqld
3.登录数据库设置同步
用户名,密码,ip及磁道根据自己的来
change master to master_host='192.168.80.142',master_user='test',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=429;
开启主从服务:start slave;
4.查看数据库状态
show slave status\G;
STOP SLAVE IO_THREAD;
证明启动成功,实验结束
易错点:
如果发现IO连接错误,先排查是不是直接从主机所在的虚拟机完全克隆来的从机,如果是,需要修改库名如下,若不是,检查用户名,密码,磁道,备份文件是否正确
1.find / -iname "auto.cnf"
找到配置文件,每个人可能安装位置不同
2.vi /var/lib/mysql/auto.cnf
打开修改,任意改一位就行
3.systemctl restart mysqld
重启服务
4.stop slave;start slave;
进入MySQL刷新主从服务