
This add-on is operated by Stackhero
MariaDB on dedicated instances, up-to-date versions and super attractive prices.
Stackhero for MariaDB
Last updated June 11, 2022
Table of Contents
Stackhero for MariaDB provides a managed MariaDB instance running on a fully dedicated instance.
With your Stackhero for MariaDB add-on you will get:
- A private instance (dedicated VM) for high performances and security
- A dedicated public IP (v4)
- TLS encryption (aka SSL)
- A full access to PhpMyAdmin
- An automatic backup every 24 hours
- One click to update to new MariaDB versions
All MariaDB/MySQL clients can connect to Stackhero for MariaDB and there is a MariaDB/MySQL client library for almost every language out there, including Ruby, Node.js, Java, Python, Clojure and Erlang.
Provisioning the add-on
Stackhero for MariaDB can be attached to a Heroku application via the CLI:
A list of all plans available can be found here.
$ heroku addons:create ah-mariadb-stackhero --app <your app name>
-----> Adding ah-mariadb-stackhero to sharp-mountain-4005... done
After you provision Stackhero for MariaDB, the STACKHERO_MARIADB_HOST
and STACKHERO_MARIADB_ROOT_PASSWORD
config variables are available in your app’s configuration. They contain the URLs to your MariaDB instance as its root password.
You can see the content of those variables via the heroku config:get
command:
$ heroku config:get STACKHERO_MARIADB_HOST
After you install Stackhero for MariaDB, your application should be configured to fully integrate with the add-on.
Local setup
After you provision the add-on, it’s necessary to locally replicate its config variables so your development environment can operate against the service.
Use the Heroku Local command-line tool to configure, run and manage process types specified in your app’s Procfile. Heroku Local reads configuration variables from a .env
file. To view all of your app’s config variables, type heroku config
. Use the following command for each value that you want to add to your .env
file:
$ heroku config:get STACKHERO_MARIADB_HOST -s >> .env
Credentials and other sensitive configuration values should not be committed to source-control. In Git, exclude the .env
file with: echo .env >> .gitignore
.
For more information, see the Heroku Local article.
Connect to MariaDB from your favorite language
You can use almost any client library available for your language that is able to connect to a MariaDB or a MySQL server.
We recommend to create a dedicated user (see sections below). If you don’t want to, you can connect to MariaDB using the “root” user and the following environment variables:
- STACKHERO_MARIADB_HOST
- STACKHERO_MARIADB_ROOT_PASSWORD
If you have created a dedicated user, you can use these environment variables:
- STACKHERO_MARIADB_HOST
- STACKHERO_MARIADB_USER
- STACKHERO_MARIADB_PASSWORD
Connect to MariaDB from PHP
In these examples, we will use the “MySQL Improved Extension” known as MySQLi
.
Connect PHP to MariaDB with object-oriented style
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'mysql'; // You shouldn't use the "mysql" database. This is just for the example. The recommended way is to create a dedicated database (and user) in PhpMyAdmin and use it then here.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, NULL, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die("Connect Error: " . $mysqli->connect_error());
}
echo 'Success... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Connect PHP to MariaDB with procedural style
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'mysql'; // You shouldn't use the "mysql" database. This is just for the example. The recommended way is to create a dedicated database (and user) in PhpMyAdmin and use it then here.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, NULL, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die("Connect Error: " . mysqli_connect_error($mysqli));
}
echo 'Success... ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
Connect PHP to MariaDB with using credentials from environment variables
We recommend to not keep your credentials in your source code but use environment variables in place.
Here is how to retrieve these credentials:
$hostname = parse_url(getenv('STACKHERO_MARIADB_HOST'));
$user = parse_url(getenv('STACKHERO_MARIADB_USER'));
$password = parse_url(getenv('STACKHERO_MARIADB_PASSWORD'));
$database = parse_url(getenv('STACKHERO_MARIADB_USER'));
How to connect from Node.js to MariaDB
In this example we will use mysql2
package with promises support.
To install it simply run this command: npm install --save mysql2
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: process.env.STACKHERO_MARIADB_HOST,
user: 'root',
password: process.env.STACKHERO_MARIADB_ROOT_PASSWORD,
});
// Create database stackherotest if not exists yet
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Create table users if not exists yet
await db.query('CREATE TABLE IF NOT EXISTS `stackherotest`.`users` '
+ '('
+ '`userId` INT UNSIGNED NOT NULL,'
+ '`name` VARCHAR(128) NOT NULL,'
+ '`address` TEXT NOT NULL,'
+ '`email` VARCHAR(265) NOT NULL'
+ ') '
+ 'ENGINE = InnoDB;');
// Insert a fake user
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Generate a fake userId
'User name', // column 'name'
'User address', // column 'address'
'user@email.com' // column 'email'
]
]
);
// Count number of rows in table users
const [ usersCount ] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`There is now ${usersCount[0].cpt} in table "users"`);
// Close the connection to MariaDB
await db.end();
})().catch(error => {
console.error('');
console.error('🐞 An error occurred!');
console.error(error);
process.exit(1);
});
Connect to Stackhero dashboard
Stackhero dashboard allows you to see your instance usage, restart it, and apply updates. It also gives you the ability to access the PhpMyAdmin UI to consult your MariaDB data directly in a graphical way.
You can access the dashboard via the CLI:
$ heroku addons:open ah-mariadb-stackhero
Opening ah-mariadb-stackhero for sharp-mountain-4005
or by visiting the Heroku Dashboard and selecting the application in question. Select Stackhero for MariaDB from the Add-ons menu.
Connect to PhpMyAdmin
PhpMyAdmin is a web UI that gives you access to your MariaDB in a graphical way.
To connect to it, simply open your browser and connect to the hostname of your service (STACKHERO_MARIADB_HOST
), like https://XXXXXX.stackhero-network.com
.
Then log in with the root user or with any other user you have created.
Create a user on MariaDB
A best practice is to create a user for your application other than the default “root”.
The easiest way to do that is to use PhpMyAdmin.
In PhpMyAdmin, click on
User accounts
on top.Click on
Add user account
.Fill the user creation form:
- Define an account name (generally your application name)
- Click on “Generate password” to get a secured password (copy it to your clipboard)
- Check the “Create database with same name and grant all privileges”
Once validated, the user will be created as its database which will get the same name as the username.
Add your user to environment variables
You can now define your environment variables as follow:
$ heroku config:set STACKHERO_MARIADB_USER=<yourUserName>
$ heroku config:set STACKHERO_MARIADB_PASSWORD=<yourUserPassword>
And if you need to access them locally, for development purporse for example, you can save them to you .env
file:
$ heroku config:get STACKHERO_MARIADB_USER -s >> .env
$ heroku config:get STACKHERO_MARIADB_PASSWORD -s >> .env
Upgrading your plan
You cannot downgrade an existing add-on.
Application owners should carefully manage the migration timing to ensure proper application function during the migration process.
Use the heroku addons:upgrade
command to migrate to a new plan.
$ heroku addons:upgrade ah-mariadb-stackhero:newplan
-----> Upgrading ah-mariadb-stackhero:newplan to sharp-mountain-4005... done
Your plan has been updated to: ah-mariadb-stackhero:newplan
Removing the add-on
You can remove Stackhero for MariaDB via the CLI:
This will destroy all associated data and cannot be undone!
$ heroku addons:destroy ah-mariadb-stackhero
-----> Removing ah-mariadb-stackhero from sharp-mountain-4005... done
Support
Stackhero for MariaDB support and runtime issues should be submitted via one of the Heroku Support channels. We recommend adding support@stackhero.io in copy for urgent issues.