- Установка mysql на Centos 7 подробно описана тут.
- .mysql_history – в этом файле в домашней директории хранится история команд, введенных в консоли mysql.
- Ошибка “ERROR 1114 (HY000) at line 1192: The table ‘<name>’ is full” может говорить не о достижения предела таблицы mysql или базы, а о том, что закончилось место на диске.
- Рабочий step-by-step по смене datadir в mysql. После выполнения проверяем что все работает в новой директории (напр. du -h /usr/data/mysql/ и накатываем дамп), потом удаляем старую.
sudo rm -rf /var/lib/mysql
DATE/TIME
Забрать из базы все записи внесенные (в time пишется время внесения) за последние 10 секунд.
SELECT * FROM message_log WHERE time > TIME_FORMAT(NOW()-10, '%H:%i:%s');
Оперируем часами.
SELECT NOW(), NOW() + INTERVAL 48 HOUR;
CLI
Переход в mysql CLI. Переход в представление базы wordpress, просмотр всех таблиц.
mysql -u root -p
mysql> use wordpress;
mysql> show tables;
Запросы в CLI.
mysql -ss -e "SHOW DATABASES;" --host=172.17.0.4 --user=wordpress --password=wordpress wordpress
Бекап базы в файл.
mysqldump -u root -p wordpress > backup.sql
mysqladmin
Утилита позволяет посмотреть разную статистику сервера – по запросам, по процессам, версию сервера и проч.
# mysqladmin -u root -p status
Enter password:
Uptime: 334 Threads: 2 Questions: 22 Slow queries: 0 Opens: 126 Flush tables: 2 Open tables: 102 Queries per second avg: 0.065
# mysqladmin -u root -p ping
Enter password:
mysqld is alive
# mysqladmin -u root -p version
Enter password:
mysqladmin Ver 8.0.13 for Linux on x86_64 (MySQL Community Server - GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 8.0.13
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 6 min 28 sec
Threads: 2 Questions: 26 Slow queries: 0 Opens: 126 Flush tables: 2 Open tables: 102 Queries per second avg: 0.067
MySQL Query analyzer
Полезная утилита как при разработке, так и при траблшутинге проблем с базой. Внизу информация по количеству затраченного времени (Latency Total), количеству запросов (Execution Counts) и величине выборки (Rows Total).
phpmyadmin
Пригодился когда из-за кривостей кодировки на сервере и в базе не видел шапки для таблицы и не мог внести туда новую запись на русском. Для того чтобы ее добавить пришлось загружать базу на виртуалку с phpmyadmin, менять шапку, заливать обратно.
СБРОС ПАРОЛЯ
Errors
Mysql может крашиться из-за недостатка оперативки. Смотрим через free -h. Простых выхода два – уменьшать количество возможных сессий (хуже), добавлять оперативку (лучше).
MySQL лучше PostgreSQL?
Не однозначно, что postgreSQL лучше Mysql, особенно в контексте производительности. Пример: Uber мигрировал с postgre на mysql.
MySQL: простая реплика данных с задержкой на базе rename MySQL
В mysql очень просто реализовать простую реплику с задержкой (например, раз в минуту/пять минут/etc по cron) в таблицу используя двойной rename.
The rename operation is done atomically, which means that no other session can access any of the tables while the rename is running.
CREATE TABLE tb_new LIKE tb; --- создаем временную таблицу на базе продакшн
--- заполняем данными созданную временную таблицу, например через Insert из array или вгружаем через файл
RENAME TABLE tb TO tb_old, tb_new TO tb; --- делаем двойной rename (из продакшн в old, из new в продакшн)
DROP TABLE tb_old; --- дропаем old
MySQL view
CREATE VIEW destination_bd.users AS SELECT username FROM source_bd.allowed_users;
Так же существуют материализированные view, но они поддерживаются не во всех базах.
Как уже говорилось ранее, представления не хранят данные. При запросе к представлениям данные извлекаются из таблиц. Но здесь существует исключение – это материализованные представления.
Синтаксис создания такого представления представлен ниже:
CREATE MATERIALIZED VIEW view_name AS SELECT columns FROM tables;
Данный тип представлений один раз выполняет запрос и хранит данные. Тем самым повышается быстродействие, но данные в представлении необходимо обновлять вручную. Для этого применяется следующая команда:
REFRESH MATERIALIZED VIEW view_name;
Материализованные представления не являются частью стандарта ANSI SQL и поддерживаются не всеми системами управления базами данных (СУБД). PostgreSQL и Oracle Database поддерживают данный тип представлений.
Создание и просмотр пользователей MySQL
Создаем пользователя с полными правами на базу cacti (первая строка) или на все базы (вторая) и обновляем привилегии:
mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'somepassword';
mysql> GRANT ALL ON *.* TO cactiuser@localhost IDENTIFIED BY 'somepassword';
mysql> flush privileges;
Смотрим пользователей для базы:
mysql> use wordpress;
mysql> SELECT User,Host FROM mysql.user;
+-----------+-----------+
| User | Host |
+-----------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
| wordpress | localhost |
+-----------+-----------+
4 rows in set (0.00 sec)