Página 1 de 2

Mysqldump

Enviado: 09 Out 2015 17:01
por cjp
Caros colegas,

Estou tentando fazer um backup de uma tabela de meu banco de dados Mysql que está no meu provedor para o banco de dados localhost.

Em pesquisa na internet, li que o mysqldump serviria pra isso. Estou tentando usá-lo, mas o máximo que consegui foi fazer o backup dos dados de criação da tabela, mas sem o seu conteúdo.

Li que o mysqldump funcionaria no PowerShell. Nunca tinha usado o PowerShell.

Pesquisei na internet e achei o PowerShell. Veja: https://pt.wikipedia.org/wiki/Windows_PowerShell.

No PowerShell ISE não aparece nada.

Já no PowerShell Modules, ele cria o arquivo .sql. Mas vejam o conteúdo:

Código: Selecionar todos

-- MySQL dump 10.13  Distrib 5.5.37, for Win32 (x86)
--
-- Host: localhost    Database: inacio
-- ------------------------------------------------------
-- Server version        5.5.37
 
/*!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 */;
 
--
-- Table structure for table `agcom`
--
 
DROP TABLE IF EXISTS `agcom`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `agcom` (
  `NRCOMPR` int(11) NOT NULL AUTO_INCREMENT,
  `DATA` date DEFAULT NULL,
  `HORA` char(5) DEFAULT NULL,
  `COMPR` text,
  `CAMPO` char(1) DEFAULT NULL,
  `VINCULO` char(20) DEFAULT NULL,
  `DTINCL` date DEFAULT NULL,
  `HRINCL` char(8) DEFAULT NULL,
  `SOLUC` char(1) DEFAULT NULL,
  PRIMARY KEY (`NRCOMPR`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `agcom`
--
 
LOCK TABLES `agcom` WRITE;
/*!40000 ALTER TABLE `agcom` DISABLE KEYS */;
/*!40000 ALTER TABLE `agcom` ENABLE KEYS */;
UNLOCK TABLES;
 
--
-- Table structure for table `teste`
--
 
DROP TABLE IF EXISTS `teste`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `teste` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `teste`
--
 
LOCK TABLES `teste` WRITE;
/*!40000 ALTER TABLE `teste` DISABLE KEYS */;
INSERT INTO `teste` VALUES (1,'Inacio');
/*!40000 ALTER TABLE `teste` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
 
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
 
-- Dump completed on 2015-09-29  0:27:12


Observem que continua sem o conteúdo.

Alguém poderia me ajudar com isso?

Mysqldump

Enviado: 09 Out 2015 19:38
por JoséQuintas
Esse é o programa indicado, mas não costumo usá-lo.

Mas observando seu backup, por acaso o conteúdo é um único registro?

Tem esta linha no dump acima:

Código: Selecionar todos

INSERT INTO `teste` VALUES (1,'Inacio');
Se for pra backup eventual, pode ser interessante usar o HeidiSQL.

Mysqldump

Enviado: 10 Out 2015 14:44
por cjp
Na verdade eu estava falando da tabela AGCOM. Mas observei depois que, no banco de dados que eu estava testando, essa tabela AGCOM estava vazia, por isso não copiou. Obrigado pela ajuda.

Não seria pra uso eventual. Eu gostaria de incorporar isso ao meu sistema, pois vou precisar fazer isso com bastante frequência.

Mas, testando mais pra valer agora, surgiram-me ainda algumas dúvidas:

1) Como faço para copiar apenas uma tabela, e não o banco completo? Testei com

Código: Selecionar todos

mysqldump -h provedor -B banco_de_dados -T agcom -u usuário -p
Dá o seguinte erro:

Código: Selecionar todos

mysqldump: --databases or --all-databases can't be used with --tab
Mas eu não estou usando --databases, --all-databases nem --tab.

Tem algum jeito de copiar apenas uma tabela e não o banco completo?

2) Como faço para já incorporar a senha no comando? Tenho usado -p sem a senha, e daí ele pede a senha em seguida, e assim funciona. Mas quando testo -p senha, ele continua pedindo a senha depois.

3) Como incorporar o mysqldump ao meu sistema? Dá pra chamá-lo com RDDINFO? Como? Ou daria pra fazer um .bat?

4) Como faço para restaurar um backup feito com o mysqldump do banco de dados do provedor para um banco de dados localhost?

Mysqldump

Enviado: 14 Out 2015 15:13
por Dudu_XBase
Tarde
Já tentou essas formas...
mysqldump -u ... -p... databasename agcom > dumpagecom.sql
ou
mysqldump -u <usuário> -p -h <host> -p databasename agcom > agcom.sql

Mysqldump

Enviado: 14 Out 2015 19:46
por JoséQuintas
Só complementando....
Eu faço via sistema, via fonte Harbour.
Tá assim há bastante tempo.

E ainda coloquei o programa como serviço no servidor, pra fazer automático e enviar por ftp.

Uso codepage PTISO no Harbour, e latin1 no MySQL.

Restauro o backup por HeidiSQL.
Só dá problema pra restaurar quando a bost. do plugin do Itaú (Gás Tecnologia) está rodando.

Mysqldump

Enviado: 14 Out 2015 23:39
por cjp
Dudu, assim deu certo. Muito obrigado. A única coisa que ainda não funcionou foi colocar a senha direto; ele continua pedindo a senha, mesmo eu tendo colocado -p senha; e dá erro Access denied to database 'senha'. Parece que ele entende que a senha seria o nome da base.

Quintas, daria pra vc passar o caminho das pedras para incorporar o mysqldump no meu sistema Harbour?

E para restaurar, também dá pra usar o mysqldump?

Mysqldump

Enviado: 15 Out 2015 00:59
por alxsts
Olá!
cjp escreveu:A única coisa que ainda não funcionou foi colocar a senha direto; ele continua pedindo a senha, mesmo eu tendo colocado -p senha
Acho que tem esta pegadinha mesmo. Se você colocar -psenha (sem o espaço entre o -p e a senha), ele não deve pedir a senha. Experimente.

Para embutir em seu sistema, você pode montar a linha de comando e executar:

Código: Selecionar todos

   LOCAL cCommand := "start mysqldump.exe -u<user> -p<password> DBName > C:\DBname.sql" 
      hb_processRun( getEnv( "COMSPEC" ) + " /c " + cCommand ) 

Mysqldump

Enviado: 15 Out 2015 10:05
por JoséQuintas
Restaurar pelo sistema?
Mas se não tem banco de dados não tem sistema, ou tem?

Mysqldump

Enviado: 15 Out 2015 14:45
por cjp
De fato, Alexandre, com -p<senha>, sem o espaço, funcionou. Obrigado.

Colocando no meu sistema com o teu código, acontece algo estranho: ele exibe a execução do mysqldump na tela, como se não tivesse o > arquivo.sql. Ele até cria o arquivo, mas ele fica zerado. Vc sabe por que?

Quintas, tem sistema sim. É que a tabela já existe no banco de dados do provedor, e o sistema trabalha com ela, normalmente. Com o mysqldump eu estou pretendendo fazer uma cópia para o banco de dados localhost. Então, estou copiando com o mysqldump para o arquivo .sql, e depois eu preciso criar a tabela no localhost a partir desse arquivo. Entende?

Mysqldump

Enviado: 15 Out 2015 14:53
por JoséQuintas
E algo mais ou menos assim?

Código: Selecionar todos

TRUNCATE TABLE bancolocal.TABELA
INSERT INTO bancolocal.TABELA ( SELECT * FROM bancoweb.TABELA )

Mysqldump

Enviado: 15 Out 2015 15:05
por cjp
A ideia seria justamente esta. Mas aqui não está funcionando exatamente assim, nem no HeidiSQL.

O que é o truncate? O que ele faz?

Mysqldump

Enviado: 15 Out 2015 15:23
por JoséQuintas
TRUNCATE apenas zera o arquivo, sem apagar a estrutura.

Mysqldump

Enviado: 20 Out 2015 17:43
por cjp
Descobri isso da pior forma possível: usando o truncate pelo Heidisql, ele apagou toda a tabela do provedor. Graças a Deus que eu tinha backup.

Consegui fazer o mysqldump funcionar pelo meu sistema usando o __run("mysqldump..."). Agora só preciso saber como faço para restaurar o arquivo .sql para minha base localhost.

Mysqldump

Enviado: 20 Jan 2016 00:48
por cjp
Pessoal,

Consegui fazer isto funcionar.

Só me resta um problema: ao baixar a tabela com mysqldump, ele bloqueia a tabela. Isso atrapalha minhas demais aplicações.

Alguém saberia me dizer se tem alguma forma de evitar esse bloqueio temporário?

Mysqldump

Enviado: 20 Jan 2016 21:43
por JoséQuintas
No caso de banco de dados relacional, tem que ser assim mesmo.
Se o usuário estiver alterando, as bases de dados no backup podem ficar incompletas, faltando relacionamentos, e se tornarem inválidas.
De nada adianta um backup que depois não funcione.

Dá até pra desativar isso, mas é perigoso.
Isso se estiver falando sobre o backup.

Sobre o restore não tem mesmo, porque o "arquivo" vai estar sendo recriado e "repopulado".
Como permitir incluir, se nem terminou de incluir o que tem no backup.