数据架构设计实现(3)-数据库高阶应用

15 篇文章 0 订阅
7 篇文章 0 订阅


1. MySQL主从复制实现高可用

1.1. 数据库永远是系统最脆弱的环节

  • 80%都是查询

  • 缓存来保护数据库:Redis、ElasticSearch

  • 数据库系统要有一定的容灾能力

  • 数据状态化明显

1.2. 数据库的HA实现的方式

1.2.1. 高可以计算方式

  • MTTF:平均无故障时间
  • MTTR:平均维护时间
  • HA=MTTF/(MTTF+MTTR)* 100% (这就是常说的99.95%)

1.2.2. 数据库高可用的三种方式

  • 主从(非对称)

    master-slave,热数据备份,从库一般是用来实时备份,从机可以快速切换为主库,读写分离(数据的一致性),从库一般设置为只读

    前端应用走缓存,后端应用Report走从库查

  • 对称方式

    两个节点,互为主从,双主模式(两个数据库的主键如果是自动生成需要初始设置成不一样的)

    A-1001,1003,1005,B-1002,1004,1006

    双主下数据同步一定要实时

  • 多机方式

    • MHA
    • MMM
    • MyCat(可以实现双主机热切)

1.2.3. 主从实现的逻辑

  • 资源:两台数据库
  • Master会将修改记录进binlog
  • Slave从主库binlog读取数据写入relaylog
    • relaylog和binlog的格式一样,可以用mysqlbinlog读取relaylog
    • mysql> show relaylog events in ‘relay-bin.000001’;
    • binlog的postition方式
    • GTID方式:MySQL版本>=5.7

1.3. 配置主从复制

  • Master服务器配置
# 慢查询开关
slow_query_log=ON
slow_query_log_file=/usr/local/slowlog/slow.log
slow_launch_time=4
long_query_time=3
# chown -R mysql:mysql /usr/local/slowlog/

binlog设置

server_id=213
log_bin=/usr/local/binlog/mysql-bin  # 只需要给名字前缀
binlog_format=row
expire_logs_days=3
max_binlog_size=200m
  • Slave服务器配置
# 慢查询开关
slow_query_log=ON
slow_query_log_file=/usr/local/slowlog/slow.log
slow_launch_time=4
long_query_time=3
# chown -R mysql:mysql /usr/local/slowlog/

从库的主从设置

server_id=214
relay_log=/usr/local/relaylog/relay-bin
relay_log_recovery=1 #确保完整性

read_only=on #从服务器只读
skip_slave_start=on #slave重启后不会自己启动复制链路,需要手动启动,建议手动启动,好处是检查无误后启动

master_info_repository=TABLE # 将主从服务的信息保存进表
relay_log_info_repository=TABLE # 将主从服务的信息保存进表
  • 主从指明不同步的数据库
# Master
# 不同步数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 只同步某一些数据库
binlog-do-db=icoding_admin

# Slave
# 复制哪些数据库
replicate-do-db=icoding_admin
replicate-do-db=game
# 不复制哪些数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
  • 先Master上建立授权账号
# Master授权给slave
mysql> use mysql;
mysql> grant replication slave on *.* to 'synuser'@'192.168.0.214' identified by '123456';
mysql> flush privileges;
  • 初始化Slave数据
# Master和Slave的数据库版本要一致,Master<=Slave
mysqldump -uroot -p123456 -h127.0.0.1 --flush-logs --master-data=2 --routines --triggers --events --single-transaction --databases icoding_admin > mydb.sql
#CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=154; 就用导出的日志pos
  • 启动复制链路
# 在slave上执行
mysql> 
change master to master_host='192.168.0.213',
master_port=3306,
master_user='synuser',
master_password='123456',
master_log_file='mysql-bin.000004',
master_log_pos=154;
  • 注意事项
主从复制的时候主从数据库的UUID不能一样,如果是镜像方式,启动前将UUID文件删除,会重新创建
cd /var/lib/mysql
cat auto.cnf  # 将他删除
server-uuid=890980d9-b072-11ea-8ab8-00163e03668d
  • 启动主从复制
# show slave status \G 可以查看主从复制的状态和日志错误
# 启动slave
mysql> start slave;
# 停止slave
mysql> stop slave;

作业1:搭建一个双主的结构

  • 使用GTID方式进行复制链路
# 默认GTID是不开启的
# 如果开启以下操作不可用
# create table ..... select * from xxx; 不可用
# 在一个事务里不能创建和删除表
# 在一个事务里更新innodb引擎和myisam不可用
  • 无意中删除了一个数据,可以做延时从库
# 从库做备份就无法做到数据的及时恢复
# 让我的从库做到延时同步
mysql> stop slave;
mysql> change master to master_delay=10; # 延时10秒
mysql> start slave;
mysql> show slave status \G;

master(实时slave,延时slave)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值