# 使用MySQL

Bucky框架下，通过Drivers的方式，提供了对MySQL、MongoDB、Redis等的支持。本节介绍MySQL的配置与使用。

## 创建一个mysql测试目录：
```
 mkdir mysql
 cd mysql
```

## 使用bucky命令行初始化，创建mysql demo：
![](images/mysql-init.jpg)

## MySQL的配置

在一个Bucky的XARPackage里使用MySQL需要两个地方做配置：
1. 根目录下`knownledges.json`下配置MySQL数据库实例及其schema配置。
2. 在XARPackage的config.json里配置对mysql的knowledges依赖。

这两个文件的位置如图：

![](images/mysql-depend.jpg)

## MySQL数据库实例及其schema的配置

在knowlegeds.json的global.mysql.instances以及global.mysql.shemas两个节点下分别配置：

![](images/mysql-knowledge.jpg)

注意，global.mysql.schemas里面，object.onCreate也支持文件相对路径的方式把sql语句拆分出去：
```
{
	...
	"global.mysql.schemas": {
        "type": 0,
        "object": {
            "user_exp_schema": {
                "onCreate": "db/user_exp_oncreate.sql"
            }
        }
    },
}
```

## XARPackage里添加对MySQL Knowledge的依赖

在XARPackage的config.json里配置：

![](images/mysql-config-json.jpg)

## 通过MySQL Driver操作数据库

参考packages/userexp/下的两个模块代码：

1. packages/userexp/userexp.js

2. packages/userexp/datablock.js

MySQL Driver的查询接口，请参考mysqljs库的官方文档：

* [https://github.com/mysqljs/mysql](https://github.com/mysqljs/mysql)

# MySQL数据库维护

## 如何修改表结构

需要说明的是global.mysql.schemas中配置的onCreate，只会在首次get mysql instance时执行，且只执行一次。所以要想修改表结构有下面两种做法。

1. 直接修改instance id和onCreate。适用于开发阶段。
2. 添加一个新的instance，修改onCreate，做数据迁移。适用于线上环境。

## 命令行工具

bucky工具还支持交互式mysql，类似mysql client。

0. 在项目执行`bucky deploy`和`bucky k -reset`之后：
1. 初始化mysql交互式环境，一个项目只需要初始化一次：bucky mysql -init 
2. 进入mysql交互式环境：bucky mysql 
3. 在交互式环境里有两个命令：
   - `show instances` 显示有哪些mysql数据库
   - `use instanceid` 切换到某个具体的instanceid的数据库
   - 然后执行查询语句。
4. 例子：
    - 切换到test数据库：`use test`;
    - 查询address表：`select * from address`;

## 使用phpmyadmin

phpmyadmin是知名度很高的图形化mysql client。支持mysql所有操作。

url:[https://phpmyadmin.buckycloud.com/](https://phpmyadmin.buckycloud.com/)

使用方法：
1. 输入buckycloud.com的用户名和密码，点击获取AppID
2. 选择要操作的AppID，点击获取MySQL Instance
3. 选择要操作的Instance，点击最后的按钮PHPMyAdmin

就会转到熟悉的phpmyadmin管理页面

--全文完--


