SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.03.2018 17:29:38

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Backup

Добрый день!
Как правильно сделать полный бекап для переноса данных с сервера MySql 5.5 на другой сервер MariaDB 10.2.13
Планирую так
mysqldump.exe -u backup -p***** -A -R -E --triggers --single-transaction > full_backup.sql
Я так понимаю, что пользователи тоже будут перенесены?

Отредактированно klow (15.03.2018 17:43:57)

Неактивен

 

#2 16.03.2018 12:11:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6676

Re: Backup

Да, -A бэкапит все базы, включая базу mysql, в которой живут пользователи.

При переносе я бы, наверное, просто скопировал данные бинарно (innobackupex или просто остановить-скопировать, если есть возможность): это сильно быстрее для больших баз, чем перегонять через текст.

Неактивен

 

#3 16.03.2018 12:13:13

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

Нужно через текст для уменьшения бинарного файла. Он и так уже сильно вырос.

Неактивен

 

#4 17.03.2018 11:08:14

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

и не получилось

sql написал:

ERROR 1911 (HY000) at line 8097: Unknown option 'date_format'

То есть, нужно  исключить MySql из бекапа. А как перенести пользователей?

Отредактированно klow (17.03.2018 11:54:20)

Неактивен

 

#5 17.03.2018 13:59:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5430

Re: Backup

странно, дока говорит что date_format в марии есть и не используется также как и в mysql 5.5
Похоже на багу - возможно в марии 10.2 уже удалили эту переменную (как планируют сделать в mysql 8), но в доке не отобразили.

Что в этой строке? Можно закомментировать?

Неактивен

 

#6 17.03.2018 14:56:19

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

значение
date_format = %Y-%m-%d
есть еще
time_format = %H:%i:%s
datetime_format = %Y-%m-%d %H:%i:%s

Переменные не используются, но они есть. Вот поэтому меня смущает полный перенос ДБ MySql/
По поводу закомментировать - не понял.

Отредактированно klow (17.03.2018 15:03:32)

Неактивен

 

#7 17.03.2018 15:18:41

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

мда. Оказывается к переменным это не имеет отношение.
ругается на подключаемую таблицу

