marv-mysql-driver
Version:
A mysql marv driver implementation
93 lines (70 loc) • 3.5 kB
Markdown
[](https://www.npmjs.com/package/marv-mysql-driver)
[](https://www.npmjs.com/package/marv-mysql-driver)
[](https://github.com/guidesmiths/marv-mysql-driver/actions?query=workflow%3A%22Node.js+CI%22)
[](https://codeclimate.com/github/guidesmiths/marv-mysql-driver/maintainability)
[](https://codeclimate.com/github/guidesmiths/marv-mysql-driver/test_coverage)
# marv-mysql-driver
A mysql driver for [marv](https://www.npmjs.com/package/marv)
## Prerequisites
One of:
- [mysql](https://www.npmjs.com/package/mysql)
- [mysql2](https://www.npmjs.com/package/mysql2)
marv-mysql-driver will automatically use whichever library you have installed **but does not package either of these libraries**. Please read the [troubleshooting](#troubleshooting) notes if using [mysql](https://www.npmjs.com/package/mysql) with MySQL 8.0 (or above).
## Installation
```
npm i marv marv-mysql-driver
```
## Usage
```
migrations/
|- 001.create-table.sql
|- 002.create-another-table.sql
```
### Promises
```js
const marv = require('marv/api/promise'); // <-- Promise API
const driver = require('marv-mysql-driver');
const directory = path.resolve('migrations');
const connection = {
// Properties are passed straight mysql.createConnection
host: 'mysql.example.com',
multipleStatements: true // See https://www.npmjs.com/package/mysql#multiple-statement-queries
};
const migrations = await marv.scan(directory);
await marv.migrate(migrations, driver({ connection });
// Profit :)
```
### Callbacks
```js
const marv = require("marv/api/callback"); // <-- Callback API
const driver = require("marv-mysql-driver");
const directory = path.resolve("migrations");
const connection = {
// Properties are passed straight [mysql|mysql2].createConnection
host: "mysql.example.com",
multipleStatements: true, // See https://www.npmjs.com/package/mysql#multiple-statement-queries
};
marv.scan(directory, (err, migrations) => {
if (err) throw err;
// Connection properties are passed straight [mysql|mysql2].createConnection
marv.migrate(migrations, driver({ connection }), (err) => {
if (err) throw err;
// Profit :)
});
});
```
## Troubleshooting
```
Client does not support authentication protocol requested by server; consider upgrading MySQL client
```
MySQL v8 changed the [default authentication plugin](https://dev.mysql.com/doc/refman/8.0/en/pluggable-authentication.html) to `caching_sha2_password`, which, at time of writing is not supported by [mysql](https://github.com/mysqljs/mysql/issues/2001). Therefore MySQL v8 users either need to [change](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin) the default authentication plugin back to `mysql_native_password` or install [mysql2](https://www.npmjs.com/package/mysql2).
MySQL v5 users can use either [mysql](https://www.npmjs.com/package/mysql) or [mysql2](https://www.npmjs.com/package/mysql2).
## Testing
```bash
npm install
npm run mysql5
npm run mysql8
npm run mysql8-native-password
sleep 30
npm test
```