本文主要说明如何基于阿里云数据库文件存储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**************”。 tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql-5.7.26
挂载目录需要根据真实的环境,进行自行调整。可输入“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.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/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) 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测试
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 性能测试》