在容器中使用AliSQL

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: ### AliSQL容器 #### ALISQL AliSQL是基于MySQL官方版本的一个分支,由阿里云数据库团队维护,目前也应用于阿里巴巴集团业务以及阿里云数据库服务。该版本在社区版的基础上做了大量的性能与功能的优化改进。尤其适合电商、云计算以及金融等行业环境。

AliSQL容器

ALISQL

AliSQL是基于MySQL官方版本的一个分支,由阿里云数据库团队维护,目前也应用于阿里巴巴集团业务以及阿里云数据库服务。该版本在社区版的基础上做了大量的性能与功能的优化改进。尤其适合电商、云计算以及金融等行业环境。

基于AliSQL打包的docker镜像

对于MySQL或其分支(MariaDB)分支的数据库镜像,docker官方是有相应的模板的。 但是其官方模板都是使用MySQL的二进制包,通过系统自带的包管理器下载。而AliSQL没有,所以我们只能拉下代码,打一个编译后的的基础镜像, 然后基于这个基础镜像封装mysql镜像的逻辑。
镜像的docker-entrypoint.sh和官方基本一致, 如果您有mysql镜像的使用,将mysql的镜像名直接替换为AliSQL (registry.cn-hangzhou.aliyuncs.com/acs-sample/alisql:latest)即可。

mysqlz使用方式

参考文章:https://hub.docker.com/_/mysql/
MYSQL_ROOT_PASSWORD
设置root帐号密码

MYSQL_DATABASE
可以选择在镜像初始的时候创建一个数据库,如果设置了帐号密码,该帐号会被授权超级帐号。

MYSQL_USER, MYSQL_PASSWORD
帐号密码会被用于给MYSQL_DATABASE指定的数据库,被授权一个有超级用户权限的帐号。(ps root用户不需要此方法设置,root用户只需设置MYSQL_ROOT_PASSWORD即可)

MYSQL_ALLOW_EMPTY_PASSWORD
如果设置为yes,则允许容器以启动时不设置root帐号密码。 (该变量并不推荐)

MYSQL_RANDOM_ROOT_PASSWORD
设置为yes,则为root帐号生成随机密码。生成的密码会输出 (GENERATED ROOT PASSWORD: .....)

MYSQL_ONETIME_PASSWORD
为root设置一个初始密码, 第一次登录后强制要求修改。

在容器服务上部署AliSQL容器

选择创建应用:
Snip20161030_6

选择按镜像创建应用:
Snip20161030_8

选择AliSQL镜像:
Snip20161030_10

设置环境变量, root帐号密码,和通过宿主机暴露的端口:
Snip20161030_14

创建完成后,我们可以在容器列表中看到这个容器,拿到他通过宿主机地址和暴露这个容器的端口:
Snip20161030_15

在其他机器上通过mysql客户端连接:
Snip20161030_18

部署一个基于AliSQL容器的wordpress

如何将已有的MySQL应用替换为AliSQL应用呢,我们以一个WordPress应用为例,将其中的MySQL镜像的替换为AliSQL。

选择创建应用,使用编排模板创建:
Snip20161030_20

选择左下角的使用已有编排模板,然后选择WordPress模板:
Snip20161030_19

在模板文件中,将AliSQL的镜像地址 (registry.cn-hangzhou.aliyuncs.com/acs-sample/alisql:latest)替换MySQL镜像:
Snip20161030_22

创建成功后可以在容器列表看到4个Running的容器,3个WordPress容器和1个AliSQL的容器:
Snip20161030_23

在路由列表可以看到可供外网访问的Url,打开会看到WordPress成功运行:
Snip20161030_24
Snip20161030_25

Tips

AliSQL编译支持将TokuDB作为存储引擎,但是由于TokuDB的启动环境要求kernel关闭THP(transparent huge pages),原因这篇文章有简单描述Why TokuDB hates Transparent HugePages,一般建议是将THP关闭MariaDB enabling TokuDB (ps: transparent huge pages很多中文资料直接翻译成大页内存,其实它指是透明大页内存。大页内存是好东西,将内核管理内存的最小单位从4kb提升到2MB。对于大块文件可以减少随机读写的寻址次数。而THP的作用是将每个2MBpage的多余空间由kernel管理封装。 它减少了操作内存的程序复杂度,但是不适用于数据库这种对内存要求苛刻的应用,数据库产品例如MySQL,MongoDB,Redis都有自己的内存管理器,故需要关闭THP)。 而在docker中容器共享宿主机kernel,不建议修改宿主机的kernel参数。所以在编译AliSQL的时候去掉tokudb引擎。 这个问题暂时没有找到合适的解决方案。 在redis和mongodb中都会有这个问题,只不过他们只会warning一下,没有TokuDB这么傲娇完全不启动。

AliSQL有推荐的配置文件,可以拿来配置使用。 将cnf文件映射到/etc/mysql下即可。 命令:
$ docker run --name alisql -v /my/custom:/etc/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d registry.cn-hangzhou.aliyuncs.com/acs-sample/alisql:latest

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
Web App开发 iOS开发 Docker
Docker 容器的日志
【10月更文挑战第31天】
35 5
|
6月前
|
关系型数据库 MySQL Docker
构建MySQL8.0.26镜像和容器
MySQL8.0.26 percona-toolkit Dockerfile
171 3
|
6月前
|
存储 关系型数据库 MySQL
解读 MySQL 容器信息:`docker inspect` 字段详解
解读 MySQL 容器信息:`docker inspect` 字段详解
131 1
|
5月前
|
关系型数据库 应用服务中间件 nginx
容器引擎Docker
带你简单了解docker,开发必备!!!
|
7月前
|
关系型数据库 MySQL 数据安全/隐私保护
使用Docker构建本地Mysql容器及配置
使用Docker构建本地Mysql容器及配置
247 1
|
7月前
|
网络协议 应用服务中间件 nginx
一文详解Docker容器(Container)
一文详解Docker容器(Container)
|
Linux 应用服务中间件 nginx
docker 快速查询容器是否正常启动
docker 快速查询容器是否正常启动
1572 0
|
Kubernetes Cloud Native Linux
容器引擎Docker与Podman解析
最近技术群里有朋友问我,不是说K8S要弃用Docker了吗?还要不要继续学习这块内容?是不是得改行卖白菜了?
317 0
容器引擎Docker与Podman解析
|
存储 网络安全 Docker
Docker查看容器日志
Docker查看容器日志
177 0
|
人工智能 Linux 应用服务中间件
podman容器操作
podman容器操作
609 2