当前位置:首页 > 未分类 > 正文内容

Mysql数据库主从模式配置及切换方案

xiaorui3个月前 (08-13)未分类39

有一个项目的需求,同时配置两台服务器,两台服务器的mysql数据库、系统图片、视频等资源等实时同步,在出现故障时迅速切换。(通过mysql主从复制、rsync数据同步、nginx负载均衡的方案实现)


通过实现MySQL数据库的从数据库实时备份,以便在故障发生时能迅速切换到从数据库。同时,为了避免在服务器切换时手动拷贝图片、视频资源,采用rsync同步复制技术。系统正常运行的情况下,两台服务器分别有一条线路,采用云解释分别访问两台服务器,然后通过nginx负载均衡,mysql默认访问主服务器的mysql。

双线路服务器容灾方案.png


关于MySQL的主从配置,下面详细记录,参考了其他博主的方法。


主库:192.168.100.60    3306     
从库:192.168.100.101    3306

 

1、主从原理

主从原理大致有三个步骤:

  • 在主库上把数据更改记录到二进制日志中(Binary Log)中,这些记录称为二进制日志事件。

  • 从库通过IO线程将主库上的日志复制到自己的中继日志(Relay Log)中。

  • 从库通过SQL线程读取中继日志中的事件,将其重放到自己数据上。

  • 配置前,要保证主从库数据的数据一致。


原理图如下:

a92f84c812290352714f7853c3a4f85a.png

2、主从配置

(1)配置主库

修改my.cnf文件,在[mysqld]加入下面的内容:

# 服务的唯一编号
server-id = 1
# 开启mysql binlog功能
log-bin = mysql-bin
# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
# 指定需要复制的数据库名为test
binlog-do-db = test

修改好配置文件,重启mysql服务

service mysqld restart


在mysql命令终端执行下面指令,创建从库用于同步数据的账号(主库ip为:192.168.100.60,192.168.100.101为从库ip,也可以直接用 % 代替)

CREATE USER 'test'@'192.168.100.101' IDENTIFIED BY 'test123';
GRANT REPLICATION SLAVE ON *.* TO 'test'@'192.168.100.101';
flush privileges;

(2)配置从库

同配置主库步骤配置从库的my.cnf文件,唯一不同的是:

server-id = 2


以下在mysql终端执行:

# 设置主服务器ip,同步账号密码,同步位置,这两个信息在主库mysql终端执行 show master status\G; 可得
CHANGE MASTER TO MASTER_HOST='192.168.100.60',MASTER_USER='test',MASTER_PASSWORD='test123',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=4778;
# 开启同步功能
start slave;

查看从库的运行状态:

show slave status\G;

#成功的标志是:
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...


注意:

(1)报错Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection,文心一言建议:如果你没有打算使用SSL/TLS,或者只是为了测试目的,你可以尝试更改MySQL用户的身份验证插件。例如,你可以将其更改为“mysql_native_password”。

ALTER USER 'test'@'192.168.100.101' IDENTIFIED WITH mysql_native_password BY 'test123';  
FLUSH PRIVILEGES;

(2)如果需要重新运行Change master....,需要先STOP SLAVE IO_THREAD;

(3)从库需要禁止写入,防止不同步。

# 选定数据库
use test;
# 读锁定,禁止写操作
FLUSH TABLES WITH READ LOCK;
# 解锁
UNLOCK TABLES;



相关文章

通过云主机SSH 反向端口转发访问无公网ip电脑的服务

利用 SSH 反向端口转发:轻松实现本地服务远程访问 在日常开发或服务器管理中,我们经常需要将本地服务暴露给外部网络访问,比如让客户临时访问你的本地开发环境,或者在没有公...

Linux系统备份及恢复的一个方案

Linux系统备份及恢复的一个方案

本文为借鉴经验并按实际梳理,测试成功,环境如下:VMware虚拟机Ubuntu20.04系统、实体电脑Ubuntu20.04系统主要思路如下:由于linux系统一切皆文件的理念。通过tar工具将除启动...

虚拟机模拟mongodb配置多节点副本集,实现事务特性

虚拟机模拟mongodb配置多节点副本集,实现事务特性

一、环境环境:Ubuntu 22,完成mongd、mongosh、mongodump安装,第一步先进行备份(这里端口用的是27070):(注意,这里配置内部地址,在远程连接时无法连接,或者加上直连参数...

Linux通过手机USB网络共享上网设置方法

多数情况下,服务器无法直接联网,需通过手机连线上网。设置方法如下:终端中查看现有网络接口:ip addr 或 ifconfig连接好数据线并在手机设置中打开“通过USB共享网络”再次查看是否将USB识...

1Panel安装及使用(Ubuntu服务器运维面板工具)

1Panel安装及使用(Ubuntu服务器运维面板工具)

1Panel 是一个现代化的 Linux 服务器运维管理面板,支持可视化管理服务器、网站、数据库等。在 Ubuntu 上安装 1Panel 非常简单,以下是具体步骤:...