view mobile version net4me Enable JavaScript in your browser! Linux education center net4me.
 
net4me logo

tux

linux commands
shell script
protocol
ip, tcp, smtp, ntp, ftp
telnet terminal
java and javascript
ajax web technology
documentation
howto, man, info
cisco in network
linux server
linux in home
online utility
and more more more.
python development
туе4ьу дштгч

  Содержание подраздела:

Несколько заметок по mysql

mysql 5 + php 5 = utf8 везде и всюду

mysql 5
php 5
Везде тотально utf8
локаль uft8
базы, данные, сам дамп в utf8
сайт в utf8.
Всё в utf8 от и до. Вплоть до хэдеров самой страницы:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
И?
Кривая кодировка сайта. =(

Если не верите, то вот:
mysql> SHOW VARIABLES WHERE Variable_name LIKE '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Причем сам мускуль (после uft8 выправки конфигов в utf8 вместо идиотской latin1) данные выводит нормально.

Что ни выделывал, как с бубном ни танцевал - бесполезно.
Если в php скрипте насильно прописать
mysql_query('SET NAMES utf8');
то всё работает. Если убрать - перестает работать. Решилось всё насильной установкой mysql серверу параметров загрузки.
--init_connect="SET NAMES 'utf8'"

То есть в конфиге, в секцию сервера была добавлена строчка, насильно устанавлявающая NAMES в utf8:
[mysqld]
init_connect="SET NAMES 'utf8'"
character_set_server=utf8
collation_server=utf8_general_ci

И о чудо! оно заработало!

В итоге настройки для тотального utf8 в mysqld выглядят так:
mysql> SHOW VARIABLES WHERE Variable_name LIKE '%character%' OR Variable_name LIKE '%collation%' OR Variable_name = 'init_connect';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8_general_ci            |
| collation_database       | utf8_general_ci            |
| collation_server         | utf8_general_ci            |
| init_connect             | SET NAMES 'utf8'           |
+--------------------------+----------------------------+
12 rows in set (0.00 sec)
Обратите внимание на init_connect и SET NAMES 'utf8'

Восстановление забытого пароля mysql

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

Оказывается, получить доступ к mysqld будучи рутом на сервере просто:

  • Останавливаем сервис mysql:
    service mysqld stop
  • Запускаем mysql следующей командой:
    /usr/bin/mysqld_safe --skip-grant-tables --user=root &

    При этом будет проигнорирована таблица привилегий. т.е. теперь mysql нас пустит без пароля.
  • Запускаем клиента mysql:
    mysql -u root
  • Выполняем sql запрос для смены пароля пользователю. Например, с логином root:
    UPDATE mysql.user SET Password=PASSWORD('my_new_pass') WHERE User='root';
    где my_new_pass - наш новый пароль.
  • Применяем изменения:
    FLUSH PRIVILEGES;
  • Выходим из mysql клиента выполнив в нем команду exit (или quit или \q)
  • Перегружаем mysql сервер:
    service mysqld restart
    Теперь таблица привилегий уже использовалась при старте. т.е. без пароля уже не войти.
  • пробуем зайти:
    mysql -u root -p
    и вводим наш новый пароль, который мы использовали.

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


home back top
При копировании материалов нашего портала, сылка на net4me обязательна.
Рейтинг@Mail.ru   Valid HTML 4.01 Transitional     Яндекс цитирования   best billing

 



...

net4me snowflake
rfc2368
 
net4me portal This page last modified: Saturday, October 1, 2011   be in net. net4me

portal net4me linux education center