安装
创建目录和配置文件
mkdir -p mysql/config \&& touch mysql/config/my.cnf \&& touch mysql/docker-compose.yml
编辑配置文件
config/my.cnf
[mysqld]# 解决docker启动连接慢的问题skip-name-resolveserver-id=1port=3306default-storage-engine=INNODBcharacter_set_server=utf8init_connect='SET NAMES utf8'lower_case_table_names=1max_connections=200max_connect_errors=10# 开启二进制日志log-bin=mysql-binlog_bin-index=mysql-bin.indexlog_bin_trust_function_creators=ONbinlog-format=ROW# 设置自增起始偏移量auto_increment_offset=1# 设置自增步长auto_increment_increment=1# 开启慢查询日志slow_query_log=ON# 设置慢查询时间阈值long_query_time=1# 设置慢查询日志文件位置slow_query_log_file=/var/lib/mysql/slow_query.log
docker-compose.yml
version: '3'services:mysql:image: mysql:8.0.21container_name: mysqlports:- 3306:3306privileged: truevolumes:- ./config:/etc/mysql/conf.d- ./data:/var/lib/mysql- ./logs:/var/log/mysqlenvironment:- MYSQL_ROOT_PASSWORD=root- MYSQL_USER=admin- MYSQL_PASSWORD=admin- TZ=Asia/Shanghainetworks:default:external:name: service_network
启动服务
docker-compose up -d
慢查询
-- 查看慢查询日志是否开启show variables like '%slow_query_log%';set global slow_query_log=on;set global slow_query_log=off;-- 查看慢查询阈值show variables like '%long_query_time%';-- 查看没有使用索引的慢查询日志是否开启show variables like '%log_queries_not_using_indexes%';set global log_queries_not_using_indexes=on;set global log_queries_not_using_indexes=off;-- 查看慢查询日志使用说明来记录show variables like '%log_output%';set global log_output='file';set global log_output='table'
数据库架构
主从架构
缺点
- master不能停机,停机就不能接收写请求
- slave过多会出现延迟
双主架构
可以配合一个第三方的工具,比如keepalived轻松做到IP的漂移,停机维护也不会影响写操作
级联架构
缺点
- slave延迟更加大了
双主 + 级联
Keepalived
安装
# 安装yum install keepalived ipvsadm -y# 查看配置文件位置rpm -qc keepalived
编辑配置文件
修改 /etc/keepalived/keepalived.conf 配置文件
master节点配置
! Configuration File for keepalivedglobal_defs {router_id mysql}vrrp_instance VI_1 {state BACKUP # 两个节点都为BACKUP状态,根据优先级大小判断谁为MASTERinterface enp0s3virtual_router_id 51priority 100advert_int 1nopreempt # 非抢占模式authentication {auth_type PASSauth_pass 1111}# 虚拟IP池virtual_ipaddress {192.168.101.125}}virtual_server 192.168.101.125 3306 {delay_loop 2lb_algo wrrlb_kind DRpersistence_timeout 60protocol TCPreal_server 192.168.101.11 3306 {weight 3notify_down /etc/keepalived/shutdown.sh # 当服务down了之后执行的脚本TCP_CHECK {connect_timeout 10 # 连接超时时长(秒)nb_get_retry 3 # 重试次数delay_before_retry 3 # 每隔3秒检测一服务是否可用connect_port 3306}}}
slave节点配置
! Configuration File for keepalivedglobal_defs {router_id mysql}vrrp_instance VI_1 {state BACKUP # 两个节点都为BACKUP状态,根据优先级大小判断谁为MASTERinterface enp0s3virtual_router_id 51priority 90advert_int 1nopreempt # 非抢占模式authentication {auth_type PASSauth_pass 1111}# 虚拟IP池virtual_ipaddress {192.168.101.125}}virtual_server 192.168.101.125 3306 {delay_loop 2lb_algo wrrlb_kind DRpersistence_timeout 60protocol TCPreal_server 192.168.101.12 3306 {weight 3notify_down /etc/keepalived/shutdown.sh # 当服务down了之后执行的脚本TCP_CHECK {connect_timeout 10 # 连接超时时长(秒)nb_get_retry 3 # 重试次数delay_before_retry 3 # 每隔3秒检测一服务是否可用connect_port 3306}}}
notify_down脚本
在/etc/keepalived目录下编写shutdown.sh脚本
#!/bin/shpkill keepalived
为脚本增加权限
chmod 755 /etc/keepalived/shutdown.sh
启动keepalived
systemctl start keepalived
踩过的坑
在设置虚拟IP之前,先ping一下该虚拟IP,确保该IP没有被使用。
HAProxy
分库分表
概念
互联网时代谈论最多的话题就是拆分。拆分一般分为水平拆分和垂直拆分,这并不单指对数据库或者缓存的拆分,主要是表达一种分而治之的思想和逻辑
水平拆分
水平拆分是指由于单一节点无法满足需求,需要扩展为多个节点,多个节点具有一致的功能,组成一个服务池,一个节点服务一部分请求量,所有节点共同处理大规模高并发的请求量
垂直拆分
垂直拆分是指按照功能进行拆分,秉着专业的人干专业的事的原则,把一个复杂的功能拆分为多个单一、简单的功能,不同单一简单功能组合在一起,和未拆分前完成的功能是一样的。由于每个功能职责单一、简单,使得维护和变更都变得更简单、容易、安全
三大问题
跨库关联
分布式事务
分页查询

