Базы, таблицы, пользователи

Создать базу и пользователя

CREATE DATABASE <DB_NAME> GRANT ALL PRIVILEGES ON <DB_NAME>.* TO 'my_user'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;

Просмотр баз

SHOW DATABASES;

Использовать выбранную базу

USE <DB_NAME>

Просмотр таблиц

SHOW TABLES;

Просмотр колонок выбранной таблицы

SHOW COLUMNS FROM <TABLE_NAME>;

Работа с бекапами

Делаем бекап

mysqldump -u USER -pPASSWORD DATABASE > /path/TO/file/dump.sql

Создаём структуру базы без данных

mysqldump --no-data - u USER -pPASSWORD DATABASE > /path/to/file/schema.sql

Если нужно сделать дамп только одной или нескольких таблиц

mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 > /path/TO/file/dump_table.sql

Создаём бекап и сразу его архивируем

mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/TO/outputfile.sql.gz

Создание бекапа с указанием его даты

mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz`

Заливаем бекап в базу данных

mysql -u USER -pPASSWORD DATABASE < /path/TO/dump.sql

Заливаем архив бекапа в базу

gunzip < /path/TO/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

или так

zcat /path/TO/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

Создаём новую базу данных

mysqladmin -u USER -pPASSWORD CREATE NEWDATABASE

Удобно использовать бекап с дополнительными опциями -Q -c -e, т.е.

mysqldump -Q -c -e -u USER -pPASSWORD DATABASE > /path/TO/file/dump.sql,

где:

-Q - оборачивает имена обратными кавычками

-c - делает полную вставку, включая имена колонок

-e - делает расширенную вставку. Итоговый файл получается меньше и делается он чуть быстрее

Для просмотра списка баз данных можно использовать команду:

mysqlshow -u USER -pPASSWORD

А так же можно посмотреть список таблиц базы:

mysqlshow -u USER -pPASSWORD DATABASE

Для таблиц InnoDB надо добавлять –single-transaction, это гарантирует целостность данных бекапа. Для таблиц MyISAN это не актуально, ибо они не поддерживают транзакционность.

Чистим разросшийся файл mysql ibdata1

В MySQL есть такой замечательный файл - ibdata1. Замечателен о не только тем, что растёт как дурак, но и тем, что хранит кучу данных сервера.

Начнём с того, что просто удалить его можно, но это приведёт к уничтожению данных таблиц. ibdata1 хранит данные таблиц (кроме схем - они хранятся в других файлах), индексы и прочую информацию. Альтернатива хранению в одном файле - хранить для каждой таблицы эту информацию в отдельном файле. Собственно это я и предлагаю сделать.

mysqldump –all-databases > alldb.sql используем, чтобы выгрузить все данные сервера

Удаляем все базы кроме служебных mysql.

Останавливаем mysql.

Добавим в my.cnf (во многих дистрибутивах этот файл лежит в /etc/mysql) в секцию [mysqld] строчку innodb_file_per_table

Удаляем /var/lib/mysql/ibdata1 и /var/lib/mysql/ib_logfile* файлы.

Поднимаем сервер mysql

Заливаем дамп в базу cat alldb.sql | mysql -uroot -p