首页 服务器运维正文

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

ixiaoye 服务器运维 2023-09-09 440 0 | 文章出自:https://blog.csdn.net/veloi/article/details/113859047 mysql

有一个项目的需求,同时配置两台服务器,两台服务器的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;


评论