Skip to main content

MariaDB

Install

sudo apt install mariadb-server -y

sudo mariadb --version

# Check status
sudo systemctl status mariadb

Connect

# -p can not allow space
mariadb -h IP -u USERNAME -pPASSW0RD DATABASE_NAME

# Example
mariadb -u root -p123123

Maintain

# Restart
# Ubuntu 22.04
sudo systemctl restart mariadb

SQL

-- '%' login everywhere
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'passw0rd';

-- Change user password
ALTER USER 'user1'@'localhost' IDENTIFIED BY 'Passw0rd';

DROP USER 'user1'@'localhost';

-- Reload the in-memory copy of privileges from the privilege tables
FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON * . * TO 'user1'@'localhost';
GRANT ALL PRIVILEGES ON db1.* TO 'user1'@'localhost';

SHOW DATABASES;

SHOW TABLES;

-- List users.
SELECT User FROM mysql.user;

-- Show grants
SHOW GRANTS FOR 'user1'@'localhost';

SHOW character set;

SHOW variables like "character_set%";

-- Remove grants
REVOKE ALL ON db1.* FROM 'user1'@'localhost'
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user1'@'localhost';

CREATE DATABASE db1;

DROP DATABASE db;

# Check port
SHOW GLOBAL VARIABLES LIKE 'PORT';

Cluster

Use Master/Slave Replication if Cluster cause performance issues.

- vmubu2204lab1: db 1
192.168.100.2
dev 123123

- vmubu2204lab2: db 2
192.168.100.3
dev 123123

- vmubu2204lab3: load balance
192.168.100.4
dev 123123

Ubuntu 22.04

sudo apt-get install mariadb-server -y

sudo mysql_secure_installation

mariadb -h localhost -u root -p123123
# system service tools (SST)
GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'pa55word';

GRANT ALL PRIVILEGES on *.* to sst_user@'%';

FLUSH PRIVILEGES;

sudo vim /etc/mysql/my.cnf

sudo vim /etc/mysql/mariadb.conf.d/60-galera.cnf

[galera]
wsrep_on = ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.100.2,192.168.100.3"
wsrep_slave_threads=4 # Default 1, 4, 8
binlog_format=ROW
default_storage_engine=InnoDB
bind-address=0.0.0.0
wsrep_node_name=node1
wsrep_node_address="192.168.100.2"
wsrep_sst_method=rsync
wsrep_sst_auth=sst_user:pa55word
log_error = /var/log/mysql/error.log
wsrep_node_name=node2
wsrep_node_address="192.168.100.3"
sudo systemctl stop mariadb

sudo galera_new_cluster

sudo systemctl restart mariadb

sudo cat /var/lib/mysql/grastate.dat

mariadb -u root -p123123

show status like 'wsrep_cluster_size';
# node 1
create database node1;

# node 1, 2
show databases;

# node 2
create database node2;
sudo apt-get install haproxy -y

sudo vim /etc/haproxy/haproxy.cfg

Insert in top:

listen galera
bind 192.168.100.4:3306
balance roundrobin # load balancer policy
mode tcp # (tcp is layer 7 , http is layer 4)
option tcpka # enable keepalive to maintain tcp connection
option mysql-check user haproxy # enable database server check
server node1 192.168.100.2:3306 check weight 1
server node2 192.168.100.3:3306 check weight 1

listen stats
bind 0.0.0.0:9000
mode http
stats enable # Enable
stats uri /stats # Url path
stats realm HAProxy\ Statistics
stats auth howtoforge:howtoforge
stats admin if TRUE
stats refresh 30s # Refresh page each 30 sec
sudo systemctl restart haproxy
# Node 1
CREATE USER 'haproxy'@'192.168.100.4';

FLUSH PRIVILEGES;

# Node 1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# Node 1
mariadb -u root -p123123 -e "SET GLOBAL server_id=102"

# Node 2
mariadb -u root -p123123 -e "SET GLOBAL server_id=103"

# Node 3
sudo apt install mariadb-client
mariadb -h 192.168.100.4 -u root -p123123 -e "show variables like 'server_id'"

Scenario

Current charset is UTF-8. If password has been set using other charset will make database username or password is not correct.

Remote Access

/etc/mysql/mariadb.conf.d/50-server.cnf

bind-address = 0.0.0.0