前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MariaDB Galera Cluster部署实战

MariaDB Galera Cluster部署实战

作者头像
jeremyxu
发布于 2018-05-10 11:06:40
发布于 2018-05-10 11:06:40
6.8K00
代码可运行
举报
运行总次数:0
代码可运行

背景

项目中使用的mariadb+gelera集群模式部署,之前一直用的是mysql的master/slave方式部署数据库的,这种集群模式以前没怎么搞过,这里研究并记录一下。

MariaDB Galera Cluster 介绍

MariaDB 集群是 MariaDB 同步多主机集群。它仅支持 XtraDB/ InnoDB 存储引擎(虽然有对 MyISAM 实验支持 - 看 wsrep_replicate_myisam 系统变量)。

主要功能:

  • 同步复制
  • 真正的 multi-master,即所有节点可以同时读写数据库
  • 自动的节点成员控制,失效节点自动被清除
  • 新节点加入数据自动复制
  • 真正的并行复制,行级
  • 用户可以直接连接集群,使用感受上与MySQL完全一致

优势:

  • 因为是多主,所以不存在Slavelag(延迟)
  • 不存在丢失事务的情况
  • 同时具有读和写的扩展能力
  • 更小的客户端延迟
  • 节点间数据是同步的,而 Master/Slave 模式是异步的,不同 slave 上的 binlog 可能是不同的

技术:

Galera 集群的复制功能基于 Galeralibrary 实现,为了让 MySQL 与 Galera library 通讯,特别针对 MySQL 开发了 wsrep API

Galera 插件保证集群同步数据,保持数据的一致性,靠的就是可认证的复制,工作原理如下图:

mariadb_galera_cluster

当客户端发出一个 commit 的指令,在事务被提交之前,所有对数据库的更改都会被write-set收集起来,并且将 write-set 纪录的内容发送给其他节点。

write-set 将在每个节点进行认证测试,测试结果决定着节点是否应用write-set更改数据。

如果认证测试失败,节点将丢弃 write-set ;如果认证测试成功,则事务提交。

MariaDB Galera Cluster搭建

我这里实验时使用的操作系统是CentOS7,使用了3台虚拟机,IP分别为10.211.55.610.211.55.710.211.55.8

关闭防火墙及selinux

为了先把MariaDB Galera Cluster部署起来,不受防火墙、selinux的干扰,先把3台虚拟机上这俩关闭了。如果防火墙一定要打开,可参考这里设置防火墙规则。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl disable firewalld.service
systemctl stop firewalld.service

setenforce 0
sed -i 's/^SELINUX=.*$/SELINUX=disabled/'  /etc/selinux/config

添加mariadb的yum源

在3台虚拟机上执行以下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 已使用国内yum镜像,原镜像地址是http://yum.mariadb.org
echo '
[mariadb]
name = MariaDB
baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.1/centos7-amd64
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1' > /etc/yum.repos.d/MariaDB.repo

安装软件包

在3台虚拟机上执行以下命令

1

yum install -y mariadb mariadb-server mariadb-common galera rsync

数据库初始化

10.211.55.6上执行以下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl start mariadb
mysql_secure_installation # 注意这一步是有交互的,需要回答一些问题,做一些设置
systemctl stop mariadb

修改galera相关配置

在3台虚拟机上均打开/etc/my.cnf.d/server.cnf进行编辑,修改片断如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name=galera_cluster
wsrep_cluster_address="gcomm://10.211.55.6,10.211.55.7,10.211.55.8"
wsrep_node_name=10.211.55.6   # 注意这里改成本机IP
wsrep_node_address=10.211.55.6   # 注意这里改成本机IP
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
...

启动MariaDB Galera Cluster服务

先在第1台虚拟机执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo -u mysql /usr/sbin/mysqld --wsrep-new-cluster &> /tmp/wsrep_new_cluster.log &
disown $!
tail -f /tmp/wsrep_new_cluster.log

出现 ready for connections ,证明启动成功,继续在另外两个虚拟机里执行命令:

1

systemctl start mariadb

等后面两个虚拟机里mariadb服务启动后,再到第1台虚拟机里执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(ps -ef|grep mysqld|grep -v grep|awk '{print $2}'|xargs kill -9) &>/dev/null
systemctl start mariadb

验证MariaDB Galera Cluster服务

在任意虚拟机里执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql -e "show status like 'wsrep_cluster_size'"  # 这里应该显示集群里有3个节点
mysql -e "show status like 'wsrep_connected'"     # 这里应该显示ON
mysql -e "show status like 'wsrep_incoming_addresses'" # 这里应该显示10.211.55.7:3306,10.211.55.8:3306,10.211.55.6:3306
mysql -e "show status like 'wsrep_local_state_comment'" # 这里节点的同步状态

查看集群全部相关状态参数可执行以下命令:

1

mysql -e "show status like 'wsrep_%'"

至此,MariaDB Galera Cluster已经成功部署。

MariaDB Galera Cluster的自启动

在实际使用中发现一个问题,Galera集群启动时必须按照一个特定的规则启动,研究了下,发现规则如下:

  • 如果集群从来没有启动过(3个节点上都没有/var/lib/mysql/grastate.dat文件),则必要由其中一个节点以--wsrep-new-cluster参数启动,另外两个节点正常启动即可
  • 如果集群以前启动过,则参考/var/lib/mysql/grastate.dat,找到safe_to_bootstrap1的节点,在该节点上以--wsrep-new-cluster参数启动,另外两个节点正常启动即可
  • 如果集群以前启动过,但参考/var/lib/mysql/grastate.dat,找不到safe_to_bootstrap1的节点(一般是因为mariadb服务非正常停止造成),则在3个节点中随便找1个节点,将/var/lib/mysql/grastate.dat中的safe_to_bootstrap修改为1,再在该节点上以--wsrep-new-cluster参数启动,另外两个节点正常启动即可

从以上3种场景可知,正常情况下很难保证mariadb galera cluster可以无人值守地完成开机自启动。国外论坛上也有人反映了这个问题,但好像官方的人员好像说设计上就是这样,怎么可以这样。。。

最后写了个脚本,放在3个虚拟机上面,解决了这个问题。脚本如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat /usr/local/bin/mariadb_cluster_helper.sh

#!/bin/bash
GRASTATE_FILE=/var/lib/mysql/grastate.dat
WSREP_NEW_CLUSTER_LOG_FILE=/tmp/wsrep_new_cluster.log
# 如果启动mariadb超过10秒还没返回0,则认为失败了
START_MARIADB_TIMEOUT=10
# 以--wsrep-new-cluster参数启动,超过5次检查,发现仍没有其它节点加入集群,则认为此路不通
SPECIAL_START_WAIT_MAX_COUNT=5
# 得到本机IP
MY_IP=$(grep 'wsrep_node_address' /etc/my.cnf.d/server.cnf | awk -F '=' '{print $2}')

# 杀掉mysqld进程
function kill_mysqld_process() {
    (ps -ef|grep mysqld|grep -v grep|awk '{print $2}'|xargs kill -9) &>/dev/null
}

# 正常启动mariadb
function start_mariadb_normal(){
    # 首先确保safe_to_bootstrap标记为0
    sed -i 's/^safe_to_bootstrap.*$/safe_to_bootstrap: 0/' $GRASTATE_FILE
    timeout $START_MARIADB_TIMEOUT systemctl start mariadb &> /dev/null
    return $?
}

# 以--wsrep-new-cluster参数启动mariadb
function start_mariadb_special(){
    # 首先确保safe_to_bootstrap标记为1
    sed -i 's/^safe_to_bootstrap.*$/safe_to_bootstrap: 1/' $GRASTATE_FILE
    # 以--wsrep-new-cluster参数启动mariadb
    /usr/sbin/mysqld --user=mysql --wsrep-new-cluster &> $WSREP_NEW_CLUSTER_LOG_FILE &
    disown $!
    try_count=0
    # 循环检查
    while [ 1 ]; do
        # 如果超过SPECIAL_START_WAIT_MAX_COUNT次检查,仍没有其它节点加入集群,则认为此路不通,尝试正常启动,跳出循环
        if [ $try_count -gt $SPECIAL_START_WAIT_MAX_COUNT ] ; then
            kill_mysqld_process
            start_mariadb_normal
            return $?
        fi
        new_joined_count=$(grep 'synced with group' /tmp/wsrep_new_cluster.log | grep -v $MY_IP|wc -l)
        exception_count=$(grep 'exception from gcomm, backend must be restarted' $WSREP_NEW_CLUSTER_LOG_FILE | wc -l)
        # 如果新加入的节点数大于0,则认为集群就绪了,可正常启动了,跳出循环
        # 如果运行日志中发现了异常(两个节点都以--wsrep-new-cluster参数启动,其中一个会报错),则认为此路不通,尝试正常启动,跳出循环
        if [ $new_joined_count -gt 0 ] || [ $exception_count -gt 0 ] ; then
            kill_mysqld_process
            start_mariadb_normal
            return $?
        else
            try_count=$(( $try_count + 1 ))
        fi
        sleep 5
    done
}

# 首先杀掉mysqld进程
kill_mysqld_process

ret=-1

# 如果safe_to_bootstrap标记为1,则立即以--wsrep-new-cluster参数启动
if [ -f $GRASTATE_FILE ]; then
    safe_bootstrap_flag=$(grep 'safe_to_bootstrap' $GRASTATE_FILE | awk -F ': ' '{print $2}')
    if [ $safe_bootstrap_flag -eq 1 ] ; then
        start_mariadb_special
        ret=$?
    else
        start_mariadb_normal
        ret=$?
    fi
else
    start_mariadb_normal
    ret=$?
fi

# 随机地按某种方式启动,直到以某种方式正常启动以止;否则杀掉mysqld进程,随机休息一会儿,重试
while [ $ret -ne 0 ]; do
    kill_mysqld_process
    sleep_time=$(( $RANDOM % 10 ))
    sleep $sleep_time
    choice=$(( $RANDOM % 2 ))
    ret=-1
    if [ $choice -eq 0 ] ; then
        start_mariadb_special
        ret=$?
    else
        start_mariadb_normal
        ret=$?
    fi
done

# 使上述脚本开机自启动
chmod +x /usr/local/bin/mariadb_cluster_helper.sh
chmod +x /etc/rc.d/rc.local
echo '
/usr/local/bin/mariadb_cluster_helper.sh &> /var/log/mariadb_cluster_helper.log &' >> /etc/rc.d/rc.local

然后3个节点终于可以开机自启动自动组成集群了。

搭配keepalived+haproxy+clustercheck

为了保证mariadb galera集群的高可用,可以使用haproxy进行请求负载均衡,同时为了实现haproxy的高可用,可使用keepalived实现haproxy的热备方案。keepalived实现haproxy的热备方案可参见之前的博文。这里重点说一下haproxy对mariadb galera集群的请求负载均衡。

这里使用了 https://github.com/olafz/percona-clustercheck 所述方案,使用外部脚本在应用层检查galera节点的状态。

首先在mariadb里进行授权:

1

GRANT PROCESS ON *.* TO 'clustercheckuser'@'%' IDENTIFIED BY 'clustercheckpassword!'

下载检测脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget -O /usr/bin/clustercheck https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
chmod +x /usr/bin/clustercheck

准备检测脚本用到的配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MYSQL_USERNAME="clustercheckuser"
MYSQL_PASSWORD="clustercheckpassword!"
MYSQL_HOST="$db_ip"
MYSQL_PORT="3306"
AVAILABLE_WHEN_DONOR=0

测试一下监控脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# /usr/bin/clustercheck > /dev/null
# echo $?
0 # synced
1 # un-synced

