本文主要说明如何基于阿里云数据库文件存储DBFS搭建MySQL数据库。
背景信息
云上自建数据库通常会选用云盘和ext4文件系统作为MySQL数据库的文件存储。而基于DBFS构建,不但简化了用户基于块存储架构的复杂度,而且面向数据库场景,提供了原子写、在线扩容、关键IO加速等特性。DBFS旨在为用户提供更高的性能、更好的数据可靠性可用性及易用性等。
DBFS优势如下表所示:
对比项 |
基于云盘+ext4构建 |
基于DBFS构建 |
原子写 |
不支持。 |
支持。避免Double Write Buffer的影响。 |
在线扩容 |
不可控IO Hang现象。 |
业务友好。 |
高可用 |
单机架构。 |
共享存储双机高可用架构。 |
易用性 |
需要管理云盘块设备,并且制作ext4。 |
挂载即用。 |
存储计算分离架构图:
基于DBFS构建MySQL数据库
以下主要详细介绍如何基于DBFS构建MySQL的存储计算分离架构:
- 申请DBFS服务
- 安装MySQL
从官网下载安装包:
#下载MySQL二进制包
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
解压到DBFS挂载目录:
#解压重命名,放置到DBFS的挂载目录“/mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrvtgnxkba”。
#挂载目录需要根据真实的环境,进行自行调整。
[root@iZbp156ycm6s06xjdb8acoZ ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 16G 0 16G 0% /dev
tmpfs 16G 288K 16G 1% /dev/shm
dbfs_server 100G 46M 100G 1% /mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrvtgnxkba
[root@iZbp156ycm6s06xjdb8acoZ dbfs-ytr9rtr9tgvwyrvtgnxkba]# ls -lrt
总用量 0
drwxr-xr-x 1 root root 0 11月 18 18:53 mysql-5.7.26
- 初始化MySQL数据库
- 创建数据文件存放目录
在DBFS服务挂载目录下,创建数据库目录”my3307“:
#创建位于DBFS上的数据目录
[root@iZbp156ycm6s06xjdb8acoZ dbfs-ytr9rtr9tgvwyrvtgnxkba]# ls -lrt
总用量 0
drwxr-xr-x 1 root root 0 11月 18 18:53 mysql-5.7.26
drwxr-xr-x 1 root root 0 11月 18 19:30 my3307
创建数据库文件子目录:
#切换到“my3307”目录,创建子目录
[root@iZbp156ycm6s06xjdb8acoZ my3307]# mkdir data log run tmp
#检查创建好的数据库文件存放目录
[root@iZbp156ycm6s06xjdb8acoZ my3307]# ls -lrt
总用量 1024
-rw-r--r-- 1 root root 5339 11月 18 19:27 my.cnf
drwxr-xr-x 1 root root 0 11月 18 19:30 tmp
drwxr-xr-x 1 root root 0 11月 18 19:30 run
drwxr-xr-x 1 root root 0 11月 18 19:30 log
drwxr-xr-x 1 root root 0 11月 18 19:32 data
- 创建数据库
MySQL数据库的配置文件“my.cnf”,请参考MySQL 5.7配置文件参考。
#初始化MySQL数据库。
/mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrvtgnxkba/mysql-5.7.26/bin/mysqld --defaults-file=/mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrvtgnxkba/my3307/my.cnf --initialize-insecure --user=root
#初始化完成后的data目录
[root@iZbp156ycm6s06xjdb8acoZ data]# ls -lrt
总用量 4160512
-rw-r----- 1 root root 1073741824 11月 18 19:27 ibdata1
-rw-r----- 1 root root 1073741824 11月 18 19:27 ibdata2
-rw-r----- 1 root root 524288000 11月 18 19:28 ib_logfile0
-rw-r----- 1 root root 524288000 11月 18 19:28 ib_logfile1
-rw-r----- 1 root root 524288000 11月 18 19:29 ib_logfile2
-rw-r----- 1 root root 524288000 11月 18 19:29 ib_logfile3
-rw-r----- 1 root root 56 11月 18 19:29 auto.cnf
drwxr-x--- 1 root root 0 11月 18 19:29 performance_schema
drwxr-x--- 1 root root 0 11月 18 19:29 mysql
drwxr-x--- 1 root root 0 11月 18 19:29 sys
-rw-r--r-- 1 root root 406 11月 18 19:29 ib_buffer_pool
-rw-r----- 1 root root 12582912 11月 18 19:30 ibtmp1
-rw-r--r-- 1 root root 5 11月 18 19:30 dbfs-node-1.pid
drwxr-x--- 1 root root 0 11月 18 19:32 sbtest
- 运行MySQL数据库
通过DBFS挂载点下MySQL二进制安装目录中的mysqld拉起数据库:
/mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrvtgnxkba/mysql-5.7.26/bin/mysqld --defaults-file=/mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrvtgnxkba/my3307/my.cnf --user=root &
登录MySQL数据库:
#登录MySQL数据库
/mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrvtgnxkba/mysql-5.7.26/bin/mysql -uroot --socket=/mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrvtgnxkba/my3307/run/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26-log MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
- sysbench测试