数据库主从同步与读写分离以及双机热备
in JavaDevelop with 0 comment

数据库主从同步与读写分离以及双机热备

in JavaDevelop with 0 comment

数据库主从同步

在这里插入图片描述

1. 京淘后端项目架构

1.1 数据库主从同步

1.1.1 业务需求说明

当数据库发生宕机的现象,如果配置了数据库主从同步,则可以从从库中获取现有记录,显示数据的恢复.
在这里插入图片描述

1.2 数据库主从同步原理

1.2.1 数据库冷备份

说明: 人工的将数据库文件定期导出,一式三份 如果其中一份丢失,另外2份可以留作替补.
弊端: 数据不能实时备份.
解释: 工作中数据库的冷备份是恢复数据最后有效的手段(重大事故)

1.2.2 数据库热备份

说明: 最为主要的作用可以实现实时备份. 几乎保证数据不丢失.
在这里插入图片描述

1.3 数据库备份实现

1.3.1 实现数据库导入

在这里插入图片描述

1.3.2 开启二进制日志文件

  1. 默认条件下 数据库的二进制日志文件是关闭的.如果需要备份则手动开启
  2. 编辑二进制日志文件 /etc/my.cnf
    在这里插入图片描述
  3. 编辑配置文件
    在这里插入图片描述
  4. 默认数据库文件位置
    在这里插入图片描述
  5. 重启数据库 让二进制文件生效即可
    在这里插入图片描述
  6. 从库重复上述步骤.开启二进制日志文件即可

1.4 实现主从挂载

1.4.1 主库状态

在这里插入图片描述

1.4.2 实现主从挂载

/*130从库 从库链接主库
IP/端口/用户名/密码/二进制文件名/pos位置
*/
CHANGE MASTER TO 
MASTER_HOST="192.168.126.129",
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=245;

1.4.3 启动主从测试代码

在这里插入图片描述

1.4.4 主库主从搭建问题

  1. 停止主从服务
    stop slave
  2. 排查错误
  3. 重启进行主从挂载
  4. 重置主从服务 reset slave
  5. 重复挂载即可 如果不行 推倒重做

1.5 实现数据库读写分离/负载均衡

1.5.1 Mycat数据库代理

活跃的、性能好的开源数据库中间件!
我们致力于开发高性能的开源中间件而努力!
重要通告,最近有区块链项目借Mycat宣传,与Mycat毫无关系,大家不要相信!

1.5.2 Mycat安装

1). 解压安装包 如果所示.
在这里插入图片描述
2). 目录结构
bin: Mycat的可执行文件 conf: Mycat的配置文件 logs: Mycat日志 如果报错
在这里插入图片描述

1.5.3 编辑server.xml

说明: 该配置主要实现用户与代理之间的配置关系.
端口号: 8066端口
修改配置文件:
在这里插入图片描述

1.5.4 编辑schema.xml

用户写操作访问129,用户的读操作访问129/130

	<writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root">
			<!--读数据库1-->
			<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
			<!--读数据库2-->
			<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
		</writeHost>
123456

1.5.5 mycat命令

在这里插入图片描述

1.5.6 修改数据库地址

在这里插入图片描述

1.5.7 负载均衡实现

在这里插入图片描述

1.6 高可用

1.6.1 介绍

当数据库主机宕机之后,要求实现高可用机制.用户程序将不会受到影响. 数据库高可用机制.

1.6.2 双机热备思想

在这里插入图片描述

1.6.3 反向搭建

1).130 执行
在这里插入图片描述
2). 129的执行
在这里插入图片描述

1.6.4 修改Mycat配置文件

		<writeHost host="hostM2" url="192.168.126.130:3306" user="root" password="root">
			<!--读数据库1-->
			<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
			<!--读数据库2-->
			<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
		</writeHost>