Шпаргалка MySQL
Изучение настоящей шпаргалки не сделает вас мастером SQL, но позволит получить общее представление об этом языке программирования и возможностях, которые он предоставляет. Рассматриваемые в шпаргалке возможности являются общими для всех или большинства диалектов SQL.
Создание дампаmysqldump --all-databases > dump.sql
- дамп всех базmysqldump --databases db1 db2 db3 > dump.sql
- дамп нескольких указанных бдmysqldump -u USER -pPASSWORD DATABASENAME > dump.sql
- дампmysqldump -u USER -pPASSWORD DATABASENAME | gzip > /path/to/outputfile.sql.gz
- дамп с упаковкой в gzipmysqldump -u USER -pPASSWORD DATABASENAME | gzip > 'date+/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz'
- дамп с упаковкой в gzip и датой созданияmysqldump --no-data - u USER -pPASSWORD DATABASENAME > /path/to/file/schema.sql
- копируем структуру БД без данныхmysqldump -u USER -pPASSWORD DATABASENAME TABLE1 TABLE2 TABLE3 > /path/to/file/dump_table.sql
- если нужно сделать дамп только одной или нескольких таблиц
Пример бекапа в кроне:
0 0 * * * /usr/bin/mysqldump -u root -pPASSWORD DBNAME | gzip > /home/user/backup_mysql/DBNAME_`date "+\%d-\%m-\%Y_\%H:\%M:\%S"`.sql
Восстановление из дампаmysql -u USER -pPASSWORD DATABASENAME < /path/to/dump.sql
- восстановление БД из дампаgunzip < /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASENAME
- восстановление БД из дампа в архиве .gzmysql -u USER -pPASSWORD < /path/to/dump.sql
- восстановление нескольких БД из дампа
Восстановление из дампа в консоли MySQL
create database mydb;
use mydb;
source /path/to/db_backup.dump;
Консоль MySQL CLImysql -u root -p
- залогиниться в консоль mysqlshow databases;
- показать все БДuse [database];
- выбрать БДshow tables;
- показать таблицы БДshow index from [table];
- показать все индексы таблицыdescribe [table];
- структура таблицыcreate database mydb;
- создать БД mydbshow status;
show processlist;
CREATE TABLE [table] ([column] VARCHAR(120), [another-column] DATETIME);
- создать таблицуAdding a column: ALTER TABLE [table] ADD COLUMN [column] VARCHAR(120);
- добавить столбец в таблицуALTER TABLE [table] ADD COLUMN [column] int NOT NULL AUTO_INCREMENT PRIMARY KEY;
- добавить столбец в таблицу с уникальным автоинкрементным IDINSERT INTO [table] ([column], [column]) VALUES ('[value]', '[value]');
- вставить значение в столбец таблицыSELECT * FROM [table];
- вывести значение из таблицыSELECT * FROM [table] ORDER BY ID DESC LIMIT 10
- вывести 10 последних значений из таблицыEXPLAIN SELECT * FROM [table];
SELECT [column], [another-column] FROM [table];
- вывести несколько столбцов из таблицыSELECT COUNT([column]) FROM [table]
; - посчитать записиSELECT *, (SELECT COUNT([column]) FROM [table]) AS count FROM [table] GROUP BY [column];
- Посчитать и выбрать сгруппированные записиSELECT * FROM [table] WHERE [column] = [value]; (Selectors: <, >, !=; combine multiple selectors with AND, OR)
- выбрать определенные записиSELECT * FROM [table] WHERE [column] LIKE '%[value]%';
- Выбрать записи с определенным значениемSELECT * FROM [table] WHERE [column] LIKE '[value]%';
- Выбрать записи с начинающиеся с определенного значенияSELECT * FROM [table] WHERE [column] LIKE '[val_ue]';
- Выбрать записи начинающиеся с val и заканчивающиеся на ueSELECT * FROM [table] WHERE [column] BETWEEN [value1] and [value2]
; - Выбрать записи между значениямиSELECT * FROM [table] WHERE [column] ORDER BY [column] ASC LIMIT [value]; (Order: DESC, ASC)
- Выбрать с сортировкой по столбцу по возрастанию или убываниюUPDATE [table] SET [column] = '[updated-value]' WHERE [column] = [value];
- Обновление записейDELETE FROM [table] WHERE [column] = [value];
- Удаление заспиейDELETE FROM [table];
- Удалить все записи из таблицы, не дропая талицу, при этом каунтер сбрасываетсяtruncate table [table];
- Удалить все записи из таблицыALTER TABLE [table] DROP COLUMN [column];
- Удалить столбцы из таблицыDROP TABLE [table];
- Уничтожить таблицуDROP DATABASE [database];
- Уничтожить БД
Создание пользователя
CREATE USER 'USERNAME'@'localhost' IDENTIFIED BY 'USERPASSWORD';
GRANT ALL PRIVILEGES ON DBNAME . * TO 'USERNAME'@'localhost';
FLUSH PRIVILEGES;
SELECT User FROM mysql.user; - посмотреть всех пользователей
Общиеmysqlshow -u USER -pPASSWORD
- просмотр списка всех БДmysqladmin -u USER -pPASSWORD create NEWDATABASE
- создать БД NEWDATABASEmysqlshow -u USER -pPASSWORD DATABASENAME
- список всех таблиц БД DATABASENAME
Остальное полезноеdu -sh /var/lib/mysql | sort -gr
- узнать размер всех БД
Запрос выведет размер указанной БД:
SELECT table_schema AS "DATABASE_NAME", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Размер в Мб" FROM information_schema.TABLES GROUP BY table_schema
mytop - удобный диспетчер задач для MySQL, как htop, в нем можно убивать процессы в MySQL
В крон добавить 2 задания:
20 1 * * * /usr/bin/mysqlcheck -u root --auto-repair --check --all-databases >/dev/null 2>&1
40 1 * * * /usr/bin/mysqlcheck -u root --auto-repair --optimize --all-databases >/dev/null 2>&1
Для таблиц в InnoDB при создании дампа надо добавлять --single-transaction, это гарантирует целостность данных бекапа. Для таблиц MyISAM это не актуально, ибо они не поддерживают транзакционность.
В большинстве случаев лучше использовать движок InnoDB.
MyISAM | InnoDB | |
Полнотекстовый поиск | + | > 5.6.4 |
Транзакции | - | + |
Блокировка записи | Таблицы | Строки |
MyISAM
стоит использовать, если нужен полнотекстовый поиск до версии 5.6. Также этот движок подойдет, когда в таблице очень мало записей и большое количество чтений.
Во всех остальных случаях нужно использовать InnoDB.
Важно под каждую базу на боевом сервере создавать своего пользователя.
Кодировка базы может быть любой, если она UTF8.
В php лучше забыть про сильно устаревшее расширение mysql и по-возможности использовать pdo или mysqli.
Без особой нужды не стоит открывать MySQL наружу. Вместо этого можно сделать проброс портов:
ssh -fNL LOCAL_PORT:localhost:3306 REMOTE_USER@REMOTE_HOST
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.