使用xinetd暴露http接口,用于检测galera节点同步状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat > /etc/xinetd.d/mysqlchk << EOF
# default: on
# description: mysqlchk
service mysqlchk
{
        disable = no
        flags = REUSE
        socket_type = stream
        port = 9200
        wait = no
        user = nobody
        server = /usr/bin/clustercheck
        log_on_failure += USERID
        only_from = 0.0.0.0/0
        per_source = UNLIMITED
}
EOF

service xinetd restart

测试一下暴露出的http接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl http://127.0.0.1:9200
Galera cluster node is synced. # synced
Galera cluster node is not synced # un-synced

最后在/etc/haproxy/haproxy.cfg里配置负载均衡:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
frontend vip-mysql
    bind $vip:3306
    timeout client 900m
    log global
    option tcplog
    mode tcp
    default_backend vms-mysql
backend vms-mysql
    option httpchk
    stick-table type ip size 1000
    stick on dst
    balance leastconn
    timeout server 900m
    server mysql1 $db1_ip:3306 check inter 1s port 9200 backup on-marked-down shutdown-sessions maxconn 60000
    server mysql2 $db2_ip:3306 check inter 1s port 9200 backup on-marked-down shutdown-sessions maxconn 60000
    server mysql2 $db3_ip:3306 check inter 1s port 9200 backup on-marked-down shutdown-sessions maxconn 60000

...

搭配galera仲裁服务

官方也提到gelera集群最少要三节点部署,但每增加一个节点,要付出相应的资源,因此也可以最少两节点部署,再加上一个galera仲裁服务。

The recommended deployment of Galera Cluster is that you use a minimum of three instances. Three nodes, three datacenters and so on. In the event that the expense of adding resources, such as a third datacenter, is too costly, you can use Galera Arbitrator. Galera Arbitrator is a member of the cluster that participates in voting, but not in the actual replication

这种部署模式有两个好处:

  1. 使集群刚好是奇数节点,不易产生脑裂。
  2. 可能通过它得到一个一致的数据库状态快照,可以用来备份。

这种部署模式的架构图如下:

mage-20180401214224

部署方法也比较简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 假设已经构建了一个两节点的galera集群,在第3个节点部署garbd服务
echo '
GALERA_NODES="10.211.55.6:4567 10.211.55.7:4567" # 这里是两节点的地址
GALERA_GROUP="galera_cluster"  # 这里的group名称保持与两节点的wsrep_cluster_name属性一致
LOG_FILE="/var/log/garb.log"
' > /etc/sysconfig/garb
systemctl start garb # 启动garbd服务

测试一下效果。

首先看一下两节点部署产生脑裂的场景。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 首先在第3个节点停止garb服务
systemctl stop garb

# 然后在第2个节点drop掉去住第1个节点和仲裁节点的数据包
iptables -A OUTPUT -d 10.211.55.6 -j DROP
iptables -A OUTPUT -d 10.211.55.9 -j DROP

# 这时检查前两个节点的同步状态,发生脑裂了,都不是同步状态了
mysql -e "show status like 'wsrep_local_state_comment'"
+---------------------------+-------------+
| Variable_name             | Value       |
+---------------------------+-------------+
| wsrep_local_state_comment | Initialized |
+---------------------------+-------------+

再试验下有仲裁节点参与的场景。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 首先在第3个节点启动garb服务
systemctl start garb

# 在前两个节点查看集群节点数,发现是3个,说明包括了仲裁节点
mysql -e "show status like 'wsrep_cluster_size'"
+---------------------------+-------------+
| Variable_name             | Value       |
+---------------------------+-------------+
| wsrep_cluster_size        | 3           |
+---------------------------+-------------+

# 然后在第2个节点drop掉去住第1个节点和仲裁节点的数据包
iptables -A OUTPUT -d 10.211.55.6 -j DROP
iptables -A OUTPUT -d 10.211.55.9 -j DROP

# 这时检查第1个节点的同步状态,仍然是同步状态
mysql -e "show status like 'wsrep_local_state_comment'"
+---------------------------+-------------+
| Variable_name             | Value       |
+---------------------------+-------------+
| wsrep_local_state_comment | Synced      |
+---------------------------+-------------+

