# 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集群。
* 参考文档使用: