Назад | Перейти на главную страницу

Замените базы данных MySql более новой копией через командную строку

Сервер Ubuntu, на котором запущен сервер MySql.

У нас на сервере 5 баз данных. При недавнем сбое сервер был восстановлен неправильно, и теперь 1 база данных (B) имеет 2 неправильные таблицы, а вторая база данных (A) полностью неверна.

Как правильно заменить файлы базы данных?

Это так просто, как

cp -a /path/to/backup/databaseA/ /var/lib/mysql/databaseA
cp -a /path/to/backup/databaseB/table1.MYD /var/lib/mysql/databaseB
cp -a /path/to/backup/databaseB/table1.MYI /var/lib/mysql/databaseB
cp -a /path/to/backup/databaseB/table2.ibd /var/lib/mysql/databaseB

И чего стоит, существуют смешанные таблицы MyISAM и InnoDB.

С MyISAM - никаких проблем (кроме метаданных) относительно InnoDB: https://dba.stackexchange.com/questions/15531/why-does-innodb-store-all-databases-in-one-file

Я думаю, твоя проблема в innodb_file_per_table - была ли эта опция включена до того, как таблицы были создан на обоих A и B или нет.

Если innodb_file_per_table был включен позже - у вас будет смешанное табличное пространство: некоторые данные будут сохранены в .ibd и некоторые в ibdata1, метаданные всегда остаются в ibdata1.

Также помните, что не только файлы базы данных предоставляют информацию о таблицах, разрешениях и т. Д. (Метаданные) - mysql Информационные таблицы БД и ibdata1 делать. Таким образом, копирование полезно только тогда, когда нет изменений или вам не нужны эти метаданные.

Короткий ответ - нет (нужно ibdata1 слишком). это не так просто, но в некоторых случаях это может сработать.

Если это не ответ, который вы ищете - эта информация в любом случае может быть вам очень полезна.

Рекавери: вам нужно ibdata1 тоже, но это повлияет и на другие БД с innodb.