在容器中使用AliSQL

简介: ### 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
监控 Java 数据库连接
OceanBase数据库常见问题之observer 启动失败如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
1278 0
|
8月前
|
存储 SQL 关系型数据库
AI时代,当 MySQL 遇见列式存储引擎 DuckDB
在AI浪潮席卷全球的今天,有人认为关系型数据库已走向黄昏,MySQL 的生命力正在被边缘化。但事实真的如此吗?AliSQL,作为 MySQL 的重要分支,自2010年诞生以来,始终默默支撑着阿里巴巴集团核心业务的高并发、高可用需求。它从未消失,只是沉寂太久。 2026年,AliSQL社区的一帮开发者们,开始为AliSQL注入创新的血液!这是他们的第一篇,系统阐述了MySQL深度融合DuckDB的重大技术实践。这不仅是对“MySQL 只擅长 TP”这一行业共识的突破性回应,更是一次兼具工程魄力与架构远见的创新。
AI时代,当 MySQL 遇见列式存储引擎 DuckDB
|
8月前
|
SQL 存储 关系型数据库
别再嫌弃MySQL了!AI时代,当DuckDB拥抱MySQL
阿里云RDS MySQL DuckDB引擎推出两种形态:只读实例(HTAP读扩展)与分析主实例(支持写入/多源汇聚)。通过内核级集成,兼顾MySQL兼容性与DuckDB列式分析性能,在Binlog同步、高可用、数据安全、入库性能及SQL兼容性等方面全面增强,助力用户构建低成本、高性能的实时分析平台。(239字)
|
SQL 关系型数据库 MySQL
linux 上源码编译安装 PolarDB-X
linux 上源码编译安装 PolarDB-X
1668 6
linux 上源码编译安装 PolarDB-X
|
安全 Java 关系型数据库
Spring是如何保证同一事务获取同一个Connection的?使用Spring的事务同步机制解决:数据库刚插入的记录却查询不到的问题【享学Spring】(上)
Spring是如何保证同一事务获取同一个Connection的?使用Spring的事务同步机制解决:数据库刚插入的记录却查询不到的问题【享学Spring】(上)
|
开发框架 自然语言处理 Java
跨平台服务开发的利器——深入解析Thrift Compiler的工作机制与内部实现细节!
【8月更文挑战第18天】在现代软件开发中,代码生成器日益重要,能根据特定输入自动生成源代码,提高效率与可维护性。Thrift作为跨平台多语言框架,通过IDL文件定义数据和服务接口,并据此生成多语言代码,涵盖序列化、方法调用等。以示例IDL定义为例,Thrift Compiler生成服务端骨架与客户端代码框架,便于开发者添加业务逻辑。深入源码,“compiler/cpp/src/thriftl”目录下的组件负责词法、语法分析及代码生成,映射IDL至特定语言,体现编译原理与跨语言设计精髓。
509 0
成功解决:java: 无效的目标发行版: 17
这篇文章讲述了如何解决在启动SpringBoot项目时遇到的"无效的目标发行版: 17"的问题,主要是通过修改IDEA内置的编译设置,确保它使用正确的JDK版本。
|
运维 算法 安全
Linux下使用MD5SUM命令详解
Linux下使用MD5SUM命令详解
1908 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp微信小程序的智能家居系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的智能家居系统的详细设计和实现
602 0