1.主从复制原理
基于二进制日志文件
1.Master主库在事务提交时,会把数据变更记录在二进制日志文件binlog中。
2.从库Slaver读取主库的二进制文件binlog,写入到从库的中继日志Relay log。
3.Slave重做中继日志的事件,将变化反映到自身进行数据更新(复制)。
2.主库配置
2.1 防火墙设置
# 开放指定的3306端口
firewall-cmd --zone=public --add-port=3306/tcp -pemanent
firewall-cmd -reload
2.2 修改配置文件/etc/my.cnf
在最下面增加配置:
# mysql服务id,保证是整个集群环境中唯一,取值范围1-2^32-1,默认为1
server-id=1
# 是否只读,1代表只读,0代表读写
read-only=0
2.3 重启Mysql服务
systemctl restart mysqld
2.4 创建数据同步的用户并授权
登录mysql,并执行如下指令,创建用户并授权:
mysql> CREATE USER 'jupiter'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';
# @'%':用户可以在任意主机访问当前服务器。
# IDENTIFIED WITH mysql_native_password BY 'Root@123456':设置访问密码为Root@123456
mysql> GRANT REPLICATION SLAVE ON *.* TO 'jupiter'@'%';
# 为'jupiter'@'%'用户分配主从复制的权限,即REPLICATION SLAVE权限
MySQL密码复杂程度说明:
mysql> show variables like 'validate_password_policy';
目前 MySQL8.0.30 默认密码校验策略等级为 MEDIUM , 该等级要求密码组成为: 数字、小写字母、大写字母 、特殊字符、长度至少8位
2.5 通过命令,查看二进制日志坐标
mysql> show master status;
3.从库配置
3.1 防火墙设置
# 开放指定的3306端口
firewall-cmd --zone=public --add-port=3306/tcp -pemanent
firewall-cmd -reload
3.2 修改配置文件/etc/my.cnf
在最下面增加配置:
# mysql服务id,保证是整个集群环境中唯一,取值范围1-2^32-1,与主库不一致即可
server-id=2
# 是否只读,1代表只读,0代表读写,只对非root用户生效
read-only=1
3.3 重启Mysql服务
systemctl restart mysqld
3.4 登录Mysql数据库,设置主库地址及同步位置
master_log_file
和master_log_pos
的参数由 show master status;
的执行结果决定。
mysql> change master to master_host='192.168.36.168',master_user='jupiter',master_password='Root@123456',master_log_file='mysql-bin.000015',master_log_pos=157;
参数说明:
A. master_host : 主库的IP地址
B. master_user : 访问主库进行主从复制的用户名(上面在主库创建的)
C. master_password : 访问主库进行主从复制的用户名对应的密码
D. master_log_file : 从哪个日志文件开始同步(上述查询master状态中展示的有)
E. master_log_pos : 从指定日志文件的哪个位置开始同步(上述查询master状态中展示的有)
3.5 开启同步操作
mysql> start replica; # 8.0.22之后
mysql> start slave; # 8.0.22之前
3.6 查看主从同步状态
mysql> show replica status\G; # 8.0.22之后
mysql> show slave status\G; # 8.0.22之前
然后通过状态信息中的 Slave_IO_running
和 Slave_SQL_running
可以看出主从同步是否就绪,如果这两个参数全为Yes,表示主从同步已经配置完成。
4.验证测试
我们只需要在主库Master执行操作,查看从库Slave中是否将数据同步过去即可。
评论 (0)