9.1 KiB
MySQL / MariaDB
Настройки
Список настроечных параметров и их значения
mysqld --verbose --help
Управление пользователями
Список пользователей
mysql> SELECT User,Host FROM mysql.user;
Список прав у пользователя root@localhost
mysql> SHOW GRANTS FOR root@localhost;
Создание нового пользователя
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'secret';
Добавим выбранные привилегии для всех таблиц БД dbname пользователю 'user'@'localhost'
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX
ON dbname.* TO 'user'@'localhost';
Добавим все привилегии для всех таблиц БД dbname пользователю 'user'@'localhost'
mysql> GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost';
Удаление прав пользователя 'user'@'localhost' для БД dbname:
mysql> REVOKE ALL ON dbname.* FROM 'user'@'localhost';
Удаление пользователя:
mysql> DROP USER user@localhost;
Перезагрузка привилегий
mysql> FLUSH PRIVILEGES;
Новый пароль для root
$ mysqladmin -uroot password 'secret'
Управление базой данных
Создание базы данных
mysql> CREATE DATABASE dbname COLLATE utf8_general_ci;
Создание базы данных из консоли
$ mysqladmin -u root -p create dbname
Удаления базы данных из консоли
mysqladmin -u root -p drop dbname
Другие sql-команды
Замена в поле определенной подстроки на другую
mysql> UPDATE table SET field=replace(field, 'original string', 'new string');
Вставка данных из одной таблицы в другую
mysql> INSERT INTO table1 (fld1, fld2) SELECT table2.fld1, table2.fld2 FROM table2 WHERE table2.fld2 > 7;
Просмотр структуры таблицы blog_posts
mysql> DESCRIBE blog_posts;
Просмотр sql-запроса на создание структуры таблицы blog_posts
mysql> SHOW CREATE TABLE blog_posts;
Мониторинг и статистика
Список всех баз данных
mysql> SHOW DATABASES;
Список всех таблиц в выбранной базе данных
mysql> SHOW TABLES;
Статистика по работе сервера
mysql> SHOW GLOBAL STATUS;
- Install Innotop to Monitor MySQL Server Performance
- Install Mtop (MySQL Database Server Monitoring)
- Check The Number Of MySQL Open Database Connections on Linux Or Unix-like Server
Оптимизация баз данных
При помощи команды mysqlcheck можно выполнять проверку, оптимизацию и исправление ошибок.
Поверка на ошибки БД dbname
$ mysqlcheck -p dbname
Восстановление и оптимизация всех БД
$ mysqlcheck -Aor -p
Описание аргументов
-p
– использовать пароль-A
– проверять все базы данных-r
– ремонтировать БД-o
– оптимизировать БД
Скрипт простой оптимизации БД, можно добавить в крон для выполнение раз в сутки
mysqlcheck --repair --analyze --optimize --all-databases --auto-repair -u root -p SECRET
Изменение строки приглашения (prompt)
В ~/.my.cnf
добавим
[client]
default-character-set = 'utf8'
pager = 'less -n -i -S'
prompt = '\u@\h [\d] > '
user = 'root'
password = 'secret'
Делают эти настройки следующие
- устанавливаем кодировку по-умолчанию в utf8
- используем less для вывода результатов запроса
- меняем строку приглашения, \u - пользователь, \h - хост, \d - база данных
- указываем логин и пароль для mysql-консоли, удобно при разработке на локальном сервере
Дамп (резервная копия)
Дамп базы данных
$ mysqldump -uroot -p dbname > dump.sql
Дамп выбранных баз
$ mysqldump -uroot -p -B dbname1 dbname2 > dump.sql
Дамп всех баз
$ mysqldump -uroot -p -A > dump.sql
Дамп только структуры, без данных
$ mysqldump -uroot -p --no-data dbname > database.sql
Другие опции
--add-drop-tabl
e - добавляет команду DROP TABLE перед каждой командой CREATE TABLE--add-locks
- добавляет команду LOCK TABLES перед выполнением и UNLOCK TABLE после выполнения каждого дампа таблицы--no-create-db, -n
- не добавлять команду CREATE DATABASE, которая добавляется при использовании параметров --databases и --all-databases--no-data, -d
- дампить только структуру таблиц--no-create-info, -t
- не создавать команду CREATE TABLE--skip-comments
- не выводить комментарии.--compact
- использовать компактный формат--create-options
- добавляет дополнительную информацию о таблице в команду CREATE TABLE: тип, значение AUTO_INCREMENT и т.д. Не нужные опции можно вырезать с помощью sed.--extended-insert, -e
- применение команды INSERT с многострочным синтаксисом (повышает компактность и быстродействие операторов ввода)--tables
- дампить только таблицы из списка, следующего за этим параметром, разделитель - пробел
Применение дампа
$ mysql -uroot -p dbname1 < dump.sql
Изменение кодировка для текстового поля
Список полей для таблицы table с информацией о поле, в том числе и кодировка поля
SHOW FULL COLUMNS FROM table;
Меняем charset для поля field
ALTER TABLE table MODIFY field VARCHAR(255) CHARACTER SET utf8;
Изменение кодировка при импорте с дампа
Определение кодировки файла
file --mime-encoding dump.sql
Конвертирование из кодировки latin1 в utf8
mysqldump --add-drop-table -uroot -p dbname | replace CHARSET=latin1 CHARSET=utf8 | iconv -f latin1 -t utf8 | mysql -uroot -p dbname
Восстановление root-пароля
$ service mysqld stop
$ mysqld_safe --skip-grant-tables &
$ mysql
mysql> UPDATE mysql.user SET Password=PASSWORD('secret') WHERE User='root';
mysql> FLUSH PRIVILEGES;
$ service mysqld restart
MySQL + Python
Иногда при компиляция MySQL-python может выскочить такая ошибка configure: error: mysql_config executable not found, это значит, что не установлен пакет libmysqlclient15-dev. Под Ubuntu устанавливается так
sudo apt-get install libmysqlclient15-dev
Перенос директории с данным (data directory)
Останавливаем MySQL
service mysqld stop
Копируем существующею директорию с данными в новое место
mkdir -p /path/new/dir
sudo chown -R mysql:mysql /path/new/dir
sudo cp -R -p /var/lib/mysql /path/new/dir
Укажем в my.cnf путь к новой директории, секция mysqld
# sudo vim /etc/mysql/my.cnf
[mysqld]
datadir=/path/new/dir/mysql
Запускаем MySQL
service mysqld start
Как конвертировать MyISAM в InnoDB
Просмотр всех таблиц и их типов
SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database' and ENGINE = 'myISAM'
Следущая комманда конвертирует таблицу в InnoDB
ALTER TABLE table1 ENGINE=InnoDB;