Как развернуть базу данных MySQL из v5.7.19 в удаленную базу данных MySQL v5.5.6 - PullRequest
0 голосов
/ 17 января 2020

На самом деле я виноват, что раньше я об этом не думал, что моя версия MySQL удаленного сервера (на виртуальном хостинге) - 5.5.6, но моя локальная версия MySQL - 5.7.19.

Я разработал Laravel (v6.6.0) веб-приложение, в котором я запустил миграцию при первом запуске, но, поскольку это полностью личный проект, я продолжал вносить изменения в базу данных вручную, где и когда это необходимо, (но выключено Кроме того, я продолжал изменять файлы миграции, хотя никогда не запускал их после первого экземпляра.

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

Указанный ключ был слишком длинным; максимальная длина ключа составляет 767 байт

Я фактически проигнорировал это, потому что все таблицы были импортированы красиво. Но недавно я нашел его предостережения - все AUTO_INCREAMENT и PRIMARY_KEY отсутствуют в моей удаленной базе данных.

Я искал то, что мог, но все решения предлагают удалить базы данных и создать его снова с UTF-8 на самом деле не может быть моим случаем. И решение, подобное следующему PHP -way, также не в моем случае, так как я использую PHPMyAdmin для импорта своей таблицы, когда я получаю сообщение об ошибке:

// File: app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema;

public function boot() 
{
    Schema::defaultStringLength(191); 
}

Я также попытался выполнить следующую команду в моей целевой базе данных:

SET @global.innodb_large_prefix = 1;

Но не повезло. Я также попытался заменить все вхождения моего .sql локального файла:

  • с utf8mb4 на utf8 и
  • с utf8mb4_unicode_ci на utf8_general_ci

, но снова не повезло.

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

Может кто-нибудь, пожалуйста, пролить свет на мою проблему?

Как я могу развернуть мой локальная база данных (v5.7) без потери моих PRIMARY_KEY s, FOREIGN KEYS и INDEX es для базы данных v5.5 MySQL, сохраняя данные в целости?

1 Ответ

0 голосов
/ 17 января 2020

Измените ваши ключевые имена. Вы можете перезаписать «сгенерированные по умолчанию» очень длинные имена ключей при их создании. См. https://laravel.com/docs/5.8/migrations Доступные типы индексов для документации

Я столкнулся с подобной проблемой при миграции с SQL сервер на MySQL и имена автоматически сгенерированных ключей это имело полные длинные пространства имен, а имена ключей были просто слишком длинными. Поэтому, заменив их вручную созданными уникальными именами индексов, я обошел эти проблемы.

Вам не нужны уникальные имена в MySQL, но если вы используете SQLITE для модульных тестов, вам нужны уникальные имена.

поэтому вместо:

public function up() 
{
   ....
   $table->primary('id');
  // generates something like work_mayeenul_islam_workhorse_models_model_name_id_primary_key
   $table->index(['foobar','bazbal']);
   // generates something like work_mayeenul_islam_workhorse_models_model_name_foobar_bazbal_index
}

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

public function up() 
{
   ....
   $table->primary('id', 'PK_short_namespace_modelname_id');
   $table->index(['foobar', 'bazbal'], 'IX_short_namespace_modelname_foobar_bazbal');
}
...