Tag Archives: MySQL

Смена пароля root mysql в linux

mysql

Для RedHat Linux (Fedora Core/Cent OS):

1. Останавливаем MySQL:

2. Запускаем mysql в safe-mode:

3. Запускаем клиента от root:

4. В приглашении mysql> выполняем запрос на смену пароля, вместо «NewPassWord» укажите новый пароль:

5. Перезагружаем привилегии

6. Выходим из MYSQL:

7. Перезагружаем MySQL:

На этом все — пароль root в MySQL изменен.

Смена пароля root в MySQL для Debian / Ubuntu:

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

2. Запускаем mysql в safe-mode:

3. Запускаем клиента от root:

4. В приглашении mysql> выполняем запрос на смену пароля, вместо «NewPassWord» укажите новый пароль:

5. Перезагружаем привилегии

6. Выходим из MYSQL:

7. Перезагружаем MySQL:

 

Дизайн интерьеров

Урок 8 Вьюверы и хранимые процедуры MySQL

Вьюверы MySQL

 

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

MySQL шпаргалки

Часто, когда разрабатываешь сайт, замечаешь, как на одни и те же грабли наступают разработчики при проектировании базы данных.

Сегодня я решил опубликовать свои шпаргалки, на самые часто встречающиеся ошибки при работе с MySQL.

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

Делаем бекап
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 это не актуально, ибо они не поддерживают транзакционность.

Подробнее

Общие факты

Полезно под каждую базу на боевом сервере создавать своего пользователя
Кодировка базы может быть любой, если она UTF8
В большинстве случаев лучше использовать движок InnoDB
В php лучше забыть про сильно устаревшее расширение mysql и по-возможности использовать pdo или mysqli
Новую копию MySQL всегда можно настроить и оптимизировать
Без особой нужды не стоит открывать MySQL наружу. Вместо этого можно сделать проброс портов
ssh -fNL LOCAL_PORT:localhost:3306 REMOTE_USER@REMOTE_HOST

Работа с данными

Числа

На 32-битных системах практически нет смысла ставить для типа INTEGER свойство UNSIGNED, так как такие большие числа в php не поддерживаются.
На 64-битных системах, php поддерживает большие числа, вплоть до MySQL BIGINT со знаком.
Связанные таблицы («Foreign keys») должны иметь полное сходство по структуре ключей. Т.е. если у нас на одной таблице для поля указано «INTEGER UNSIGNED DEFAULT 0 NOT NULL» то и на другой должно быть указано аналогично
Для хранения булевых значений, нужно использовать TINYINT(1)
А деньги лучше хранить в DECIMAL(10, 2), где первое число обозначает количество всех знаков, включая запятую, а второе — количество знаков после запятой. Итого, у нас получится что DECIMAL(10,2) может сохранить 9999999,99

Строки

В старых версиях (до 5.0.3) VARCHAR была ограничена 255 символами, но сейчас можно указывать до 65535 символов
Помните, что тип TEXT ограничен только 64 килобитами, поэтому что бы сохранять «Войну и Мир» пользуйтесь «LONGTEXT»
Самая правильная кодировка для вашей БД UTF8

Даты

Не забывайте, что

DATE, TIME, DATETIME — выводятся в виде строк, поэтому поиск и сравнение дат происходит через преобразование
TIMESTAMP — хранится в виде UNIX_TIMESTAMP, и можно указать автоматически обновлять колонку
Сравнивая типы данных DATETIME и TIMESTAMP, не забывайте делать преобразование типов, например:
SELECT * FROM table WHERE datetime = DATE(timestamp)

Перечисления

Для перечислений правильно использовать тип ENUM
Правильно пишется так: ENUM(‘мама’, ‘мыла’, ‘раму’)
Можно ставить значение по-умолчанию, как и для любой строки
В базе поле с перечислением хранится как число, поэтому скорость работы — потрясающе высокая
Количество перечислений ~ 65 тысяч
dev.mysql.com/doc/refman/4.1/en/storage-requirements.html
help.scibit.com/mascon/masconMySQL_Field_Types.html

Отладка

Если запросы тормозят, то можно включить лог для медленных запросов в /etc/mysql/my.cnf
А потом оптимизировать запросы через EXPLAIN
И наблюдать за запросами удобно через программу mytop

Пожалуйста, сообщите мне, если вы заметили неточность или есть желание поделиться советом или шпаргалкой.

Источник: https://habrahabr.ru/post/105954/

3D визуализация и интерьер

Предметная визуализация

Как узнать версию MySQL по FRM-файлу

Недавно я помогал клиенту разобраться почему минорное обновление MySQL требовало пересоздания некоторых таблиц. Утилита mysql_upgrade должна запускаться для любого обновления вне зависимости от разницы в версиях, но при минорном обновлении она обычно не требует пересоздания таблиц.

Оказалось, что некоторые из их таблиц имели метку устаревшей версии MySQL, что могло произойти по нескольким причинам. Наиболее вероятно, что прошлое обновление MySQL прошло неудачно или, что таблицы были скопированы с сервера с устаревшей версией MySQL.

Знаете ли вы, что в случаях подобных этому, есть быстрый, простой и безопасный способ проверить версию MySQL прописанную в таблице? Вы можете сделать это, распарсив FRM файл, в соответствии с описанием формата изложенным здесь.

В спецификации указано, что номер версии занимает 4 байта и начинается с офсета 0x33. Так как он записан в формате little endian, вы можете получить номер версии, прочитав первые 2 байта.

Это значит, что нам нужно воспользоваться hexdump, прочитать 2 байта, начиная с офсета 0x33 и преобразовать их в десятичный формат, чтобы получить версию MySQL:

Первый пример соответствует таблице созданной в MySQL версии 5.5.32, а второй – версии 5.1.73.

Значит ли это, что таблица 51_test была изначально создана в MySQL 5.1.73? Не обязательно, т.к. MySQL обновляет штамп версии в FRM-файле, каждый раз когда таблица перестраивается или изменяется ALTER’ом.

В документации указано, что детали хранения штампа версии могут быть изменены при переходе к новому текстовому формату хранения, но мне удалось получить версию вышеописанным способом для таблиц созданных в MySQL 5.7.7.

Источник: http://web-hl.ru/index.php/2015/08/30/how-to-get-mysql-version-from-frm-file/

Дизайн интерьеров

Решение проблемы «Too many open files» в MySQL

При росте количества таблиц и баз данных в MySQL рано или поздно Вы получите ошибку: Too many open files. Данная ошибка связана с не достаточным количеством выделенных дескрипторов файлов, на уровне операционной системы или MySQL.

Анализ дескрипторов Вы можете произвести командой:

В результате увидите нечто подобное:

Как видите, в данном случае выдалось 1024 открытых файлов. Это не большое количество и может Вас не устроить.

Вы можете увидеть, сколько выделено дескрипторов:

Так же, еще вариант просмотра:

Количество выделенных дескрипторов пользователю mySQL:

Для Debian и Linux Ubuntu:

Увеличиваем количество дескипторов

Заполняем таким содержимым:

Установка параметров, специфичных для MySQL:

Отредактируем файл /etc/security/limits.d/90-nproc.conf:

Заполним файл:

Установите под root:

Теперь, перезагрузите сервер и поменяйте параметры в конфиге MySQL:

Запишите после [mysqld]:

Запишите после [mysqld_safe]:

Теперь перезагрузите сервер:

Для проверки настроек в MySQL войдите:

Выполните команду:

В результате, должны увидеть:

Перезагрузите сервер и проверьте, сохранились ли настройки:

Если после загрузки Вы увидите значение 1024, то не сохранились настройки. В таком случае, читайте решение проблем.

Решение проблем

Проверьте файл /etc/security/limits.conf он должен содержать:

Или установите лимит таким образом:

Перезагрузите MySQL:

Можно внести изменения в:

Добавьте следующее:

В настройках /etc/my.cnf укажите:

или

Проблемы в Linux Ubuntu 15.04

Все перечисленные вещи не помогли в Linux Ubuntu 15.04. Немного погуглив, я нашел решение для Linux Ubuntu 15.04.

Нужно внести изменения в файл: /lib/systemd/system/mysql.service

К содержимому данного файла:

Добавьте:

 

3D визуализация и дизайн

Ubuntu: установка и настройка связки nginx + apache + php + mysql

В это статье я расскажу как быстро развернуть LAMP сервер на Ubuntu с кеширующим nginx

Для всех команд необходим sudo, потому сразу войдем для удобства в этот режим:

Далее, обновляем данные из репозитариев:

Установка MySQL сервер:

Во время установки нас попросят ввести пароль root для сервера MySQL, вводим 2 раза. Дожидаемся окончания установки.

Установка Apache, nginx, php:

Дожидаемся окончания установки.
Включаем модули rewrite и include в apache2 при помощи утилиты — a2enmod:

Меняем порт в apache2 со стандартного 80 на 8080 (2 строчки):

Создаем новый веб сервер (VirtualHost), создаем файл конфигурации:

И вставляем в него следующий текст:

Далее, создаем папку сайта и запускаем сайт:

Проверяем в браузере — http://domain.com:8080

Конфигурируем nginx:

Приводим конфиг к такому виду:

Далее создаем и правим конфиг нашего сайта:

Вносим в него следующие записи:

Перезапускаем сервисы и проверяем работу:

Источник: http://evolan.org/linux/ubuntu-ustanovka-i-nastrojka-svyazki-nginx-apache-php-mysql/

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

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

Столкнулся с проблемой кодировки при переходе из MySQL 4 в MySQL 5.

Это вечная проблема, которая возникает при переходе из одной версии MySQL в другую и связана с поддерживаемыми кодовыми страницами.
При переходе из MySQL 3 в MySQL 4 была проблема с кодировками, т.к. в MySQL 3 они не указывались, а в MySQL 4 стали указываться.
При переходе же из версии MySQL 4 в MySQL 5 проблема связана с тем, что в 5-й версии уже используется универсальная кодировка utf-8.

 

В этом же форуме, я хочу подбить определённый результат, как эту проблему решить.

1. Прежде всего, нужно указать по умолчанию русские кодировки.
2. После вызова коннекта в PHP необходимо указать, что кодировка, например, cp1251

Так, например, в phpNuke я указал в файле mainfile.php после коннекта:

// Rudjuk 24.06.2007 Change Error Code
if ($db){
$db->sql_query(«set names ‘cp1251′»);
}

После этого должно работать.
Кстати, при переносе данных из одного сервера, скажем MySQL 4 на другой с MySQL 5 следует обязательно после коннекта к базе (вначале дампа) указать:
Код
SET NAMES CP1251

Еще осталась проблема с автоматическим определением кодировки.
Почему-то по умолчанию определяется на странице, что кодировка utf-8, хотя указано явно
Код
< meta http-equiv=»content-type» content=»text/html; charset=windows-1251″ />

В apache2 указывается кодировка по умолчанию в файле /etc/apache2/conf.d/charset, нужно просто вместо UTF-8 указать

AddDefaultCharset windows-1251

Что и говорить проблемы с кодировкой — часто встречаемая проблема.

Как её решить, прекрасно описано в статье: Решение проблем с кодировкой

Какая кодировка настроена в MySQL вы можете узнать с помощью запроса:
Код
SHOW VARIABLES LIKE ‘character_set_client’;

Кроме того, когда создаёте базу и таблицы не забывайте указывать кодировки, например:
Код
CREATE DATABASE inv2_neru CHARACTER SET cp1251 COLLATE cp1251_bin COLLATE cp1251_bin;
^
CREATE TABLE ibf_admin_login_logs (
admin_id int(10) NOT NULL auto_increment,
admin_ip_address varchar(16) NOT NULL default ‘0.0.0.0’,
admin_username varchar(40) NOT NULL default »,
admin_time int(10) unsigned NOT NULL default ‘0’,
admin_success int(1) unsigned NOT NULL default ‘0’,
admin_post_details text,
PRIMARY KEY (admin_id),
KEY admin_ip_address (admin_ip_address),
KEY admin_time (admin_time)
) TYPE=MyISAM AUTO_INCREMENT=84 CHARACTER SET cp1251 COLLATE cp1251_bin;
^

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Восстановление баз данных MySQL

Довольно часто базы данных MySQL «ломаются». В результате, приходится ремонтировать. Поломки баз данных происходят из-за не корректных выключений компьютера или сбоев в компьютере, когда сервер не может корректно закрыть файл. Следует отметить, что не все базы данных удаётся поремонтировать, поэтому, рекомендуется делать резервные копии rolleyes.gif

Есть несколько способов восстановления баз данных. И все они требуют, чтоб никто в это время не обращался к таблице базы данных, иначе предсказать последствия не возможно.

Самый простой способ восстановления — выполнить SQL-команду:
repair table <название таблицы>;
Данная команда восстановит таблицу в большинстве случаев.

Иногда, приходится использовать специальную утилиту для восстановления таблиц:
myisamchk -r -q <название таблицы> — режим быстрого восстановления файлов.
myisamchk -r <название таблицы> — режим восстановления файла.
myisamchk -r -f -o <название таблицы> — режим восстановления в защищенном режиме файла.

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

3D визуализация и интерьер