mysql读写分离,主从同步

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。

laravel设置方法:config/database.php 文件

dart

代码解读

复制代码

 'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'read' => [
                ['host' => 'XX.XX.XX.XX', 'port'=>1234]
            ],
            'write' => [
                ['host' => 'localhost', 'port'=>123]
            ],
//            'host' => env('DB_HOST', '127.0.0.1'),
//            'port' => env('DB_PORT', '3306'),
	]

这样就可以在不同的数据库读写分离了。记住要设置mysql的访问权限,同意该项目的ip访问mysql(grant all privileges on *.* to 'root'@'XX.X.XX.X'  IDENTIFIED BY 'mypassword' WITH GRANT OPTION; FLUSH PRIVILEGES;)

mysql主从同步设置(难点)

修改两mysql服务器的 /etc/my.conf文件

ini

代码解读

复制代码

log-bin=mysql-bin
server-id	= 13

两服务器的server-id不能一样,log-bin 文件一般都已经存在,可改可不改(不改偶尔会有日志回滚同步的问题)。

修改好后重启mysql  

代码解读

复制代码

 service mysql restart

登陆主数据库

shell

代码解读

复制代码

mysql -u root -p
密码:******* 
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'从数据库ip' identified by 'password';
mysql> FLUSH PRIVILEGES;

获取主数据库日志信息

sql

代码解读

复制代码

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005      120|              | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

记住file和position, 从数据库设定需要用到。

登陆从数据库

ini

代码解读

复制代码

mysql -u root -p
密码:*******
mysql> change master to master_host='主服务器ip', master_user='slave', master_password='password',master_log_file='mysql-bin.000005', master_log_pos=120;

如果修改了3306端口需要写入master_port=1234,否则连不上

ini

代码解读

复制代码

mysql> start slave;
mysql> show slave status \G;

当   Slave_IO_Running: yes                   Slave_SQL_Runing:yes     时,主从同步成功

报错情况

Slave_SQL_Running: no  ; 可在下面看到Last_Error: ………………sql语句:的情况下,是sql日志同步失败,事务回滚的问题。

ini

代码解读

复制代码

mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;

运行后如果还是不行,看 Last_Error内容有没有改变,改变了就是有效的,继续重复上面的语句。

Slave_IO_Running: no  ;我出现这种情况的原因是在从服务器上连不上主服务器的mysql,因为master设置没有加入我自己修改过的master_port=1234。

在尝试分别在主从服务器连接对方的mysql中看到报错才知道原因:mysql -h XX.XX.XX.XX -u root -p --port=1234(linux终端连接其他服务器mysql)

Slave_IO_Running: 和 Slave_SQL_Runing yes 后经过测试修改主数据库,从数据库的内容也得到修改。


转载来源:https://juejin.cn/post/6901581801458958344

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
1671 0
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
320 6
|
8月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
9月前
|
SQL 关系型数据库 MySQL
如何实现 MySQL 的读写分离?
本文介绍了 MySQL 读写分离的实现方式及其主从复制原理,解释了如何通过主从架构提升读并发能力。重点分析了主从同步延时问题及解决方案,如半同步复制、并行复制等技术手段,并结合实际案例探讨了高并发场景下的优化策略。文章还提醒开发者在编写代码时需谨慎处理插入后立即查询的情况,避免因主从延时导致的数据不一致问题。
1120 44
如何实现 MySQL 的读写分离?
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
543 0
|
11月前
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
456 17
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
1359 11
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
146 1
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
关系型数据库 MySQL Linux
mysql 主从同步 实现增量备份
【8月更文挑战第28天】mysql 主从同步 实现增量备份
245 3

推荐镜像

更多