Архив рубрики: MySQL

Mysql too many connections

Вариант А
В случае медленных запросов, оптимизируем их, добавляем индексы и т.д.

Вариант Б
Одновременные соединения. В этом случае распределяем их на разное время запуска, чтобы они были выполнены не в одинаковое время. Т.е. убрать вот такие варианты:

1
2
3
4
$otime = date('i');
while ( true ) {
if ( $otime != date('i') ) { mysql_query('SELECT 1'); $otime = date('i'); }
}

А может быть оптимизация кода Вам не подойдет, тогда можно увеличить кол-во одновременных подключений. Это делается в файле конфигурации mysql, а именно /etc/my.cnf, вот в этой строчке:

1
max_connections = 250

Стандартное значение после установки 100. После внесения изменений, нужно рестартануть демона mysqld, делается это командой:

1
/etc/init.d/mysqld restart

и теперь можно проверить, все ли ок, sql запросом:

1
SHOW VARIABLES LIKE 'max_connections'

Вот и всё. Не забывайте делать резервные копии перед внесением изменений в конфигурационные файлы!

Host ‘имя_хоста’ is not allowed to connect to this MySQL server

Это происходит из-за того, что у пользователя, от имени которого вы обращаетесь к MySQL-серверу, отсутствует доступ к данному серверу с текущего IP-адреса.

Решение: в таблице пользователей нужно разрешить юзеру доступ к базе либо с определенного (например, ’10.10.10.10′@’user’), либо с любого IP-адреса (‘%’@’user’).

Действия: В консоли логинимся на MySQL-сервер под логином root с его паролем, создаем (или модифицируем, если он уже есть) пользователя с возможностью подключения к нужной нам базе с любого IP-адреса и перезагружаем таблицу разрешений:

~# mysql -u root mysql -p

mysql> GRANT ALL PRIVILEGES ON database.* TO [email protected]»%» IDENTIFIED BY ‘password’ WITH GRANT OPTION;
mysql> exit;

~# mysqladmin -u root -p flush-privileges

Ошибка в sql server 2005 express

При установлении соединения с SQL Server произошла ошибка, связанная с сетью или с определенным экземпляром. Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что на SQL Server разрешены удаленные соединения. (provider: Поставщик именованных каналов, error: 40 — Не удалось открыть подключение к SQL Server) (.Net SqlClient Data Provider)

 

1) Если вы действительно подключаетесь с локальной машины, то попробуйте написать не имя компьютера saiman, а текст «(local)»;

2) Не запущена служба SQL-сервера. Посмотрите список служб, найдите ее, проверьте параметры и запустите;

3) Ваш экземпляр сервера установлен как «именованный» (это выбирается при разворачивании дистрибутива и возможно установлено по-умолчанию), поэтому при подключении к нему необходимо указывать не только имя компьютера но и имя экземпляра, например SAIMAN\SQLEXPRESS;

4) Проблема в «именованных каналах». Нужно запретить их использование, а оставить только TCP/IP. К сожалению, не помню где в MS SQL EXPRESS это настраивается.

исправить ошибку «Достигнут временной лимит. Если вы хотите завершить импорт, перезапустите его выбрав тот же файл, и процесс продолжится с того места на котором остановился.»

В конфигурационном файле phpMyAdmin изменить максимальное время выполнения скрипта в переменной.

$cfg['ExecTimeLimit'] = 60000;

Как поменять кодировку сразу всех таблиц в базе mysql

Иногда бывает так, что из доступа к базе данных бывает только доступ через phpMyAdmin. А также бывает, что кто-то, создал базу с неправильной кодировкой. В моем случае этой кодировкой была — шведская. Что же делать для того чтобы поменять кодировку на более нужную — к примеру utf8?

Для этого существует очень простой способ. Необходимо выполнить вот такой вот запрос при помощи редактора SQL в phpMyAdmin:

1
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]

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

 

Итак, MySQL сервер версии 5.0 и выше, умеет выполнить вот такой вот запрос:

1
2
3
4
5
SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as sqlcode
  FROM `information_schema`.`TABLES` t
 WHERE 1
   AND t.`TABLE_SCHEMA` = 'db_name'
 ORDER BY 1

в этом запросе, вместо db_name необходимо поменять на реальное имя базы данных, кодировку которой вы собираетесь менять.

Выполнив этот запрос, мы получим еще один SQL, модифицирующий кодировку таблиц, он будет выглядеть примерно так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ALTER TABLE `mydatabase`.`auth_group_permissions` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_group` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_message` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_permission` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_user_groups` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_user_user_permissions` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_user` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`blog_post` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_admin_log` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_comments` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_comment_flags` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_content_type` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_session` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`gallery_album` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`gallery_photo` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`gallery_video` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`members_userprofile` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Вот теперь можно копировать результирующий скрипт и выполнять его в окошке SQL зпросов. Результатом выполнения данного скрипта будет изменение кодировки во всех таблицах MySQL базы данных.

Есть файлы .frm .MYD .MYI, как импортировать в БД?

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

/var/lib/mysql

и перезапустить SQL.

Не забудьте дать права SQL на запись, так как скорей всего после копирования у вас будут права по умолчанию от пользователя.