网站清理通知,沈阳德泰诺网站建设公司怎么样,2024年新闻摘抄,物联网应用系统开发1. 前言
MySQL 作为最最常用的数据库#xff0c;了解 Mysql 的分布式策略对于掌握 MySQL 的高性能使用方法和更安全的储存方式有非常重要的作用。
它同时也是面试中最最常问的考点#xff0c;我们这里就简单总结下 Mysq 的常用分布式策略。
2. 复制
复制主要有主主复制和…
1. 前言
MySQL 作为最最常用的数据库了解 Mysql 的分布式策略对于掌握 MySQL 的高性能使用方法和更安全的储存方式有非常重要的作用。
它同时也是面试中最最常问的考点我们这里就简单总结下 Mysq 的常用分布式策略。
2. 复制
复制主要有主主复制和主从复制两种
mysql 的复制功能都是基于 bin-log 实现的
2.1. 经典主从复制 这里使用 docker 实验生产环境尽量不要使用 docker 我这里使用默认网络即网桥模式测试就足够了 准备主从复制 my.cnf
mkdir /volume1/docker/mysql-master
mkdir /volume1/docker/mysql-master/data
mkdir /volume1/docker/mysql-slave
mkdir /volume1/docker/mysql-slave/data# /volume1/docker/mysql-master/my.cnf 主mysql配置
[mysqld]
server-id1
log-binmysql-bin
# /volume1/docker/mysql-slave/my.cnf 从mysql配置
[mysqld]
server-id2
log-binmysql-bin搭建主从MySQL
# volume1/docker/mysql-master 是你的数据存储卷
# 这里密码设置为123456
docker run -d \
--name mysql-master \
-v /volume1/docker/mysql-master/data:/var/lib/mysql \
-v /volume1/docker/mysql-master/my.cnf:/etc/mysql/conf.d/my.cnf \
-e MYSQL_ROOT_PASSWORD123456 \
mysql:8.0.11docker run -d \
--name mysql-slave \
-v /volume1/docker/mysql-slave/data:/var/lib/mysql \
-v /volume1/docker/mysql-slave/my.cnf:/etc/mysql/conf.d/my.cnf \
-e MYSQL_ROOT_PASSWORD123456 \
mysql:8.0.11主 MySQL 配置
docker exec -it mysql-master /bin/bash
mysql -u root -p
SHOW MASTER STATUS;然后创建同步用户
CREATE USER repluser% IDENTIFIED WITH mysql_native_password BY replpassword;
GRANT REPLICATION SLAVE ON *.* TO repluser%;
FLUSH PRIVILEGES; 获取主Mysql ip
docker inspct mysql-master我这里看到的是172.17.0.5
配置从 MySQL 这里主要是配置主 Mysql 的账号密码主服务器的偏移量和 bin 位置 docker exec -it mysql-slave /bin/bash
mysql -u root -pCHANGE MASTER TO
MASTER_HOST172.17.0.5,
MASTER_USERrepluser,
MASTER_PASSWORDreplpassword,
MASTER_LOG_FILEmysql-bin.000003,
MASTER_LOG_POS852;START SLAVE;
查询链接状态 这里主要看有没有报错没报错就可以了 SHOW SLAVE STATUS\G;5. 测试同步
我们首先在master mysql 随便创建一个test数据库 然后我们发现在从数据库。就可以发现 test 数据库了。
2.2. 主主复制 主主同步相对来说使用少一点因为保证一致性更加困难增加了维护成本 前提条件
安装两个MySQL实例并确保它们可以相互连接。每个MySQL实例有一个唯一的server-id。启用二进制日志binlog。
步骤
配置第一台服务器Server A
编辑配置文件 my.cnf [mysqld] server-id1 log-binmysql-binbinlog-do-dbyour_database # 需要复制的数据库重启MySQL服务 service mysql restart创建复制用户 CREATE USER repl% IDENTIFIED WITH mysql_native_password BY replpassword; GRANT REPLICATION SLAVE ON *.* TO repl%; FLUSH PRIVILEGES;获取二进制日志文件名和位置 SHOW MASTER STATUS;记录下File和Position如mysql-bin.000001和154。
配置第二台服务器Server B
编辑配置文件 my.cnf [mysqld] server-id2 log-binmysql-bin binlog-do-dbyour_database# 需要复制的数据库重启MySQL服务 service mysql restart创建复制用户 CREATE USER repl% IDENTIFIED WITH mysql_native_password BY replpassword; GRANT REPLICATION SLAVE ON *.* TO repl%; FLUSH PRIVILEGES;获取二进制日志文件名和位置 SHOW MASTER STATUS;记录下File和Position如mysql-bin.000001和154。
配置双向复制
在第一台服务器Server A上配置从服务器Server B
sql CHANGE MASTER TO MASTER_HOSTServerB_IP, MASTER_USERrepl, MASTER_PASSWORDreplpassword, MASTER_LOG_FILEmysql-bin.000001, -- Server B的binlog文件名 MASTER_LOG_POS154; -- Server B的binlog位置 START SLAVE;在第二台服务器Server B上配置从服务器Server A CHANGE MASTER TO MASTER_HOSTServerA_IP, MASTER_USERrepl, MASTER_PASSWORDreplpassword, MASTER_LOG_FILEmysql-bin.000001, -- Server A的binlog文件名 MASTER_LOG_POS154; -- Server A的binlog位置 START SLAVE;验证配置
在第一台服务器Server A上检查复制状态
sql
复制代码
SHOW SLAVE STATUS\G;
在第二台服务器Server B上检查复制状态 SHOW SLAVE STATUS\G;确保Slave_IO_Running和Slave_SQL_Running均为Yes并且Last_IO_Error为空。
整体思路和主从一直不过要互相复制且容易出现问题未还难度大
3. 其他方案 如MySQL InnoDB ClusterMySQL InnoDB ClusterKeepalived 和 MHAGalera Cluster 很多分布式方案。 3.1. innoDB Cluster
MySQL InnoDB Cluster 是一个官方提供的高可用性和可扩展性解决方案基于MySQL组复制Group Replication、MySQL Shell和MySQL Router。
优点 高可用性和自动故障切换。 易于配置和管理官方支持。 读写分离和负载均衡。
3.2. ProxySQL
使用场景读写分离、负载均衡、高可用性。 优点高性能代理支持动态配置和多个后端数据库。 缺点需要额外的代理层配置复杂。
3.3. Galera Cluster
使用场景多主同步复制、高可用性。 优点数据同步、强一致性、高可用性。 缺点网络要求高延迟敏感。
3.4. Sharding分片
使用场景大规模数据处理和存储水平扩展。 优点没有单点瓶颈扩展性好。 缺点应用层处理复杂跨分片查询困难。
3.5 NDB Cluster
使用场景高性能、高可用性、高可扩展性。 优点数据分片、负载均衡、高可用性。 缺点配置复杂硬件要求高。