- Просто установить MySQL мало, нужно его еще донастроить. Самое главное - нужно не забыть про настройку max_allowed_packet (максимально разрешенный размер пакета). Например, если max_allowed_packet равен 1 мегабает, то в один прекрасный день вы не сможет записать данные размером более 1 мегабайта.
Появится ошибка вида: Packet for query is too large (27545659 > 1048576)
Теперь о том, как увеличить max_allowed_packet.
Для windows: В файле my.ini после строки[mysqld]пропишите следующее значение max_allowed_packet=512M Не забудьте перегрузить службу MySQL!
Для redhat: В файле /etc/my.cnf в блок [mysqld] пропишите следующий параметр max_allowed_packet = 512M Не забудьте перегрузить сервиc mysqld!service mysqld restart
-
При создании базы данных сразу же указывайте кодировку UTF-8, иначе в linux-системах, будет проблема с юникодными символами:
CREATE DATABASE your_database DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
- Проблема с кодировкой при подключении к базе данных. Допустим, у нас есть строка подключения с указанием кодировки UTF8:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8
Та же строка из-за экранирования символов в xml документе будет выглядеть так:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8
Если вы нечайно возьмете строку экранированную для xml с & ошибки не возникнет, но кодировка не установиться. Вместо кириллицы будут вопросительные знаки. В windows проблема c кодировкой может и не возникнет, но в unix и linux обязательно возникнет.
- Может возникнуть проблема с внешними ключами (foreign key). Очень важно следить какой движок у ваших таблиц. У связанных таблиц движок должен быть InnoDB. Если у одной таблицы движок InnoDB, а у другой MyISAM, внешний ключ будет создан, но вы не сможете вставить данные в столбец с Foreign Key. Как это исправить:
1) Нужно поменять движок у существующих таблиц. Для каждой таблицы выполните запрос:
ALTER TABLE название_таблицы ENGINE=InnoDB;
Чтобы вычислить таблицы с движок отличным от InnoDB выполните запрос:SELECT TABLE_NAME, ENGINE, CONCAT(CONCAT('ALTER TABLE ',TABLE_NAME),' ENGINE=InnoDB;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() AND ENGINE <> 'InnoDB'
Результатом будет: название таблицы, текущий движок таблицы и уже сформированный запрос на изменение движка на InnoDB. Вам остается выбрать запросы для тех таблиц, у которых вы хотите поменять движок. 2) Как можно проконтролировать создание таблиц именно с движком InnoDB. Во-первых, можно при создании таблицы явно указать движок InnoDB. Во-вторых, можно установить движок InnoDB по умолчанию. Для этого в файлах my.ini (для windows) и my.cnf (для linux) в секции [mysqld] сделайте следующую настройку:default-storage-engine=innodb
-
MySQL по умолчанию хранить таблицы (innodb) в одном файле. Причем размер этого файла никогда не уменьшается, т.е. если он достиг одного уровня, и вы удалили некоторые данные, MySQL не отдаст это свободное пространство. Это может быть критично при дефиците свободного места на диске.
Чтобы решить эту проблему нужно перед созданием базы данных добавить в конфигурационный файл опцию:
innodb_file_per_table=1
После установки этой опции каждая таблица будет храниться в отдельном файле. Это также может быть полезно при ограничении на размер файла в операционной системе. Для начала лучше потренироваться на тестовой базе данных, а потом пробовать на боевой, сняв перед этим резервную копию.