Mysql数据库主从模式配置及切换方案(Mysql)
有一个项目的需求,同时配置两台服务器,两台服务器的mysql数据库、系统图片、视频等资源等实时同步,在出现故障时迅速切换。(通过mysql主从复制、rsync数据同步、nginx负载均衡的方案实现)
通过实现MySQL数据库的从数据库实时备份,以便在故障发生时能迅速切换到从数据库。同时,为了避免在服务器切换时手动拷贝图片、视频资源,采用rsync同步复制技术。系统正常运行的情况下,两台服务器分别有一条线路,采用云解释分别访问两台服务器,然后通过nginx负载均衡,mysql默认访问主服务器的mysql。
关于MySQL的主从配置,下面详细记录,参考了其他博主的方法。
主库:192.168.100.60 3306 从库:192.168.100.101 3306
1、主从原理
在主库上把数据更改记录到二进制日志中(Binary Log)中,这些记录称为二进制日志事件。
从库通过IO线程将主库上的日志复制到自己的中继日志(Relay Log)中。
从库通过SQL线程读取中继日志中的事件,将其重放到自己数据上。
配置前,要保证主从库数据的数据一致。
原理图如下:
2、主从配置
# 服务的唯一编号 server-id = 1 # 开启mysql binlog功能 log-bin = mysql-bin # binlog记录内容的方式,记录被操作的每一行 binlog_format = ROW # 减少记录日志的内容,只记录受影响的列 binlog_row_image = minimal # 指定需要复制的数据库名为test binlog-do-db = test
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;
同配置主库步骤配置从库的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;
评论