Recuperar banco de dados mysql - mysql / mysqldump dá “tabela database.tablename não existe (1146)”

5

História anterior

O Ubuntu morreu (não inicializaria) e eu não consegui consertá-lo. Eu inicializei um live cd para recuperar as coisas importantes e salvei no meu NAS. Uma das coisas que fiz backup foi / var / lib / mysql.

Reinstalado com o Linux Mint porque eu estava no Ubuntu 10.0.4, esta foi uma boa oportunidade para experimentar uma nova distro (e eu não gosto do Unity). Agora eu quero recuperar meu antigo mediawiki, então eu desliguei o daemon mysql, cp -R /media/NAS/Backup/mysql/mediawiki@002d1_19_1 /var/lib/mysql/ , configurei a propriedade e as permissões do arquivo corretamente, e reiniciei o mysql.

Problema

Agora estou tentando exportar o banco de dados para que eu possa Restore o banco de dados , mas quando eu executo o mysqldump eu recebo um erro:

$ mysqldump -u mediawikiuser -p mediawiki-1_19_1 -c | gzip -9 > wiki.2012-11-15.sql.gz
Enter password:
mysqldump: Got error: 1146: Table 'mediawiki-1_19_1.archive' doesn't exist when using LOCK TABLES

Coisas que tentei

Eu tentei usar --skip-lock-tables , mas eu entendi:

Error: Couldn't read status information for table archive ()
mysqldump: Couldn't execute 'show create table 'archive'': Table 'mediawiki-1_19_1.archive' doesn't exist (1146)

Eu tentei fazer o login no mysql e posso listar as tabelas que deveriam estar lá, mas tentando describe ou select com erros da mesma maneira que o dump:

mysql> show tables;
+----------------------------+
| Tables_in_mediawiki-1_19_1 |
+----------------------------+
| archive                    |
| category                   |
| categorylinks              |

...

| user_properties            |
| valid_tag                  |
| watchlist                  |
+----------------------------+
49 rows in set (0.00 sec)

mysql> describe archive;
ERROR 1146 (42S02): Table 'mediawiki-1_19_1.archive' doesn't exist

Acredito que o mediawiki foi instalado usando dados innodb e binários.

Estou ferrado ou há uma maneira de recuperar isso?

    
por Matthew 15.11.2012 / 22:13

2 respostas

2

Encontrou alguém fazendo uma pergunta semelhante: MySQL & gt ; Tabela não existe. Mas isso acontece (ou deveria) .

Mike Dacre teve a resposta que resolveu meu problema. O problema era que o ib_logfile0 e o ib_logfile1 (e talvez alguns dos outros arquivos ib * no diretório mysql / root) estavam inconsistentes com minha nova instalação do mysql. Você não pode simplesmente colocar arquivos db do antigo diretório mysql / e esperar que funcione.

O que eu fiz para recuperar o banco de dados foi fazer o backup do meu / var / lib / mysql / na nova instalação:

$ sudo service mysql stop # Stop mysql. Command could be different on different distros
$ sudo mv /var/lib/mysql ~/mysql.bku

Copie o diretório de backup de emergência para / var / lib

$ sudo cp -R /media/NAS/Backup/mysql /var/lib/

Em seguida, defina as permissões adequadamente (consulte ~ / mysql.bku / para referência, se necessário). Pode haver comandos mais eficientes para isso, mas estou incluindo o que sei para ser completo, caso alguém com menos experiência possa precisar dele.

$ sudo chown -R mysql:mysql /var/lib/mysql
$ sudo find /var/lib/mysql/ -type d -exec chmod 700 {} \;
$ sudo find /var/lib/mysql/ -type f -exec chmod 660 {} \;
$ sudo chmod 644 /var/lib/mysql/debian-5.1.flag # Not sure what this is but the permissions were a bit different so include it just in case

E inicie o mysql novamente

$ sudo service mysql start # Again command might be different on different distros

Depois, fiz backup dos bancos de dados de que precisava:

$ mysqldump -u root -p mediawiki-1_19_1 -c | gzip -9 > wiki.2012-11-15.sql.gz

Quando terminei, coloquei o diretório mysql / e depois importei os bancos de dados dos arquivos de despejo.

$ sudo service mysql stop
$ sudo mv /var/lib/mysql ~/mysql-discard # Too nervous to start typing "sudo rm -r /" for /var/lib/mysql, so move it away instead
$ sudo mv ~/mysql.bku /var/lib/mysql
$ sudo service mysql start

Problema resolvido, eu tenho uma exportação adequada do banco de dados agora e o mysql está rodando corretamente também. Tudo o que resta é seguir o guia Como restaurar um wiki a partir do backup .

    
por 16.11.2012 / 00:28
0

Você pode tentar:

  1. Certificando-se de que os arquivos de dados da tabela realmente existem em /var/db/mysql ou onde quer que sua instalação / distribuição em particular os coloque.
  2. Peruse o log de erro do mysql, geralmente no diretório acima.
  3. Use mysqlcheck --repair .
  4. Tire o mySQL offline e execute um myisamchk .
  5. Espero que você tenha um bom backup em outro lugar ou que a tabela de arquivos não seja muito importante.
por 15.11.2012 / 23:18