DROP TABLE IF EXISTS `iis_log`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `iis_log` (
  `date` datetime NOT NULL `date_format`='YYYY-MM-DD hh:mm:ss',
  `ip` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `username` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
  `method` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `uri-stem` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
  `uri-query` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL,
  `status` int(11) NOT NULL,
  `sc-bytes` int(11) NOT NULL,
  `cs-bytes` int(11) NOT NULL,
  `host` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Referer` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=CONNECT DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci `TABLE_TYPE`=CSV `FILE_NAME`='c:\\inetpub\\logs\\LogFiles\\W3SVC1\\Output.csv' `HEADER`=1 `SEP_CHAR`=',' `QUOTED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;

И действительно, похоже на баг.

А вот код самой таблицы:
CREATE TABLE `iis_log` (
    `date` DATETIME NOT NULL,
    `ip` VARCHAR(15) NOT NULL COLLATE 'utf8_unicode_ci',
    `username` VARCHAR(250) NOT NULL COLLATE 'utf8_unicode_ci',
    `method` VARCHAR(10) NOT NULL COLLATE 'utf8_unicode_ci',
    `uri-stem` VARCHAR(250) NOT NULL COLLATE 'utf8_unicode_ci',
    `uri-query` VARCHAR(1000) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
    `status` INT(11) NOT NULL,
    `sc-bytes` INT(11) NOT NULL,
    `cs-bytes` INT(11) NOT NULL,
    `host` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
    `Referer` VARCHAR(1000) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci'
)
COLLATE='utf8_unicode_ci'
ENGINE=CONNECT;

Отредактированно klow (17.03.2018 15:24:06)

Неактивен

 

#8 17.03.2018 15:34:24

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

действительно баг
Если убрать кавычки то отрабатывает без ошибок

`date` datetime NOT NULL date_format='YYYY-MM-DD hh:mm:ss'

Неактивен

 

#9 18.03.2018 11:16:31

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

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

Неактивен

 

#10 18.03.2018 13:06:13

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

так, странности продолжаются.
Если попытаться выполнить команду

SET PASSWORD FOR 'backup'@'%' = PASSWORD('1234');

Получаю ошибку

SQL Ошибка (1133): Can't find any matching row in the user table

Но если попытаться изменить пароль через интерфейс HeidiSQL то это срабатывает и после все остальные пользователи нормально могут работать, то есть, их пароли становятся рабочими. Запуск

SET PASSWORD FOR 'backup'@'%' = PASSWORD('1234');
уже отрабатывает без ошибки.
В логах HeidiSQL к северу идет обычная команда
SET PASSWORD FOR 'backup'@'%' = PASSWORD('1234');

Ничего не понимаю.
Чем дальше в лес, тем больше дров. sad

ЗЫ
В качестве теста переношу (backup, restore) только БД MySQL

Отредактированно klow (18.03.2018 13:32:27)

Неактивен

 

#11 19.03.2018 14:52:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6676

Re: Backup

Для бэкапа при mysqldump можно поиграть с ключом --compatible, он автоматически вырежет все дополнительные свойства полей типа datetime_format.  Что касается паролей, то Мария может хранить их в другом формате, поэтому бинарный перенос может не полечить, это правда. Как вариант — можно не дампить базу mysql вообще, снять гранты через pt-show-grants и накатить их текстом на целевую машинку.

Правильным «каноническим» способом я всё еще считаю запуск нового кода над старыми данными, после этого можно сделать mysqldump / mysql для уменьшения размера и преобразования форматов (в рамках одной версии кода все ключи должны быть совместимы).

Неактивен

 

#12 19.03.2018 15:41:49

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

paulus написал:

Для бэкапа при mysqldump можно поиграть с ключом --compatible, он автоматически вырежет все дополнительные свойства полей типа datetime_format.

Вырезать datetime_format не нужно - без него работать не будет.
В данном случае это явный баг. Кавычек в datetime_format не должно быть.
По поводу паролей, похоже тоже на баг, он он проявляется только если установить чистую MariaDB и залить БД MySql.

Неактивен

 

#13 19.03.2018 16:21:11

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3818

Re: Backup

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

Неактивен

 

#14 19.03.2018 16:22:13

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

уже запостил. Воспроизводится легко

Неактивен

 

#15 21.03.2018 15:18:19

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

По поводу ошибки с пользователями. Кто может протестировать?
Воспроизведение ошибки:
1. Делаем бекап БД MySql.
   Внимание!
   Должны быть пользователи отличные от root.
   Достаточно только базы mysql, например: mysqldump.exe --user=root -p MySQL > MySql.sql
2. Устанавливаем MySql (MariaDB) на "чистую" машину (на другой сервер или предварительно сносим MySql)!
3. Заливаем бекап из п.1.
4. Проверяем возможность зайти пользователем отличным от root или изменить пользователя

SET PASSWORD FOR 'test'@'%' = PASSWORD ('test');

Отредактированно klow (21.03.2018 15:44:43)

Неактивен

 

#16 22.03.2018 10:36:11

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6676

Re: Backup

Попробовал — у MariaDB 10 структура таблицы user отлична от структуры MySQL 5.7, поэтому просто так пользователей заливать нельзя, придется воспользоваться pt-show-grants таки.

Если восстанавливать текстом, то получится вот так:
180322  7:30:33 [ERROR] Fatal error: mysql.user table is damaged or in unsupported 3.20 format.

Если восстанавливать бинарно, то получится вот так:
180322  7:31:47 [ERROR] Unknown/unsupported storage engine: InnoDB

Всё-таки, системные таблицы — это системные таблицы. И плохо, что разломали бинарную совместимость, отстреливают себе ноги sad

Неактивен

 

#17 22.03.2018 10:40:56

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 343

Re: Backup

Спасибо за инфу. Но в данном случае я все делаю на одной версии MariaDB 10.2.13. Ошибка у меня легко воспроизводится. Уже передал баг разработчику. Но интересно, это характерно только для MariaDB или для MySql тоже? А может этот баг проявляться только у меня?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson