MySQL

Установка

sudo apt install mysql-server mysql-client libmysqlclient-dev

Для установки ruby-гема mysql достаточно установить пакет libmysqlclient-dev

Создание БД

mysql -u root -p
# создание нового пользователя
mysql> CREATE USER 'dbuser'@'%' IDENTIFIED BY 'dbpassword';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'dbuser'@'%';
# удаление пользователя
mysql> DROP USER 'demo'@'localhost';
# создание бд
mysql> CREATE DATABASE myapp DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON myapp.* TO 'dbuser'@'localhost' IDENTIFIED BY 'dbpassword';
mysql> exit

docker

image

docker volume create mysql-vol
docker run --name mysql \
    -e MYSQL_ROOT_PASSWORD=toor \
    -v mysql-vol:/var/lib/mysql \
    -p 3306:3306 \
    -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker exec -it mysql mysql -u root -p
# Enter password: toor

Backup & Restore

# создание резервной копии БД database_name
mysqldump database_name > database_name.sql
# создание резервной копии | mysql запущен в докере, дамп укладываем по абс пути
mysqldump -h 127.0.0.1 -u dbuser -pdbpassword moskotova > /home/zoid/tmp/moskotova.sql
# создание резервной копии | mysql запущен в докере, дамп архивируем
mysqldump -h 127.0.0.1 -u dbuser -pdbpassword moskotova | gzip > /home/zoid/tmp/moskotova.sql.gz
# создание резервной копии двух БД
mysqldump --databases database_one database_two > two_databases.sql
# создание резервной копии всех БД
mysqldump --all-databases > all_databases.sql
mysqldump --host=127.0.0.1 --user=root -p --all-databases > all_databases.sql

# создание пустой БД для восстановления
mysqladmin -u root -p create mytestdatabase
# восстановление БД
mysql database_name < database_name.sql
# восстановление одной БД из полного дампа
mysql --one-database database_name < all_databases.sql

# --- dump database
mysqldump -Q -c -e -h 127.0.0.1 -u dbuser -p moskotova | gzip > /home/zoid/tmp/moskotova.sql.gz
# --- copy dump to target db
# --- create empty database
mysqladmin -h 127.0.0.1 -udbuser -p -p create msk2
gunzip < /home/zoid/tmp/moskotova.sql.gz | mysql -h 127.0.0.1 -u dbuser -p msk2

MySQL CLI

How to Create MySQL Users Accounts and Grant Privileges

# отобразить БД
show databases;
# создать базу данных
create database msk;
# переключение на БД
use DATABASE_NAME;
# отобразить таблицы
show tables;
# описание полей таблицы
describe TABLE_NAME
show tables;
# --- создание пользователя
CREATE USER 'dbuser'@'%' IDENTIFIED BY 'dbpassword';
GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';
# -- удаление пользователя
DROP USER 'dbuser'@'localhost';

Troubleshooting

ActiveRecord StatementInvalid

ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xD0\xA0\xD0\x95\xD0\x9
A...' for column 'title' at row 1: INSERT INTO `parent_materials` (`title`, `text`, `created_at`, `updated_at`) VALUES ('РЕКОМЕНДАЦИИ РОДИТЕЛЯМ ПО ПОДГОТОВКЕ ДЕТЕЙ К ВЫП', '<p><span s

Видимо попытка записи кириллицы в таблицу, которая не поддерживает UTF-8,

Решение

# заходим в БД
mysql -u root -p
# переключаемся на нужную БД
use DATABASE_NAME;
# конвертируем таблицу в utf-8
ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8;