# sqlc **Repository Path**: wx_ermu/sqlc ## Basic Information - **Project Name**: sqlc - **Description**: MySQL的快速部署脚本 - **Primary Language**: Python - **License**: GPL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-28 - **Last Updated**: 2026-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # sqlc sqlc工具提供MySQL,Mariadb的一些自动化脚本指令,以支持同机器上快速部署多MySQL实例。 ## 一、需求分析 最初的需求是为了实现快速创建MySQL实例,因为按照官方文档来创建一个MySQL实例需要分为几个步骤: 1. 下载对应的版本二进制安装包,解压缩到/usr/local目录下,通常是这个目录 2. 初始化数据目录。 3. 启动mysqld服务,修改初始密码。 4. 可能还需要安装默认未支持的存储引擎插件,建库建表等等... 但是初始化数据目录,**不同版本的mysql进行初始化数据目录的方式不同**,比如旧版的MySQL5和MariaDB采取scripts目录下脚本进行数据目录初始化,而MySQL8可以直接通过mysqld进行初始化,所以想直接使用python实现自动化。 自动化后有以下好处: 1. 如果是一台机器安装多个实例(通常是测试环境),重复步骤可以交给python脚本完成,更省事。 2. 如果安装的多实例MySQL版本不同,脚本自动化也更快,更准确。 3. 只需要修改配置项,指定好**安装目录,数据目录,网卡名称**,剩下安装步骤可以全自动。 * 由于MySQL创建之前需要设置my.cnf配置文件,所以这里my.cnf基本是固定的。 ## 二、功能接口 目前支持MySQL5,MySQL8和Mariadb的实例创建,启动,关闭。**后续可以支持GreatSQL,Percona MySQL,tidb等其它类似MySQL的数据库**。 ### 2.1 主要功能 1. 一键初始化MySQL的数据目录,部署启服。 2. 启动,关闭特定实例。 3. 一键创建主动复制通道。 4. 通过MariaDB提供的REST API下载MariaDB。 #### 启动实例 启动实例考虑需要在后台运行,mysqld使用其自身支持的`--daemonize, -D`参数,设置为守护进程。 不能使用`nohup`和`&`组成,**语义不同**,虽然最终效果都是后台运行。 * nohup是让进程忽略SIGHUP信号。shell终端关闭时,会向进程组发送SIGHUP信号,关闭进程。 * `&`是让nohup指令后台运行,并不表示进程启动完成。 当python程序退出时,其启动的mysqld进程会变成孤儿进程,从而被1号进程收养。但是不会退出。 **但是mariadbd不支持daemonize参数,mariadbd提供了额外的mariadbd-safe脚本用于启动mariadbd,也不支持。还是会卡住,所以mariadbd还是使用nohup加`&`的方式启动**。 ### 2.2 自动下载MariaDB 如果MariaDB未安装,将无法创建实例。Mariadb官方网站提供了REST API。。 可以直接使用rest-api下载MariaDB二进制包。所以可以很方便的实现MariaDB的下载,解压,安装。 下载,解压,安装目录可以默认设置为用户的home目录,因为普通用户没有`/usr/local`目录权限。 **mysql官方网站并没有提供类似的Download REST API服务**,所以mysql暂时只能自己下载。 ### 2.3 创建主从复制 支持创建两个实例之间的主从复制通道。 疑问:mysqlsh是否支持?如果直接通过mysqlsh是不是更快? ### 2.4 支持创建MGR集群 暂未实现 要求用户必须下载mysqlsh,然后使用指令参数的方式调用mysqlsh接口,去支持MGR集群的快速创建,入组,离组。 ## 三、sqlc运行环境 目前只支持Linux环境。需要python ### 3.1 三方依赖 #### Python依赖 ``` pip install pymysql ``` #### **MySQL5依赖** MySQL 5 需要 `libaio` 库,如果缺少会导致初始化数据目录失败。 - **Ubuntu/Debian 安装:** ```bash sudo apt-get install libaio1 ``` - **CentOS/RHEL 安装:** ```bash sudo yum install libaio ``` 如果没有安装 `libaio`,测试会自动跳过并提示缺少依赖库。 ## todo list 1. 是否要兼容windows?工作量较大,且Windows上用MySQL的情况较少,先不考虑。 2. 提供远程访问的接口API,允许认证用户远程调用,自行自动化脚本操作。 3. mysqlsh也支持指令参数的方式调用,也可以封装到py文件中。也就是可以提供搭建MGR集群。 * 参考文档使用: