小白成长之路-mysql数据基础(三)

文章目录


一、主从复制

bash 复制代码
1、master开启二进制日志记录

2、slave开启IO进程,从master中读取二进制日志并写入slave的中继日志

3、slave开启SQL进程,从中继日志中读取二进制日志并进行重放

4、最终,达到slave与master中数据一致的状态,我们称作为主从复制的过程

二、案例

1.前提:实验开始前

systemctl disable --now firewalld

setenforce 0

保证主机和丛机的时间一致:

timedatectl set-timezone Asia/shanghai

主机和丛机都需要配置:

bash 复制代码
vim /etc/chrony.conf 

重启服务:

systemctl restart chronyd.service

2.在主机上创建一个账户并赋予权限

3.打开二进制文件

vim /etc/my.cnf.d/mysql-server.cnf

主机

从机

4.主机变为从机(在没有改变前,从机也是主机)

主机;

从机:其中master_log_file和master_log_pos均来自于主机的状态

change master to master_host='192.168.144.129',master_user='slave',master_password='123',master_log_file='binlog.000014',master_log_pos=706;

从机验证:

这两个地方必须都是yes才代表成功

如果出现

ALTER USER 'slave'@'192.168.144.%' IDENTIFIED WITH mysql_native_password BY '123';

ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation

问题原因

在MySQL 8.0+版本中:

修改其他用户的认证插件需要 SYSTEM_USER 权限

普通用户即使有 CREATE USER 权限也无法修改其他用户的认证方式
修改方案:

主机:

bash 复制代码
CREATE USER 'slave_new'@'192.168.144.%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT REPLICATION SLAVE ON *.* TO 'slave_new'@'192.168.144.%';
FLUSH PRIVILEGES;

从机:

bash 复制代码
mysql> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='slave_new', MASTER_PASSWORD='123',master_log_file='binlog.000014',master_log_pos=1569;
Query OK, 0 rows affected, 7 warnings (0.01 sec)

验证:

主机上创建个数据库

从机上可以看到:

总结

以上就是mysql的主从分离,后续会补充上读写分离