MySQL主从配置魔法书:从小白到数据库大师的奇幻冒险之路!

MySQL主从配置魔法书:从小白到数据库大师的奇幻冒险之路!

1.配置环境

1.1条件

这次的mysql为8.0.13版本,我们在三台测试服务器上部署,一台为主数据库,两台为从数据库:

Master:172.16.50.121

Slave: 172.16.50.122

Slave: 172.16.50.123

提示: 前提是每台服务器的mysql都已安装好,正式环境的三台服务器

1.2准备

在MySQL主从复制中,如果在从库连接到主库之前,主库上发生的数据更改(例如新建数据库或表、插入数据等)通常不会自动同步到从库。

针对线上情况,需要保证三个数据库在连接之前是一样,包括数据库跟表,这里需要把线上的两个数据库:nsjz-cloud,nacos-prod导入到两个从库,保证在连接之前,线上的库表数据是一致的

2.主服务器配置

2.1首先需要配置my.cnf,打开mysql配置文件

shell 复制代码
vi /etc/my.cnf
显示如下
mysqld下方添加如下配置,标记为主库,序号1(这里的server-id是唯一标记,要确保它的唯一性)
shell 复制代码
log-bin=mysql-bin 
server-id=1
完成后:
wq保存之后,重启mysql服务
shell 复制代码
service mysqld restart

2.2配置mysql

1.登录数据库,进入数据库命令行
shell 复制代码
mysql -u root -p
2.在mysql数据库中,建立用户同步数据库的账号和密码:
sql 复制代码
create user 'rem'@'%' identified with 'mysql_native_password' by '123456';
3.给rem用户权限,从库就可以通过此账户来连接主库:
sql 复制代码
GRANT replication slave ON *.* TO 'rem'@'%';
GRANT ALL privileges ON *.* TO 'rem'@'%'; flush privileges;
4.查看mysql主服务器日志:
sql 复制代码
SHOW MASTER STATUS;
会显示如下信息:
记录下查出来的File和Position的值,一会儿再从服务器上配置时使用,一般都不一样,这里的是:

File: binlog.000001

Position: 633210

最后要确认主服务器的3306端口是开放的

shell 复制代码
sudo firewall-cmd --zone=public --permanent --add-service=mysql 
sudo systemctl  restart firewalldshe
主数据库配置已经完成.

3.从服务器配置

3.1首先需要配置my.cnf,打开mysql的二进制配置文件

shell 复制代码
vi /etc/my.cnf

3.2在mysqld下方添加如下配置,标记为从库,序号2

shell 复制代码
log-bin=mysql-bin server-id=2
完成如下
wq保存之后,重启mysql服务
sql 复制代码
service mysqld restart

3.1登录数据库,进入数据库命令行,登录数据库

shell 复制代码
mysql -u root -p

3.2在从服务器设置主服务器信息,实现主从配置

sql 复制代码
change master to master_host='172.16.50.121',
master_user='rem',
master_password='123456',
master_log_file='binlog.000001' ,master_log_pos=633210;
说明:
  • MASTER_HOST='172.16.50.121' 主数据库的ip
  • MASTER_USER='rem', 创建的主库用户
  • MASTER_PASSWORD='123456', repl用户的密码
  • MASTER_LOG_FILE='binlog.000001', 主服务器上的File(记录)
  • MASTER_LOG_POS=633210; 刚刚保存的position

3.3开启从数据库SQL

sql 复制代码
start slave;

3.4查看连接状态

sql 复制代码
show slave status\G

发现这两个状态是否为Yes,如果是就配置成功了,其他状态No,connecting均代表有错误,需要进行调整,可能是下列的一些原因,可自行去排查

  1. 网络不通
  2. 连接信息不对,包括端口
第二个从库跟第一个从库是一样的
最后配置完成之后,添加数据更改数据之后,验证数据是否同步成功
注意:在MySQL主从复制中,如果在从库连接到主库之前,主库上发生的数据更改(例如新建数据库或表、插入数据等)通常不会自动同步到从库。主从复制是一种基于二进制日志(binary log)的机制,只有连接建立后,从库才能获取并应用主库上的二进制日志。当你在从库上执行CHANGE MASTER TO和START SLAVE命令时,从库会连接到主库,并开始从主库的二进制日志中获取数据,然后同步到从库。如果在连接建立前有数据更改,从库是不会获取这些更改的。如果你希望确保从库与主库保持一致,可以在连接建立前手动导入主库上的数据到从库,或者使用其他手段确保数据一致性。一般而言,主从复制的目的是实时或准实时地将主库上的更改同步到从库,因此建议在设置主从复制时确保从库是空的或与主库一致的状态。
相关推荐
CoderMeijun13 小时前
一条SQL查询语句在MySQL中是如何执行的
mysql·sql执行流程·连接器·mysql架构·索引下推·执行器
ttwuai17 小时前
GoFrame 连接 MySQL 报错排查:parseTime、时区和 utf8mb4 怎么配
数据库·mysql·adb
辉灰笔记17 小时前
MySQL8 意外关机/误移data目录导致服务启动失败 PID报错/权限报错 修复文档
linux·数据库·mysql·centos
喜欢的名字被抢了18 小时前
MySQL核心机制:事务、锁与存储引擎
数据库·sql·mysql·教程
消失的旧时光-194319 小时前
MySQL 索引原理系列(二·补充):MySQL 为什么不用红黑树,而用 B+树?
数据库·b树·mysql·红黑树
万亿少女的梦16820 小时前
基于Spring Boot、Vue.js和MySQL的超市管理系统设计与实现
java·vue.js·spring boot·mysql·管理系统
weixin_3077791320 小时前
Linux下Docker Compose里运行的MySQL数据库故障诊断Shell脚本
linux·运维·mysql·docker·自动化
辉灰笔记1 天前
第一篇:MySQL8.0生产备份实战|XtraBackup全自动全量+增量备份(钉钉告警+异地Binlog归档)
数据库·mysql·钉钉·运维开发
wzy06231 天前
VIP + Orchestrator + 自定义脚本 MySQL 高可用方案
mysql·orchestrator
TPBoreas2 天前
MySQL性能优化面试全攻略
mysql·面试·性能优化