如何用 MySQL 构建全方位高可用应用
Cluster 从数据库 • 会话线程:处理来自应用程序的查询 - 将 数据写入主数据库,将关联事件写入二进制 日志 • 转储线程:读取二进制日志中的事件,然后 将其发送到从数据库 • I/O 线程:接收复制事件,并将其存储在从 数据库的中继日志中 • SQL 线程:读取从数据库的中继日志中的复 制事件,然后将其应用到从数据库 MySQL 复制工作流 会话 二进制 日志 主数据库 Shared Storage • Group Replication • MySQL Cluster MySQL Cluster 概述 • 具有持久性的内存优化表 • 延迟时间短且可预测,访问时间控制在一定范围内 实时 • 自动分片、多主 • 符合 ACID,OLTP + 实时分析 高伸缩性,读取 + 写入 • 无共享,无单点故障 • 自我修复 + 联机运行 99.999% 可用性 • 关键字/值0 码力 | 40 页 | 2.19 MB | 1 年前3使用 Docker 建立 MySQL 集群
MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE 环境变量可以使容器在 运行时同时创建你所需要的数据库和带有全部权限的用户及其对应密码 6,设定 TERM 环境变量的值可以解决容器不能进入 mysql 控制台的问题。 对于不是自己建立的镜像,建立出来的容器未必能一次达到要求,建议是将 run 命令写成脚本,创建后使用 docker inspect <容器名> 仔细查看容器信息,关注镜像公开的端口和文件目录。如果发现达不到要求,使 MYSQL_DATABASE=medical_waste \ -e TERM=linux \ -d mariadb 第三步 配置一主一从集群 3.1 接下来启动另一个容器作为从数据库,因为镜像不支持在容器内进入 mysql 控制 台,所以依然需要把端口暴露出来以供局域网访问,但主数据库容易可以链接进 来作为一个可访问的主机 master_db。 docker run --name <从数据库名> -e MYSQL_ROOT_PASSWORD=<从数据库 server-id 大的数字,mdb2 同样需要重启。 3.4 使用客户端连接上主数据库,这里我使用的是 mysql workbench,从数据库因为 安全考虑并没有公开端口给主机,只能进入容器的 mysql 控制台进行操作。 在主数据库中执行 SQL 脚本: /*设定用于同步的账号、密码*/ grant replication slave on *.* to ‘sync’@'%' identified by0 码力 | 3 页 | 103.32 KB | 1 年前3谈谈MYSQL那点事
唯一性约束,系统将默认为改字段建立索引。 唯一性约束,系统将默认为改字段建立索引。 对于只是做查询用的数据库索引越多越好,但对于在线实时 对于只是做查询用的数据库索引越多越好,但对于在线实时 系统建议控制在 系统建议控制在 55 个以内。 个以内。 索引不仅能提高查询 索引不仅能提高查询 SQL SQL 性能,同时也可以提高带 性能,同时也可以提高带 where where 字句 字句 的0 码力 | 38 页 | 2.04 MB | 1 年前3Qcon北京2018--《MySQL的Docker容器化大规模实践》--王晓波
od配合cpu-quota一起使用,来限制容器的CPU的使用量 。比cpuset-cpus绑定CPU的方式灵活。 限制容器内存,且内存不超卖。通过—memory限制内存,同时结合MySQL自身参数控制 几个内存大户(比如buffer_pool等),最后配合lxcfs增强隔离性。 IO方面由于我们采用挂载宿主机本地的磁盘设备,还不能做到彻底隔离。所以对于高IO的实 例使用的是PCIE-SSD。磁0 码力 | 32 页 | 7.11 MB | 1 年前3
共 4 条
- 1