RU EN

Отличия MyISAM InnoDB

 
  • В InnoDB при записи блокируется строка, в MyISAM - вся таблица. Поэтому там, где планируется большое кол-во запросов на запись, выгоднее использовать InnoDB.

  • В InnoDB поддерживаются транзакции.

  • В InnoDB поддерживаются внешние ключи.

  • В MyISAM поддерживается сжатие таблиц.

  • Данные InnoDB хранятся в одном файле, а в MyISAM в на каждую таблицу свой. Поэтому периодически MyISAM данные нужно оптимизировать.

  • В InnoDB при восстановлении от сбоя используется лог транзакций. В MyISAM для восстановления нужно сканировать таблицы. При увеличении объёма MyISAM данных увеличивается и время восстановления. В InnoDB восстановление занимает одно и то же время.

  • В InnoDB есть необходимость периодически сбрасывать данные в лог.

  • В MyISAM есть встроенный полнотекстовой поиск.

  • В InnoDB возможны взаимоблокировки процессов (deadlock).
Комментариев: 0
07.12.2012 07:16


Проблемы с кодировкой в MySQL

 

Узнаём в какой кодировке хранятся данные:

mysql -u root -e 'show create database `dbname`'
+------------------------------------------------------------------+
| Create Database                                                  |
+------------------------------------------------------------------+
| CREATE DATABASE `itvault` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+------------------------------------------------------------------+

Делаем дамп:

mysqldump -u root --default-character-set=utf8 dbname > dump.sql

Узнаём в какой кодировке работает mysql-клиент на сервере назначения:

mysql -u root -e "show variables like '%char%'"
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | latin1                           |
| character_set_connection | latin1                           |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | latin1                           |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+

Заливаем дамп в правильной кодировке:

mysql -u root --default-character-set=latin1 dbname < dump.sql
Комментариев: 0
28.10.2012 16:55


Сброс root пароля в MySQL

 

Останавливаем MySQL

service mysql stop
# или так:
mysqladmin -uroot shutdown
# или можно так:
ps aux | grep mysql # эта команда выведет pid mysqld процесса
kill <pid>
# еще можно так:
kill `cat /var/run/mysql/mysql.pid` # путь к pid-файлу процесса может быть другой!
# по-умолчанию pid-файл создаётся в <basedir>/data

Запускаем MySQL и меняем пароль

mysqld_safe --skip-grant-tables --user=root &
-- далее запрос на смену пароля
UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='root';
-- Выходим из MySQL
exit

Перезагружаем MySQL

service mysql restart

Иногда, при обновлении, mysql пользователю root@localhost по-умолчанию выставляется тип авторизации auth_socket и после этого невозможно залогиниться. Чтобы исправить, надо загрузить mysql способом описанным выше и выполнить запрос:

UPDATE mysql.user
SET plugin = 'mysql_native_password'
WHERE User = 'root';

 

Комментариев: 0
12.12.2011 09:51


Создание пользователя в MySQL

 

Создание локального пользователя с правами только на определённую базу данных:

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT USAGE ON `table`.* TO 'user'@'localhost' IDENTIFIED BY 'password' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
GRANT ALL PRIVILEGES ON `table`.* TO 'user'@'localhost';
Комментариев: 0
15.08.2011 12:44