Перенос базы данных на новый сервер с более старого билинга

Установка, настройка, поддержка
seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Перенос базы данных на новый сервер с более старого билинга

Сообщение seth »

Здравствуйте.
Есть биллинг на рабочем серваке ($conf{version}='0.54b'; #05.04.2011). В связи с заменой сервера возникла необходимость перенести базу на новый сервер. Вопрос: как это лучше сделать при условии, что в обновленной структуре БД есть две новых таблицы (admin_settings; docs_invoice2payments)?
1. Создать базу на новом серваке скриптом из нового биллинга и просто залить в него дамп.
2. Создать базу командой sql, залить дамп и потом вручную создать недостающие таблицы.
Мне первый вариент кажется более логиным, но не нарушится ли бизнес-логика работы билинга? Может-быть, есть какие то подводные камни о которых стоит знать?

snooppy
Сообщения: 37
Зарегистрирован: Пн апр 29, 2013 7:20 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение snooppy »

1. Делаем дамп на работающем сервере.
2. Копируем и заливаем в БД дамп на новый сервер
3. Выполняем обновления из Wiki по ChangeLogs http://abills.net.ua/wiki/doku.php/abil ... elogs:0.5x

seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение seth »

Спасибо за ответ, буду пробовать.

seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение seth »

Хм, то ли лыжи не едут...
Возникла такая проблема: выполняю команды из 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

snooppy
Сообщения: 37
Зарегистрирован: Пн апр 29, 2013 7:20 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение snooppy »

Хм, то ли лыжи не едут...
Возникла такая проблема: выполняю команды из ChangeLogs начиная с 04.04.2011. В них регулярно фигурируют таблицы с префиксом "abon_", которых нет ни в старой базе, ни в созданной свежим скриптом:
Я думаю это таблицы для модуля Abon http://abills.net.ua/wiki/doku.php/abills:docs:abon:ru
Он не является обязательным к использованию.
Модуль снятия дневных, месячных и годовых абон. плат за используемые сервисы или услуги.
как говорит wiki.

seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение seth »

Блин, у меня уже мозг кипит.
В старой базе конфиг:

Код: Выделить всё

#For MySQL 5 and highter (cp1251, utf8)
$conf{dbcharset}='';
По-идее, по-умолчанию должна быть utf8, но:

Код: Выделить всё

mysql> SHOW VARIABLES LIKE "character_set_database"; 
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
Ну, как бы, латин так латин, перекодирую на utf8 и меняю движок с myisam на innodb:

Код: Выделить всё

# 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';
Что я сделад не так, господа-админы?

snooppy
Сообщения: 37
Зарегистрирован: Пн апр 29, 2013 7:20 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение snooppy »

Код: Выделить всё

[mysqld]
character-set-server = utf8
На всякий случай в my.cnf будет не лишним.

И посмотрите вывод.

Код: Выделить всё

mysql -u abills -p
use abills;
SELECT fio FROM users_pi LIMIT 10;
Ошибок я не заметил, но проверьте.

seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение seth »

Кодировку в конфиг сервера добавил.
В выводе конслои mysql-сервера тоже кракозябры.
Читал где то, что mysql по-умолчанию делает дамп в utf-8, а у меня в дампе явно прописано CHARSET=latin1, не может ли быть такого, что дамп реально в utf-8, а записан как latin1?
Можна ли безболезненно очистить таблицу в которой хранятся ошибки аккаунтов при подключении - errors_log, кажется? Ключей там не заметил, по-идее, просто хранилище.

seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение seth »

Провел експеримент - сделал копию дампа и не конвертируя:

Код: Выделить всё

# 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
Кракозябры остались :(.

snooppy
Сообщения: 37
Зарегистрирован: Пн апр 29, 2013 7:20 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение snooppy »

Можна ли безболезненно очистить таблицу в которой хранятся ошибки аккаунтов при подключении - errors_log, кажется?
Я чистил на живой системе, без происшествий.

Код: Выделить всё

TRUNCATE TABLE errors_log
У вас character_set_client должен быть utf-8.
Только что ради эксперимента создал базу в 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 */;

seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение seth »

Шапка дампа:

Код: Выделить всё

/*!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`),
Такое, визуально, и в остальных таблицах. В обеих дампах: первом который конвертировал iconv и второй в котором просто заменил ключевые слова.

seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение seth »

Хм, обратил внимание, что в самом дампе базы русский текст не читаем. Возник вопрос - как правильно сделать дамп имея такие входные данные? Какую кодировку указывать принудительно 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)


~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Перенос базы данных на новый сервер с более старого били

Сообщение ~AsmodeuS~ »

сначало перевести дамп в cp1251 а потом в utf

более быстро это можно воспользовавшись утилитой db_convert (доступна для ком абонентов)

seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение seth »

Сделал новый дамп:

Код: Выделить всё

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
Та часть кирилицы, что успела записаться снова таки нечитаема.

Фух, мля. Казалось бы тривиальная задача...........

seth
Сообщения: 23
Зарегистрирован: Пт авг 30, 2013 7:16 am

Re: Перенос базы данных на новый сервер с более старого били

Сообщение seth »

Судя по-всему дамп и был в utf8, не нужно было ничего перекодировать.

Ответить