# 再在第1个节点查看集群节点数,发现是2个
mysql -e "show status like 'wsrep_cluster_size'"
+---------------------------+-------------+
| Variable_name             | Value       |
+---------------------------+-------------+
| wsrep_cluster_size        | 2           |
+---------------------------+-------------+

# 这时检查第2个节点的同步状态,发现是未同步的
mysql -e "show status like 'wsrep_local_state_comment'"
+---------------------------+-------------+
| Variable_name             | Value       |
+---------------------------+-------------+
| wsrep_local_state_comment | Initialized |
+---------------------------+-------------+

以前试验说明采用了仲裁节点后,因为集群节点数变为了奇数,有效地避免了脑裂,同时将真正有故障的节点隔离出去了。

参考

  1. https://segmentfault.com/a/1190000002955693
  2. https://github.com/olafz/percona-clustercheck
  3. http://galeracluster.com/documentation-webpages/arbitrator.html
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
MySQL 查询优化方法
在数据库应用中,高效的查询性能至关重要。MySQL 作为广泛使用的关系型数据库,掌握一些常用的查询优化方法可以极大地提升系统的响应速度和性能。今天,我们就来一起探讨常用的优化 MySQL 查询方法及示例。
阿珍
2024/09/18
2600
MySQL 查询优化方法
Java面试——数据库
【1】Read Uncommitted(读取未提交内容):出现脏读,也就是可能读取到其他会话中未提交事务修改的数据。 【2】Read Committed(读取已提交内容):不可重复读,只能读取到已经提交的数据。Oracle 等数据库默认的隔离级别。 【3】Repeatable Read(可重复读):出现幻读。在同一个事务内的查询都和事务开始时刻一致。InnoDB默认级别。 【4】Serializable(串行读):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。
Java架构师必看
2021/05/06
6280
Java面试——数据库
某个表有数千万数据,查询比较慢,如何优化?
在 MySQL 技术面试的过程中,面试官常常会抛出一些极具挑战性的问题,以此来检验面试者的技术功底和解决实际问题的能力。“某个表有数千万数据,查询比较慢,如何优化?” 便是这样一个经典且高频的问题,它涉及到 MySQL 的索引优化、查询语句优化、存储引擎选择以及服务器硬件配置等多个关键领域。下面,我们将深入探讨面试官可能的询问方式、问题的核心重点以及面试者全面而准确的回答思路。
小白的大数据之旅
2025/05/27
1870
某个表有数千万数据,查询比较慢,如何优化?
MySQL优化的5个维度
所谓的性能优化,一般针对的是MySQL查询的优化。既然是优化查询,我们自然要先知道查询操作要经过哪些环节,然后思考可以在哪些环节进行优化。
蝉沐风
2022/08/22
5150
MySQL优化的5个维度
5个MySQL优化技巧,你一定用的上
所谓的性能优化,一般针对的是MySQL查询的优化。既然是优化查询,我们自然要先知道查询操作要经过哪些环节,然后思考可以在哪些环节进行优化。
蝉沐风
2022/08/17
1.1K0
5个MySQL优化技巧,你一定用的上
【收藏】MySQL 超全优化清单(可执行系列)
先从一般的语句优化开始,其实对于很多规范大家并不陌生,可就是在用的时候,无法遵从,希望今天大家再过一遍,可以养成一种良好的数据库编码习惯。
lyb-geek
2024/07/17
2740
【收藏】MySQL 超全优化清单(可执行系列)
MySQL数据库优化的八种方式(经典必看)
MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。
全栈程序员站长
2022/09/01
4.8K0
MySQL数据库优化的八种方式(经典必看)
Mysql 的优化方式,都给你整理好了(附思维导图)
在创建表的时候我们使用sql语句,Create table tableName () engine=myisam|innodb;
后端码匠
2020/04/08
1.1K0
Mysql 的优化方式,都给你整理好了(附思维导图)
MySQL优化思路及框架
MySQL优化框架 1. SQL语句优化 2. 索引优化 3. 数据库结构优化 4. InnoDB表优化 5. MyISAM表优化 6. Memory表优化 7. 理解查询执行计划 8. 缓冲和缓存
若与
2018/04/25
1.1K0
MySQL优化思路及框架
mysql优化 面试_数据库优化工具
数据库优化是一个老生常谈的问题,刚入门的小白或者工作N年的光头对这个问题应该都不陌生,你要面试一个中高级工程师那么他就想”哥俩好”一样那么粘,面试官肯定会问这个问题,这篇文章我们就和它哥俩好!而且这个问题就是一个送分题,数据库的优化方案基本就是那些,答案也都是固定的,大家只要好好准备这个问题就不会住你,可以在面试中安排面试官,不然就被面试官安排!话不多说下边就针对数据库优化展开讲!
全栈程序员站长
2022/11/01
1.2K0
mysql优化 面试_数据库优化工具
Java面试手册:数据库 ①
数据库基础知识 1.什么是数据库。 MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDB
南风
2018/12/06
7260
Java面试手册:数据库 ①
技术核心 | MySQL性能结构优化原理
查询当前服务器执行超过60s的SQL,可以通过脚本周期性的来执行这条SQL,就能查出有问题的SQL。
数据和云
2019/05/15
4850
技术核心 | MySQL性能结构优化原理
MYSQL 优化
数据库性能依赖于数据库层面的一些诸如表、查询及配置等因素。而软件功能的构成最终反映到硬件上面,即CPU使用及I/O操作。减少CPU消耗,增加I/O效率则是提高软件性能的根本驱动。着眼于数据库性能的优化,首先我们需要从较高层次软件层面规则作指导,使用wall-clock 时间测算性能。当专业知识进一步提升,了解了更多的内部机制,则可以从CPU时钟及I/O操作方面进行改进。
WindWant
2020/09/11
2.6K0
Mysql优化
是否启用mysql查询缓存,可以通过2个参数:query_cache_type和query_cache_size,
码客说
2019/10/22
8530
【MySQL 系列】MySQL 架构篇
Server 层:负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接池,执行器、优化器、解析器、预处理器、查询缓存等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等)都在 Server 层实现;
栗筝i
2024/03/19
2.3K0
【MySQL 系列】MySQL 架构篇
MYSQL优化
本文主要参考官网的优化 https://dev.mysql.com/doc/refman/5.7/en/optimization.html
大大刺猬
2022/11/09
1K0
MySql性能测试
相信很多做性能测试的朋友都知道,性能测试并不单单只是看服务器cpu、IO、内存、网络等,我们还需要了解Mysql性能,那么我们看看Mysql性能主要内容有哪些呢?
全栈程序员站长
2021/05/27
2.1K0
顺丰快递:请签收MySQL灵魂十连
负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了默认存储引擎(经常用的也是这个)。
sowhat1412
2020/12/14
6770
顺丰快递:请签收MySQL灵魂十连
如何解决 MySQL 数据库服务器 CPU 飙升的情况
经过上述优化措施后,在促销活动期间再次监控 MySQL 服务器的 CPU 使用率,发现其稳定在 30% - 40% 左右,系统响应速度明显提升,用户体验得到了极大改善。
威哥爱编程
2025/02/24
2070
Mysql实战面试题
B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。
爱撸猫的杰
2019/03/28
1.1K0
Mysql实战面试题
相关推荐
MySQL 查询优化方法
更多 >
LV.3
这个人很懒,什么都没有留下~
目录
  • 背景
  • MariaDB Galera Cluster 介绍
  • MariaDB Galera Cluster搭建
    • 关闭防火墙及selinux
    • 添加mariadb的yum源
    • 安装软件包
    • 数据库初始化
    • 修改galera相关配置
    • 启动MariaDB Galera Cluster服务
    • 验证MariaDB Galera Cluster服务
  • MariaDB Galera Cluster的自启动
  • 搭配keepalived+haproxy+clustercheck
  • 搭配galera仲裁服务
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档