Перенос базы данных на новый сервер с более старого билинга
Перенос базы данных на новый сервер с более старого билинга
Здравствуйте.
Есть биллинг на рабочем серваке ($conf{version}='0.54b'; #05.04.2011). В связи с заменой сервера возникла необходимость перенести базу на новый сервер. Вопрос: как это лучше сделать при условии, что в обновленной структуре БД есть две новых таблицы (admin_settings; docs_invoice2payments)?
1. Создать базу на новом серваке скриптом из нового биллинга и просто залить в него дамп.
2. Создать базу командой sql, залить дамп и потом вручную создать недостающие таблицы.
Мне первый вариент кажется более логиным, но не нарушится ли бизнес-логика работы билинга? Может-быть, есть какие то подводные камни о которых стоит знать?
Есть биллинг на рабочем серваке ($conf{version}='0.54b'; #05.04.2011). В связи с заменой сервера возникла необходимость перенести базу на новый сервер. Вопрос: как это лучше сделать при условии, что в обновленной структуре БД есть две новых таблицы (admin_settings; docs_invoice2payments)?
1. Создать базу на новом серваке скриптом из нового биллинга и просто залить в него дамп.
2. Создать базу командой sql, залить дамп и потом вручную создать недостающие таблицы.
Мне первый вариент кажется более логиным, но не нарушится ли бизнес-логика работы билинга? Может-быть, есть какие то подводные камни о которых стоит знать?
Re: Перенос базы данных на новый сервер с более старого били
1. Делаем дамп на работающем сервере.
2. Копируем и заливаем в БД дамп на новый сервер
3. Выполняем обновления из Wiki по ChangeLogs http://abills.net.ua/wiki/doku.php/abil ... elogs:0.5x
2. Копируем и заливаем в БД дамп на новый сервер
3. Выполняем обновления из Wiki по ChangeLogs http://abills.net.ua/wiki/doku.php/abil ... elogs:0.5x
Re: Перенос базы данных на новый сервер с более старого били
Спасибо за ответ, буду пробовать.
Re: Перенос базы данных на новый сервер с более старого били
Хм, то ли лыжи не едут...
Возникла такая проблема: выполняю команды из ChangeLogs начиная с 04.04.2011. В них регулярно фигурируют таблицы с префиксом "abon_", которых нет ни в старой базе, ни в созданной свежим скриптом:.
Кстати, не знаю важно ли это, заметил, что скрипт создания базы новее билинга (строка сверху):
Возникла такая проблема: выполняю команды из ChangeLogs начиная с 04.04.2011. В них регулярно фигурируют таблицы с префиксом "abon_", которых нет ни в старой базе, ни в созданной свежим скриптом:
Код: Выделить всё
mysql> ALTER TABLE `abon_user_list` ADD COLUMN `service_count` smallint(4) unsigned NOT NULL DEFAULT 1;
ERROR 1146 (42S02): Table 'abills.abon_user_list' doesn't exist
Кстати, не знаю важно ли это, заметил, что скрипт создания базы новее билинга (строка сверху):
Код: Выделить всё
/usr/abills/db$ ll
итого 305
drwxr-xr-x 3 root root 880 2012-03-31 23:36 ./
drwxr-xr-x 16 root root 464 2012-05-21 21:18 ../
-rw-r--r-- 1 root root 52385 2012-03-26 18:00 abills.sql
-rw-r--r-- 1 root root 1941 2011-07-19 09:28 Abon.sql
-rw-r--r-- 1 root root 1483 2011-08-15 17:46 Ashield.sql
-rw-r--r-- 1 root root 1811 2012-03-26 15:11 Bonus.sql
-rw-r--r-- 1 root root 3173 2011-04-17 16:09 Cards.sql
drwxr-xr-x 2 root root 152 2012-03-31 23:06 CVS/
-rw-r--r-- 1 root root 3942 2012-03-17 14:12 Dhcphosts.sql
-rw-r--r-- 1 root root 77346 2010-05-19 10:32 Dunes.sql
-rw-r--r-- 1 root root 2345 2011-11-10 16:43 Extfin.sql
-rw-r--r-- 1 root root 3303 2009-11-29 22:07 Filearch.pm
-rw-r--r-- 1 root root 2447 2012-01-07 01:35 Ipn.sql
-rw-r--r-- 1 root root 2461 2011-07-04 10:53 Iptv.sql
-rw-r--r-- 1 root root 3234 2007-11-15 11:30 Mail.sql
-rw-r--r-- 1 root root 789 2011-10-19 11:51 Maps.sql
-rw-r--r-- 1 root root 1189 2009-12-01 22:12 Marketing.sql
-rw-r--r-- 1 root root 1634 2011-09-05 18:17 Mdelivery.sql
-rw-r--r-- 1 root root 760 2011-02-16 11:15 Multidoms.sql
-rw-r--r-- 1 root root 913 2007-11-15 11:30 Netlist.sql
-rw-r--r-- 1 root root 369 2011-06-14 15:45 Notepad.sql
-rw-r--r-- 1 root root 806 2011-10-06 11:35 Paysys.sql
-rw-r--r-- 1 root root 874 2011-11-01 16:18 Portal.sql
-rw-r--r-- 1 root root 3401 2011-01-10 12:30 Sharing.sql
-rw-r--r-- 1 root root 381 2008-04-23 18:21 Snmputils.sql
-rw-r--r-- 1 root root 5409 2012-02-03 14:36 Storage.sql
-rw-r--r-- 1 root root 486 2011-11-06 23:57 Turbo.sql
-rw-r--r-- 1 root root 2130 2011-09-28 17:24 Ureports.sql
-rw-r--r-- 1 root root 599 2011-12-09 14:13 Vlan.sql
-rw-r--r-- 1 root root 76625 2007-11-15 11:30 Voip.sql
Re: Перенос базы данных на новый сервер с более старого били
Я думаю это таблицы для модуля Abon http://abills.net.ua/wiki/doku.php/abills:docs:abon:ruХм, то ли лыжи не едут...
Возникла такая проблема: выполняю команды из ChangeLogs начиная с 04.04.2011. В них регулярно фигурируют таблицы с префиксом "abon_", которых нет ни в старой базе, ни в созданной свежим скриптом:
Он не является обязательным к использованию.
как говорит wiki.Модуль снятия дневных, месячных и годовых абон. плат за используемые сервисы или услуги.
Re: Перенос базы данных на новый сервер с более старого били
Блин, у меня уже мозг кипит.
В старой базе конфиг:
По-идее, по-умолчанию должна быть utf8, но:
Ну, как бы, латин так латин, перекодирую на utf8 и меняю движок с myisam на innodb:
В итоге, русский текст билинга отображется нормально, а пользовательские данные "кракозябрами".
Конфиг нового билинга:
Что я сделад не так, господа-админы?
В старой базе конфиг:
Код: Выделить всё
#For MySQL 5 and highter (cp1251, utf8)
$conf{dbcharset}='';
Код: Выделить всё
mysql> SHOW VARIABLES LIKE "character_set_database";
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
Код: Выделить всё
# iconv -f LATIN1 -t UTF-8 < abills.sql > abills.utf8.sql
# sed -e 's/SET NAMES latin1/SET NAMES utf8/g' -i abills.utf8.sql
# sed -e 's/CHARSET=latin1/CHARSET=utf8 COLLATE=utf8_general_ci/g' -i abills.utf8.sql
# sed -e 's/ENGINE=MyISAM/ENGINE=InnoDB/g' -i abills.utf8.sql
mysql> CREATE DATABASE abills DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
# mysql --default-character-set=utf8 -u root -p -D abills < abills.utf8.sql
Конфиг нового билинга:
Код: Выделить всё
#For MySQL 5 and highter (cp1251, utf8)
$conf{dbcharset}='utf8';
Re: Перенос базы данных на новый сервер с более старого били
Код: Выделить всё
[mysqld]
character-set-server = utf8
И посмотрите вывод.
Код: Выделить всё
mysql -u abills -p
use abills;
SELECT fio FROM users_pi LIMIT 10;
Re: Перенос базы данных на новый сервер с более старого били
Кодировку в конфиг сервера добавил.
В выводе конслои mysql-сервера тоже кракозябры.
Читал где то, что mysql по-умолчанию делает дамп в utf-8, а у меня в дампе явно прописано CHARSET=latin1, не может ли быть такого, что дамп реально в utf-8, а записан как latin1?
Можна ли безболезненно очистить таблицу в которой хранятся ошибки аккаунтов при подключении - errors_log, кажется? Ключей там не заметил, по-идее, просто хранилище.
В выводе конслои mysql-сервера тоже кракозябры.
Читал где то, что mysql по-умолчанию делает дамп в utf-8, а у меня в дампе явно прописано CHARSET=latin1, не может ли быть такого, что дамп реально в utf-8, а записан как latin1?
Можна ли безболезненно очистить таблицу в которой хранятся ошибки аккаунтов при подключении - errors_log, кажется? Ключей там не заметил, по-идее, просто хранилище.
Re: Перенос базы данных на новый сервер с более старого били
Провел експеримент - сделал копию дампа и не конвертируя:
Кракозябры остались
.
Код: Выделить всё
# sed -e 's/SET NAMES latin1/SET NAMES utf8/g' -i abills.sql
# sed -e 's/CHARSET=latin1/CHARSET=utf8 COLLATE=utf8_general_ci/g' -i abills.sql
# sed -e 's/ENGINE=MyISAM/ENGINE=InnoDB/g' -i abills.sql
mysql -u root -p -D abills_temp < abills.sql
![Sad :(](./images/smilies/icon_sad.gif)
Re: Перенос базы данных на новый сервер с более старого били
Я чистил на живой системе, без происшествий.Можна ли безболезненно очистить таблицу в которой хранятся ошибки аккаунтов при подключении - errors_log, кажется?
Код: Выделить всё
TRUNCATE TABLE errors_log
Только что ради эксперимента создал базу в latin1 и сдампилась с нормальными символами.
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test` (
`test` varchar(100) COLLATE latin1_general_ci NOT NULL,
`тест` varchar(100) COLLATE latin1_general_ci NOT NULL,
`тест2` varchar(100) COLLATE latin1_general_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
Re: Перенос базы данных на новый сервер с более старого били
Шапка дампа:
Пример таблицы:
Такое, визуально, и в остальных таблицах. В обеих дампах: первом который конвертировал iconv и второй в котором просто заменил ключевые слова.
Код: Выделить всё
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
Код: Выделить всё
DROP TABLE IF EXISTS `admin_actions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `admin_actions` (
`actions` varchar(100) NOT NULL DEFAULT '',
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`ip` int(11) unsigned NOT NULL DEFAULT '0',
`uid` int(11) unsigned NOT NULL DEFAULT '0',
`aid` smallint(6) unsigned NOT NULL DEFAULT '0',
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`module` varchar(10) NOT NULL DEFAULT '',
`action_type` tinyint(2) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
Re: Перенос базы данных на новый сервер с более старого били
Хм, обратил внимание, что в самом дампе базы русский текст не читаем. Возник вопрос - как правильно сделать дамп имея такие входные данные? Какую кодировку указывать принудительно latin1 или utf8? Дамп делал так: sudo mysqldump -u root -p abills > abills.sql
Код: Выделить всё
mysql> show variables like 'collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Re: Перенос базы данных на новый сервер с более старого били
сначало перевести дамп в cp1251 а потом в utf
более быстро это можно воспользовавшись утилитой db_convert (доступна для ком абонентов)
более быстро это можно воспользовавшись утилитой db_convert (доступна для ком абонентов)
Re: Перенос базы данных на новый сервер с более старого били
Сделал новый дамп:
русский/украинский текст в дампе читаем.
Делаю:
русский не читаем уже в дампе, заливал в базу - то же самое.
кирилица буквально вырезана - несколько точек и пробелов. Из любопытсва пробую:
как бы и конвертировалось но вместо многих букв точки или пробелы. Все это я смотрю непосредственно в дампе и получается, что еще на этапе конвертирования ломается кирилица.
Быть может база реально не в latin1, потому и конвертирование ломается? Как это можно проверить?
UPDATE: Пишут в интернетах, что данные, вроде как, реально лежат в кодировке cp1251 (о чем в принципе писал Асмодеус). Пока не соображу, что это дает.
Та часть кирилицы, что успела записаться снова таки нечитаема.
Фух, мля. Казалось бы тривиальная задача...........
Код: Выделить всё
mysqldump -u root -p --default-character-set=latin1 abills > abills.latin1_.sql
Делаю:
Код: Выделить всё
iconv -c -f latin1 -t utf8 abills.latin1_.sql > abills.utf8.sql
Делаю:~AsmodeuS~ писал(а):сначало перевести дамп в cp1251 а потом в utf
Код: Выделить всё
iconv -c -f latin1 -t cp1251 abills.latin1_.sql > abills.1251.sql
Код: Выделить всё
iconv -c -f latin1 -t cp1252 abills.latin1_.sql > abills.1252.sql
Быть может база реально не в latin1, потому и конвертирование ломается? Как это можно проверить?
UPDATE: Пишут в интернетах, что данные, вроде как, реально лежат в кодировке cp1251 (о чем в принципе писал Асмодеус). Пока не соображу, что это дает.
Код: Выделить всё
# iconv -f cp1251 -t utf-8 abills.latin1_.sql > newbase.sql
iconv: illegal input sequence at position 59642
Фух, мля. Казалось бы тривиальная задача...........
Re: Перенос базы данных на новый сервер с более старого били
Судя по-всему дамп и был в utf8, не нужно было ничего перекодировать.