本文主要说明如何基于阿里云数据库文件存储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挂载目录:
#解压并重命名为mysql-5.7.26,放置到DBFS的挂载目录“/mnt/dbfs/hgsrb6i*****/dbfs-ytr9rtr9**************”。
挂载目录需要根据真实的环境,进行自行调整。可输入“df -h”显示挂载信息,结果如图所示。
文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 16G 0 16G 0% /dev tmpfs 16G 288K 16G 1% /dev/shm dbfs_server 100G 46M 100G 1% /mnt/dbfs/hgsrb6i****/dbfs-ytr9rtr9**************
使用如下命令检查创建好的数据库文件存放目录
ls -lrt
结果如图所示
总用量 0 drwxr-xr-x 1 root root 0 11月 18 18:53 mysql-5.7.26
-
初始化MySQL数据库
-
创建数据文件存放目录
在DBFS服务挂载目录下,创建数据库目录“my3307”,可输入“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”目录,之后输入以下命令,创建子目录
mkdir data log run tmp
在“my3307”目录下创建MySQL数据库的配置文件my.cnf,配置可参考 MySQL 5.7配置文件参考
输入“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数据库
/mnt/dbfs/hgsrb6i*****/dbfs-ytr9rtr*************/mysql-5.7.26/bin/mysqld --defaults-file=/mnt/dbfs/hgsrb6i*****/dbfs-ytr9rtr9*************/my3307/my.cnf --initialize-insecure --user=root
data目录下输入“ls -lrt”查看初始化完成后的data目录,结果如图所示
总用量 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.cnfdrwxr-x--- 1 root root 0 11月 18 19:29 performance_schemadrwxr-x--- 1 root root 0 11月 18 19:29 mysqldrwxr-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.piddrwxr-x--- 1 root root 0 11月 18 19:32 sbtest
-
-
运行MySQL数据库
通过DBFS挂载点下MySQL二进制安装目录中的mysqld拉起数据库:
/mnt/dbfs/hgsrb6i*****/dbfs-ytr9rtr9*************/mysql-5.7.26/bin/mysqld --defaults-file=/mnt/dbfs/hgsrb6i*****/dbfs-ytr9rtr9************/my3307/my.cnf --user=root &
登录MySQL数据库:
/mnt/dbfs/hgsrb6i*****/dbfs-ytr9rtr9************/mysql-5.7.26/bin/mysql -uroot --socket=/mnt/dbfs/hgsrb6i*****/dbfs-ytr9rtr9**************/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) 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测试
-
sysbench准备
执行如下命令下载sysbench
git clone https://github.com/akopytov/sysbench.git -b 1.0.17
执行如下命令安装sysbench
sh autogen.sh ./configure make && make install
登录MySQL数据库
/mnt/dbfs/hgsrb6*****/dbfs-ytr9rtr9*************/mysql-5.7.26/bin/mysql -uroot --socket=/mnt/dbfs/hgsrb6i*****/dbfs-ytr9rtr9**************/my3307/run/mysql.sock
在MySQL中执行如下命令,创建sysbench测试账号
create user 'sbtest'@'%'; create database sbtest; grant all privileges on *.* to 'sbtest'@'%' identified by 'sbtest';
执行如下命令,初始化数据
sysbench --db-driver=mysql --report-interval=1 --mysql-table-engine=innodb \ --oltp-table-size=10000 --oltp-tables-count=32 --threads=32 --time=1000 \ --mysql-host=127.0.0.1 --mysql-port=3307 --mysql-user=sbtest --mysql-password=sbtest \ --mysql-db=sbtest /opt/sysbench/tests/include/oltp_legacy/oltp.lua prepare
执行如下命令,跑OLTP模型
sysbench --db-driver=mysql --report-interval=1 --mysql-table-engine=innodb \ --oltp-table-size=10000 --oltp-tables-count=32 --threads=32 --time=1000 \ --mysql-host=127.0.0.1 --mysql-port=3307 --mysql-user=sbtest --mysql-password=sbtest \ --mysql-db=sbtest /opt/sysbench/tests/include/oltp_legacy/oltp.lua run
-
性能数据
性能数据参考《 MySQL 性能测试 》
-